Как передать переменную из пользовательского модуля в файл шаблона?
8
Мне нужно знать самый простой способ передачи переменной из пользовательского модуля в его файл шаблона. Я создал custom.module и поместил custom.tpl.php в папку модуля.
Независимо от версии Drupal, для которой вы пишете модуль, в вашем коде есть две ошибки:
Вы определяете «Bluemarine» как функцию темы, но затем вызываете theme('custom'), что вызовет «пользовательскую» функцию темы
Если вы определяете "custom" как функцию темы, которая использует файл шаблона, то theme_custom()она никогда не вызывается
Если вы пишете код для Drupal 6, то этот код должен быть похож на следующий. Я принимаю предположение, что имя для функции темы custom.
function custom_menu(){
$items = array();
$items['custom']= array('title'=> t('custom!'),'page callback'=>'custom_page','access arguments'=> array('access content'),'type'=> MENU_CALLBACK,);return $items;}function custom_theme(){return array('custom'=> array('arguments'=> array('output'=> NULL),'template'=>'custom',),);}function custom_page(){
$output ='This is a custom module';return theme('custom', $output);}function theme_custom($output){}
Файл шаблона будет иметь доступ $outputи к любым установленным переменным template_preprocess_custom(), если ваш модуль реализует его.
Например, вы можете реализовать код, подобный следующему:
function template_preprocess_custom(&$variables){if($variables['output']=='This is a custom module'){
$variables['append']=' and I wrote it myself.";
}
}
С этим кодом файл шаблона имеет доступ к $outputи $append.
В качестве примера функции темы, которая использует файл шаблона, вы можете посмотреть на theme_node () , которая определена в node_theme () , и которая использует node.tpl.php в качестве файла шаблона; Функция предварительной обработки, реализованная модулем Node для этой функции темы, - это template_preprocess_node () .
Спасибо Kiam, очевидно пропустил первый комментарий OP об использовании D6. +1
Laxman13
Спасибо Киам, template_preprocess_custom (& $ variable) добились цели
Кямран Ахтер
Теперь я хочу переместить TPL в папку темы, как я могу это сделать?
Камран Ахтер
@KamranAkhter Это другой вопрос. :-)
kiamlaluno
3
Вы вызываете неправильную функцию темы. Вместо function theme_customэтого должно быть function theme_Bluemarine. Вам также нужно передать массив в переменную кусок hook_theme () . Смотрите простой пример здесь .
Используя ваш пример (после изменения шаблона и функции темы custom):
Спасибо за ответ, пример, который вы привели, является модулем узла, и у меня не модуль узла. Мне просто нужен способ передать переменную в файл TPL, я использую помощь drupal 6.plz
Kamran Akhter
Спасибо за ответ, он дает мне ошибку. Нет такого файла или каталога, на самом деле он ожидает файл custom.tpl.php в папке модуля, который у меня уже есть, поэтому в коде bluemarine будет заменен на custom. Bluemarine - это тема drupal, которую я использую.
Камран Ахтер
изменил приведенный выше код и дал мне белый пустой экран, что я должен сделать, пожалуйста, помогите
Kamran Akhter
Я изменил код, и он у меня работает на моем сайте.
Laxman13
Я просто копирую и вставляю приведенный выше код, но он не работает
:-)
Вы вызываете неправильную функцию темы. Вместо
function theme_custom
этого должно бытьfunction theme_Bluemarine
. Вам также нужно передать массив в переменную кусок hook_theme () . Смотрите простой пример здесь .Используя ваш пример (после изменения шаблона и функции темы
custom
):Теперь в custom.tpl.php просто нужно
<?php print $output; ?>
источник