Вставка пользовательского шаблона при темизации

Аватар пользователя roman-yrv roman-yrv 10 сентября 2012 в 17:34

Добрый день !

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

Комментарии

Аватар пользователя Chyvakoff Chyvakoff 10 сентября 2012 в 17:41

"roman-yrv" wrote:
(или чанк)

ModX Detected. Читаем дальше..

А дополнительный шаблон у вас для чего? Для вывода какой то переменной/поля или гора недрупального кода?

Аватар пользователя roman-yrv roman-yrv 10 сентября 2012 в 17:50

Chyvakoff wrote:
"roman-yrv" wrote:
(или чанк)

ModX Detected. Читаем дальше..

Ну, так вот сложилась судьба, что я раньше работал на CMS MODx, а теперь решил освоить Drupal. Smile

Chyvakoff wrote:

А дополнительный шаблон у вас для чего? Для вывода какой то переменной/поля или гора недрупального кода?

Ну допустим, нужно вставить какой-нибудь произвольный html-код с подставленными туда значениями переменных в разные места.
К примеру, я вытаскиваю информацию откуда-то извне (например, с другого сайта) и где-нибудь размещаю её у себя.

Аватар пользователя Chyvakoff Chyvakoff 10 сентября 2012 в 17:55

Можно обычным include. Но тогда с кэшированием хуже будет.
В шаблонах в принципе любой код писать можно,но лучше все эти вытаскивания и расчёты сделать заранее(в hook_nodeapi) и передать в шаблон уже готовые переменные и там их только отобразить.

Аватар пользователя roman-yrv roman-yrv 10 сентября 2012 в 18:24

Chyvakoff wrote:
Можно обычным include. Но тогда с кэшированием хуже будет.
В шаблонах в принципе любой код писать можно,но лучше все эти вытаскивания и расчёты сделать заранее(в hook_nodeapi) и передать в шаблон уже готовые переменные и там их только отобразить.

Так а даже если даже эти вытаскивания производить в hook_nodeapi или еще где, есть ли специальная функция, которой передаешь название шаблона и массив переменных, а она чтобы возвращала html-код с уже подставленным переменными ?
Все-таки, думаю, это будет лучше, удобнее и правильнее, чем вставлять html-код непосредственно в тело хука.

Аватар пользователя Orion76 Orion76 10 сентября 2012 в 18:37

"roman-yrv" wrote:
есть ли специальная функция, которой передаешь название шаблона и массив переменных, а она чтобы возвращала html-код с уже подставленным переменными

почитайте про hook_theme()

Аватар пользователя Chyvakoff Chyvakoff 11 сентября 2012 в 9:40

"roman-yrv" wrote:
Все-таки, думаю, это будет лучше, удобнее и правильнее, чем вставлять html-код непосредственно в тело хука.

Конечно. Я такого и не говорил)

Аватар пользователя roman-yrv roman-yrv 11 сентября 2012 в 15:43

Прочитал, определил этот шаблон в hook_theme, заработало.
Только возникла пара дополнительных вопросов.

1. А для чего, собственно говоря, нужно проводить дополнительное действие по регистрации шаблона в hook_theme? Ведь можно просто вызвать функцию, которая возьмет имя файла и массив с переменными и вернет html-код.

2. Если возникла необходимость выполнить вышеуказанные действия не для ноды, а для одного или нескольких блоков, то где тогда можно определить hook_theme ?
Писать для этого отдельный модуль или это можно определить в файлах темы (template.php и т.д.) ?

Аватар пользователя roman-yrv roman-yrv 11 сентября 2012 в 16:15

Вопрос 2 снимается, нашел ответ Smile

Оказывается можно в файле template.php также определить hook_theme