Как создать шаблоны в моем пользовательском модуле?


Я создал пользовательский модуль, который содержит множество функций 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. Так же, как файлы шаблонов моей темы.

Но я понятия не имею, как это сделать с помощью моего пользовательского модуля.

 5
Author: kiamlaluno, 2012-01-28

1 answers

Hook_theme - ваш друг, он позволяет вам модулировать вашу разметку двумя способами:

  1. Позволяет определить файл шаблона для вашей разметки.
  2. Позволяет определить функцию темы.

Независимо от того, в какую сторону вы пойдете, вы будете вызывать разметку одним и тем же способом. итак, допустим, вы хотите модулировать разметку для недавних действий. Вы сделаете следующее в своем пользовательском модуле:

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, измените "переменные" на "аргументы" в приведенном выше коде.)

 14
Author: Dipen, 2016-07-27 16:10:41