Здравствуйте
Никак не могу разобраться в темизации через хуки theme
Вопросы такие:
1. Правильно ли я понимаю, что есть два варианта хуков: 1-ый типа ModuleName_hook 2-ой тип - theme_hook ?
Что если одновременно будут созданы два различных модуля, которые будут называться по разному, но иметь функцию с одним названием: theme_SomeNameOfHook ? получается ошибка, если подключить два этих модуля, или я что-то не так понимаю?
2. Что делает хук SomeModuleName_theme? Получается, что в каждом модуле может быть только один такой хук? Что он делает конкретно для модуля, в котором он написан?
3. Как связано theme() и хуки SomeModuleName_theme ? ведь на сколько я понимаю, что в theme($hook) надо передавать $hook из имен функций $theme_hook (выделено жирным).
Тогда причем тут хук типа SomeModuleName_theme, когда в theme() надо передавать хук функции theme_hook
4. Например существует хук theme_table. Т.е. теперь чтобы мне построить таблицу у себя в дизайне сделают вызывать theme('table')?
Надеюсь понятны мои вопросы, буду очень благодарен, если кто мне поможет не сойти с ума.
Комментарии
будет ошибка
SomeModuleName_theme - хук регистрации функций темизации
theme_functionname() - хук, может быть сколько угодно, в таких функциях идет обработка данных и возвращается html (как правило), затем, эти функции могут быть переопределены в теме оформления.
3
пример:
theme_имяфункциитемизации($var1, $var2) {
return 'my html';
}
theme('имяфункциитемизации', $var1, $var2);
4
да, но нужно еще передать данные для построения таблицы.
Вот хороший материал о темизации в Drupal
http://romka.eu/blog/drupal-article-3-part-1-drupal-themeing
Там рассказывается в том числе и о hook_theme
1. будет ошибка, поэтому правильно называть функции темизации (правильнее их называть так) в своих модулях как: theme_YOURMODULE_*
2. хук hook_theme регистрирует функции темизации, предоставленные модулем, чтобы ядро могло с ними корректно работать.
http://api.drupal.org/api/drupal/modules!system!system.api.php/function/...
ну и читайте по ссылке, данной выше.
1. Понял, ошибка так ошибка
2. Ну как же не хук, вот здесь написано, что хук: .
Я разобрался, оказывается в modulename_theme регистрируются темизированные функции модуля. Эти функции называются theme_functionname. Так потом эти функции можно вызывать через theme("functionname")
Ситуация проясняется, спасибо!
Спасибо, все понял.
Подитожу:
1. ModuleName_theme - регистрирует темизированные функции модуля
2. Называть темизированные функции стоит так: theme_ModuleName_FunctionName
3. Вызываются темизированные функции через theme("ModuleName_FunctionName")
Помогите, пожалуйста, с ещё одним вопросом:
Например есть функция theme_username, определела в theme.ink. Возвращает html - типа "Anonymous (not verified)"
Как переопредедить эту функцию в созданном мною модуле? Как сделать это через файл tpl и через создание функции в модуле?
Заранее, большое спасибо!
Модули не переопределяют функций темизации других модулей, в них можно только создавать свои собственные. Переопределить её можно в теме оформления, создав YOURTHEME_username в template.php
Понял, спасибо!