Добрый день !
Подскажите пожалуйста, каким образом можно вставить свой произвольный шаблон (или чанк) в формируемый html-код темы ?
Например, у меня есть файл node--[тип_узла].tpl.php
И есть файл с названием, например, mytest.tpl.php с примерно таким содержанием
<?php
<p>
Test value: <?php print $test_value; ?>
</p>
?>
И мне надо этот код вставить в вышеуказанный файл node--[тип_узла].tpl.php.
Я пробую таким образом:
<?php print theme('mytest',array('test_value' => 'Test Value')); ?>
И, к сожалению, ничего не получается.
Подскажите пожалуйста, с помощью какой функции это делается в Drupal ?
Например, в том же CMS MODx этот блок кода оформился бы в виде чанка, а программная вставка осуществлялась бы функцией parseChunk
Комментарии
ModX Detected. Читаем дальше..
А дополнительный шаблон у вас для чего? Для вывода какой то переменной/поля или гора недрупального кода?
Ну, так вот сложилась судьба, что я раньше работал на CMS MODx, а теперь решил освоить Drupal.
Ну допустим, нужно вставить какой-нибудь произвольный html-код с подставленными туда значениями переменных в разные места.
К примеру, я вытаскиваю информацию откуда-то извне (например, с другого сайта) и где-нибудь размещаю её у себя.
Можно обычным include. Но тогда с кэшированием хуже будет.
В шаблонах в принципе любой код писать можно,но лучше все эти вытаскивания и расчёты сделать заранее(в hook_nodeapi) и передать в шаблон уже готовые переменные и там их только отобразить.
Так а даже если даже эти вытаскивания производить в hook_nodeapi или еще где, есть ли специальная функция, которой передаешь название шаблона и массив переменных, а она чтобы возвращала html-код с уже подставленным переменными ?
Все-таки, думаю, это будет лучше, удобнее и правильнее, чем вставлять html-код непосредственно в тело хука.
почитайте про hook_theme()
Конечно. Я такого и не говорил)
Прочитал, определил этот шаблон в hook_theme, заработало.
Только возникла пара дополнительных вопросов.
1. А для чего, собственно говоря, нужно проводить дополнительное действие по регистрации шаблона в hook_theme? Ведь можно просто вызвать функцию, которая возьмет имя файла и массив с переменными и вернет html-код.
2. Если возникла необходимость выполнить вышеуказанные действия не для ноды, а для одного или нескольких блоков, то где тогда можно определить hook_theme ?
Писать для этого отдельный модуль или это можно определить в файлах темы (template.php и т.д.) ?
Вопрос 2 снимается, нашел ответ
Оказывается можно в файле template.php также определить hook_theme