Так как только что сам искал подобное решение и в общем-то не нашел его, решил выложить на всеобщее обозрение собственное решение. Может быть, кому-то пригодится.
Сразу должен сказать, что поймут, пожалуй, только программисты drupal.
Есть некий модуль kontragent.module, реализующий работу с контрагентами (показ контрагента, добавление, изменение и пр.)
Задача: реализовать показ контрагента с помощью шаблона kontragent.tpl.php. В данном случае контрагент - это не тип материала, поэтому стандартные шаблоны типа node.tpl.php не подойдут.
Реализация по следующим пунктам:
- Регистрация функции темизации, которая будет использовать шаблон
- Создание шаблона kontragent.tpl.php
- Определение функции для показа контрагента kontragent_page($kon), $kon - переменная с данными контрагента
1. Ниже представлен код функции, которая регистрирует функцию темизации kontragent_view
Обратите внимание на элемент массива 'template', если его не указывать, тогда темизация перестоится на вызов функции, а в модуле придется написать функцию kontragent_kontragent_view($kon)
<?php
/**
* Регистрация функции темизации
* return unknown_type
*/
function kontragent_theme() {
return array(
// название функции темизации
'kontragent_view' => array(
// указываем единственный аргумент с данными контрагента (укажите больше, если необходимо)
'arguments' => array('kontragent' => NULL),
// имя файла шаблона без .tpl.php
'template' => 'kontragent'
)
);
}?>
2. В каталоге нашего модуля создадим шаблон kontragent.tpl.php
Например, с таким содержанием:
<?php
// эта функция распечатывает все переменные, доступные в шаблоне
// drupal_set_message("<pre>".print_r(array_keys(get_defined_vars()), 1).'</pre>');
$kon = $variables['kontragent'];
?>
<div id="kontragent-code">
<strong>КОД</strong>:<span><?php print $kon['CODE'] ?></span>
<strong>Наименование</strong>:<span><?php print $kon['DESCR'] ?></span>
</div>?>
3. А теперь вызовем нашу функцию темизации, передав ей в качестве параметра данные контрагента.
<?php
/**
* Выдает страницу контрагента
* $kon - параметр с данными контрагента
* return string
*/
function kontragent_page($kon) {
drupal_set_title($kon['DESCR']);
return theme('kontragent_view', $kon );
}?>
Мой недавно созданный личный блог http://kudesa.org
Комментарии
Если модуль создает новый тип контента то drupal будет искать его как: node-kontragent.tpl.php. Т.е. для типов контента следует придерживаться именно этой схемы (node-blog.tpl.php, node-forum.tpl.php и т.п.).
Так у меня не тип контента, поэтому и назвал не так.
Да по сути это все для примера, называйте, как хотите.
А разве
<?php
// имя файла шаблона без .tpl.php
'template' => 'flagman_kontragent'
?>
и имя файла шаблона не должны совпадать?
mr_kuzmich, вы правы, должны совпадать. Моя ошибка, сейчас поправлю.