Drupal * _процесс с модулем - PullRequest
       33

Drupal * _процесс с модулем

2 голосов
/ 30 августа 2009

Я новичок в Drupal dev и пытался добавить существующую переменную региона в функцию препроцессора моего модуля.

По сути, я создал новый регион для своего сайта (вот определение изнутри .info-файла моей темы):

regions[feeds] = Feeds

В Administer-> Blocks я добавил нужные блоки в новый регион "Feeds".

Затем из другого модуля, модуля "Advanced Front Page", я пытаюсь добавить PHP на свою "главную страницу" внутри этого модуля. Модуль Advanced Front Page просто позволяет сайту иметь целевую страницу, а не сразу просматривать список другого контента сайта и т. Д. Я включил PHP для области контента, а затем добавил следующее:

<div>
    <?php print $feeds; ?>
</div>

Он не печатает область «Feeds», и я считаю, что это потому, что эта переменная региона недоступна извне файла page.tpl.php. Посмотрев вокруг, я наткнулся на эти ссылки:

http://drupal.org/node/223430

http://drupal.org/node/237391

Оттуда я попытался добавить функцию препроцессора для модуля «Advanced Front Page», который имеет имя модуля «front_page» (или, возможно, просто «front», я не уверен на 100%). Вот моя функция препроцессора, которую я пытался добавить как в мой файл template.php, так и в файл /modules/front/front_page.module (не в то же время, заметьте):

function front_preprocess(&$vars)
{
 $vars['feeds'] = theme('blocks', 'feeds');
}

Независимо от того, где я разместил этот файл (template.php или front_page.module), он, похоже, ничего не делает. Есть идеи, где я могу пойти не так?

Ответы [ 2 ]

5 голосов
/ 31 августа 2009

В вашем вопросе есть несколько моментов:

  1. Я бы ответил вторым googletorps, что вы должны подходить к этому по-другому.
  2. Функции *_preprocess можно использовать только для управления / ввода переменных для шаблонов или функций тем, например, page.tpl.php, node.tpl.php, theme_links() и т. д. Поскольку модуль front_page не использует функцию темы или (специальный) шаблон для визуализации своего вывода, вы не можете сделать там переменную $ feed с помощью *_preprocess функция.
  3. Sidenote: При использовании функций *_preprocess наименование имеет решающее значение. Вам необходимо добавить префикс имени функции либо к точному имени модуля, либо к имени темы, в зависимости от того, где вы его объявили. Так что в вашем примере, если вы хотите добавить функцию предварительной обработки в модуль, вы должны добавить к ней префикс 'front_page_', если вы добавите ее в ваш файл template.php, вы добавите 'yourThemeName_'.
  4. Вы могли бы достичь желаемого, создав блоки непосредственно из кода в области содержимого главной страницы. Вместо того, чтобы пытаться вывести (не доступно) переменную $ feed, вы можете вызвать:

    theme ('blocks', 'feeds')

    Это заставит Drupal возвращать тематические блоки для данного региона (в данном случае «каналы»). Обратите внимание, что это все еще не очень хороший способ сделать это, так как даже если вы не используете регион в вашем page.tpl.php, он все равно создается для каждого запроса страницы, направляемого на ваш сайт!

Так что я бы пошел с предложением googletorps, добавив новый регион, только если есть и другие применения для него. Если бы я просто хотел добавить несколько блоков на главную страницу, я бы не создавал новую область, а настраивал блоки для отображения в области содержимого и просто ограничивал их показ только для <front> в их настройках видимости.

3 голосов
/ 31 августа 2009

Я не пробовал расширенный модуль первой страницы, но при работе с регионами не следует делать то, что вы сделали. Это немного глупо и на самом деле не нужно. Я не знаю, как модуль подключается к системе шаблонов, но ваша проблема, вероятно, заключается в том, чтобы получить переменные региона в своей области видимости. Но вместо того, чтобы пытаться поместить регион на главную страницу с помощью модуля, вы должны вместо этого поместить его в свой page.tpl.php. На самом деле вы можете сделать то, что вы впервые попробовали, но я бы посоветовал вам немного изменить его так:

<?php if ($feeds): ?>
<div id="feeds">
    <?php print $feeds; ?>
</div>
<?php endif; ?>

Я улучшился двумя способами.

  1. Добавляя оператор if, вы не добавляете пустую разметку. Так что вы не получите пустой div, если $ feeds ничего не содержит.
  2. Добавление идентификаторов в регионы - хорошая идея. Это облегчает стилизацию их или их содержимого, а также добавляет семантику на вашу страницу, о которой рассказывает html.

Теперь, если вы хотите, чтобы ваши блоки отображались только на главной странице, вы можете установить это в настройках каждого из блоков. Таким образом, вы можете просто использовать регион, который уже существует, если вы не хотите, чтобы ваши блоки отображали за пределами существующего региона. При добавлении регионов не рекомендуется добавлять регион только на одну страницу, а гораздо лучше контролировать, когда должен отображаться его контент. Возможно, вам не нужно создавать новый регион, а просто использовать уже созданный. Кроме того, если вы хотите внести некоторые изменения в шаблон на своей главной странице, вы также можете создать front-page.tpl.php, где вы можете создать другой макет шаблона для своей главной страницы, если вы того пожелаете.

...