Хуки theme

Главные вкладки

Аватар пользователя AlexION101 AlexION101 11 марта 2013 в 14:05

Здравствуйте

Никак не могу разобраться в темизации через хуки 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')?

Надеюсь понятны мои вопросы, буду очень благодарен, если кто мне поможет не сойти с ума.

Комментарии

Аватар пользователя dk-www dk-www 11 марта 2013 в 17:47

"AlexION101" wrote:
два различных модуля, которые будут называться по разному, но иметь функцию с одним названием: theme_SomeNameOfHook ? получается ошибка

будет ошибка
"AlexION101" wrote:

2. Что делает хук SomeModuleName_theme? Получается, что в каждом модуле может быть только один такой хук? Что он делает конкретно для модуля, в котором он написан?


SomeModuleName_theme - хук регистрации функций темизации
theme_functionname() - хук, может быть сколько угодно, в таких функциях идет обработка данных и возвращается html (как правило), затем, эти функции могут быть переопределены в теме оформления.
3
пример:

theme_имяфункциитемизации($var1, $var2) {
return 'my html';
}

theme('имяфункциитемизации', $var1, $var2);
4

"AlexION101" wrote:
4. Например существует хук theme_table. Т.е. теперь чтобы мне построить таблицу у себя в дизайне сделают вызывать theme('table')?

да, но нужно еще передать данные для построения таблицы.

Аватар пользователя greenmother@drupal.org greenmother@dru... 11 марта 2013 в 16:37

1. будет ошибка, поэтому правильно называть функции темизации (правильнее их называть так) в своих модулях как: theme_YOURMODULE_*

2. хук hook_theme регистрирует функции темизации, предоставленные модулем, чтобы ядро могло с ними корректно работать.
http://api.drupal.org/api/drupal/modules!system!system.api.php/function/...

ну и читайте по ссылке, данной выше.

Аватар пользователя AlexION101 AlexION101 11 марта 2013 в 16:59

1. Понял, ошибка так ошибка
2. Ну как же не хук, вот здесь написано, что хук: .
Я разобрался, оказывается в modulename_theme регистрируются темизированные функции модуля. Эти функции называются theme_functionname. Так потом эти функции можно вызывать через theme("functionname")
Ситуация проясняется, спасибо!

Аватар пользователя AlexION101 AlexION101 11 марта 2013 в 17:02

Спасибо, все понял.
Подитожу:
1. ModuleName_theme - регистрирует темизированные функции модуля
2. Называть темизированные функции стоит так: theme_ModuleName_FunctionName
3. Вызываются темизированные функции через theme("ModuleName_FunctionName")

Аватар пользователя AlexION101 AlexION101 13 марта 2013 в 12:18

Помогите, пожалуйста, с ещё одним вопросом:

Например есть функция theme_username, определела в theme.ink. Возвращает html - типа "Anonymous (not verified)"
Как переопредедить эту функцию в созданном мною модуле? Как сделать это через файл tpl и через создание функции в модуле?

Заранее, большое спасибо!

Аватар пользователя greenmother@drupal.org greenmother@dru... 13 марта 2013 в 14:23

Модули не переопределяют функций темизации других модулей, в них можно только создавать свои собственные. Переопределить её можно в теме оформления, создав YOURTHEME_username в template.php