Как создать шаблоны в моем пользовательском модуле?
Я создал пользовательский модуль, который содержит множество функций PHP, основная цель которых в основном заключается в выводе HTML. Например:
function showRecentActivity($tid, $recordStart, $count){
//do some db_select stuff to get an array of node IDs...
foreach($nids as $nid){
$node = node_load($nid);
//now that we've loaded the node, 100 lines of if, echo, etc. will follow in order to output the HTML to the page
}
Возможно, вы уже видите проблему. В то время как повторение HTML подходит для небольших фрагментов разметки, создание полных страниц с помощью операторов echo ужасно для кода, обслуживания и очень подвержено ошибкам.
Очевидно, что необходим заранее определенный файл шаблона, написанный в HTML с небольшими местами для повторения необходимых Переменные PHP. Так же, как файлы шаблонов моей темы.
Но я понятия не имею, как это сделать с помощью моего пользовательского модуля.
1 answers
Hook_theme - ваш друг, он позволяет вам модулировать вашу разметку двумя способами:
- Позволяет определить файл шаблона для вашей разметки.
- Позволяет определить функцию темы.
Независимо от того, в какую сторону вы пойдете, вы будете вызывать разметку одним и тем же способом. итак, допустим, вы хотите модулировать разметку для недавних действий. Вы сделаете следующее в своем пользовательском модуле:
function custom_module_theme() {
return array(
'activity' => array(
'variables' => array('variable1' => NULL, 'variable2' => NULL),
'template' => 'custom-module-name-recent-activity',
),
);
}
Вы создадите custom-module-name-recent-activity.tpl.php
в каталоге вашего модуля где у вас будут $переменный1 и $переменный2
Ваш custom-module-name-recent-activity.tpl.php
будет выглядеть примерно так:
<div class="some class"> <?php print $variable1; ?> </div>
<div class="class2"> <?php print $variable2; ?> </div>
А затем из вашего модуля, когда вы закончите обработку и установите $variable1
и $variable2
(вы можете передать столько, сколько захотите), вы просто сделаете:
theme('activity', array('variable1' => $variable1, 'variable2' => $variable2));
Надеюсь, это поможет, теперь я задаюсь вопросом, не следовало ли мне сослаться на какой-нибудь учебник. Но, эй, сегодня суббота:)
(И если вы используете Drupal 6, измените "переменные" на "аргументы" в приведенном выше коде.)