2009-08-30 4 views
2

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

В принципе, я создал новую область для моего сайта (здесь определение изнутри стороны файла .info мою тему в):

regions[feeds] = Feeds 

С Administer-> Блоки, я добавил блоки I хотите новый регион «Каналы».

Затем, из другого модуля, модуля «Расширенная передняя страница», я пытаюсь добавить некоторый PHP на мою «главную страницу» внутри этого модуля. Модуль «Расширенная страница фронта» позволяет сайту иметь целевую страницу, а не сразу просматривать список других материалов сайта и т. Д. Я включил PHP для области содержимого, а затем добавил следующее:

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

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

http://drupal.org/node/223430

http://drupal.org/node/237391

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

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

Независимо от того, где Я разместил этот файл (template.php или front_page.module), он ничего не делает. Любая идея, где я могу ошибаться?

ответ

3

Я не пробовал усовершенствованный модуль передней страницы, но, когда вы имеете дело с регионами, вы не должны делать то, что вы сделали. Это немного хакерский и на самом деле не нужен. Я не знаю, как модуль подключается к системе шаблонов, но ваша проблема, вероятно, связана с переменными области в ее области. Но вместо того, чтобы пытаться получить регион на главной странице с помощью модуля, вы должны вместо этого ввести его в свой 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, где вы можете создать другую макет шаблона для своей главной страницы, если хотите.

+0

Спасибо, я попробую это предложение и дам вам всем знать. – Carl

+0

В конце концов, вы были правы. Я решил не использовать пользовательский регион, и вместо этого я использовал существующий регион «контент» и применил правила видимости к блокам, которые я только хотел показать на домашней странице. Я теперь не могу вспомнить, почему я думал, что регион нужен, но, ну ладно. Живи и учись :) Большое спасибо. – Carl

5

Есть несколько пунктов, чтобы решить ваш вопрос:

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

    тему («блоки», «каналы»)

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

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

+0

Благодарим вас за предложения. Я дам вам и предложения googletorp. Я ценю длительный отклик. – Carl

+0

Спасибо за предложения! Я определенно буду помнить об этих идеях. Очень полезно для webdev с небольшим опытом Drupal. Позаботьтесь! – Carl

Смежные вопросы