Темизация вывода модуля [Решено]
2 октября 2011 в 18:26
Помогите разобраться.
Пишу свой первый модуль. Модуль выполняет выбор информации из БД, форматирует ее и отображает на странице.
Реализовал hook_menu в котором указал функцию, которая делает выборку данных из БД и возвращает ее в виде массива. Добавлять разметку к полученным данным прямо в этой функции - моветон.
Что нужно для того чтобы отформатировать эти данные и выдать их на страницу так, чтобы эти данные можно было переформатировать в шаблоне кастомной темы?
Что нужно реализовать, какие хуки?
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Комментарии
http://drupalcode.org/project/examples.git/blob/refs/heads/7.x-1.x:/rend...
Краткое изложение принципа темизации при написании модуля.
1. У нас есть выходные данные которые ты выводишь на экран путем return $result в конце некоторой функции.
Пишем вместо этого
return theme('page_template', $result, $result_count);
где page_template - название массива с переменными которые нужно темезировать
(название придумывем сами по смыслу для модуля или функции которая будет выводить)
$result - массив с выходными данными или переменная, не суть
$result_count - дополнительные данные или массив для вывода
к слову кол-во переменный которые мы можем отправить в шаблон неограниченно,
их указываем через запятую. Также в одном модуле может быть несоклько функций темизации theme()
главное необходим по разному называть (page_template) в нашем случае.
2. Создаем функцию которая будет непосредственно определять в какой файл нужно затемизировать и где он может храниться
return array(
'page_template' => array( // название шаблона , который мы написали выше
// еще раз перечисляем список переменных которые нужно отправить на темизацию, указав им новые названия при необходимости
// переменные назваем в том же порядке в котором мы их перечисляли в theme() ЭТО ОЧЕНЬ ВАЖНО
'arguments' => array('arResult' => null, 'count' => null),
/*
/ к примеру
/ arResult это $result
/ coun это $result_count
*/
/* название файла шаблона куда будут передваться переменные,
/ по умочанию будет присвоен адрес где храниться сам модуль,
/ при необходимости можно задать свой путь опять же читай api hook_theme ()
/ В нашем случае файл будет находиться в тойже папке что и модуль page_templ.tpl.php (Расширение друпал подставит сам!!!)*/
*/
'template' => 'page_templ',
),
// другой шаблон вывода переменных (для примера, когда необходимо темизировать разные выводы)
'page_template_block' => array(
'arguments' => array('arResult' => null, 'category' => null, 'result_count' => null),
'template' => 'block',
),
);
}
3. Ну вот и добрались к самому файлу page_templ.tpl.php
Пример вывода
<div><?=$arResult?></div> <!-- Если $arResult был массивом , он и будет передан в шаблон в качестве массива -->
<div><?=$count?></div>
4. Вот и все, ничего сложного нет.
Надеюсь это поможет тебе
Блин, зря писал, даже спасибо не сказал
Не зря, не зря! Просто я не заходил в эту тему несколько дней. Спасибо большущее! Сам бы я не скоро разобрался.
Постораюсь к конференции написать цикл статей по созданию своего модуля, каталога продукции + принцип интеграции с 1с
А конференция когда планируется и где?
У меня теперь другой вопрос возник. Если можно подскажите как правильно действовать
Я сделал вывод в темплейт модуля, но теперь не могу сообразить как перехватить его в теме и оформить в соответствии с темой. Точнее, у моего модуля темплейт mymodule.tpl.php в него вывожу
<?php
foreach ($articles as $key)
{
print "<h3>" . l($key['title'], 'node/' . $key['nid']) . "</h3>";
}?>
</div>
Мне не хочется, чтоб и в теме выводился заголовок h3. Попробовал в папку темы положить mymodule.tpl.php и заменить в нем тег заголовка на h5, но из этого ни чего не вышло. Переименовал mymodule.tpl.php в node-mymodule.tpl.php, ни какого эфекта. Обнулил кэш, заголовки по прежнему h3.
Что я делаю не так?
1. По поводу того кудать записывать файлы шаблона я писал
/ при необходимости можно задать свой путь опять же читай api hook_theme ()
2. Замените в своем шаблоне h3 на h5 в чем проблема?
3. Не совсем понимаю
но теперь не могу сообразить как перехватить его в теме и оформить в соответствии с темой.
Пропишите стили в файле шаблона модуля. В чем проблема.
Я наверное не совсем корректно выразился. Я хочу, не изменяя ни чего в модуле, изменить в отдельной теме его html разметку.
Т.е. я хочу, чтобы модуль выводил во всех темах все так как задумано изначально, а только в одной, определенной теме, разметка была бы другой.
Ответ нашел по этому адресу http://drupal.org/node/341628 в разделе "How to change HTML the Drupal way"