помогите пожалуйста разобраться с hook_theme()

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

Аватар пользователя bw_left bw_left 1 июня 2008 в 8:05

Перечитал уже все что только можно было - попробовал все варианты, которые только в голову пришли - не получается Sad

Drupal 6

надо переопределить функцию theme_links - как это сделать в 6-м Друпале по буквам пожалуйста кто-нибудь може объяснить куда что писать? Ссылками только ни кидайтесь, пожалуйста - я перечитал весь Theme guide + мануалы по theme() и hook_theme ... с английским у меня все нормально, но в самом Друпале пока еще "плаваю".

Для себя понял примерно следующее:

1. надо зарегистрировать используемые функции:

myTheme_theme(){
return array(
'links' => array(
'arguments' => array('links' => NULL, 'attributes' => NULL),
),
);
}

2. и собственно сама функция:

function myTheme_links($links, $attributes = array('class' => 'links')) {
....
}

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

Вопрос - объясните пожалуйста по пунктам куда (в какой файл) что класть?

Комментарии

Аватар пользователя bw_left bw_left 1 июня 2008 в 14:37

а по поводу hook_theme кто-нибудь может что-нибудь прокомментировать, пожалуйста? как с этим работать и зачем он нужен? ....
методом научного тыка определил, что phptemplate_links - может переопределить theme_links .... таким образом я теперь вообще ничего не понимаю :((((

Аватар пользователя neochief neochief 1 июня 2008 в 19:18

Все как в матрешках
theme_links() переопределяется
phptemplate_links(), что в свою очередь переопределяется
mytheme_links()

Если надо отобразить links:
theme('links') запустит весь каскад темизации links по всем функциям.

Если вам надо запустить только конкретную реализацию темизации, вызываете, к примеру phptemplate_links()
В этом случае не вызовется mytheme_*, а только все то, что ДО phptemplate_* в иерархии.

И конечно же не надо забывать что все это функции, и для того, чтобы что-то появилось на экране надо это напечатать:
print(theme('links'));
или
print(theme_links);
или еще как-то

Аватар пользователя Алешка Алешка 1 июня 2008 в 20:57

Спасибо. Еще кое-что встало на место Smile
А переопределить фунцию ядра Друпала возможно?
Долго мучаюсь... Есть такая фича, когда в теме вывдоится secondary_links, однако именно в этой переменной требуется другое содержимое (в частности, обрамление каждого пункта меню тэгами ). Это делается функцией из файла .inc в \includes. Руками доделываю - получаю что хочу. А как правильно? Подскажите.

Аватар пользователя bw_left bw_left 2 июня 2008 в 9:02

спасибо за ответ, но не очень понял: исходя из ответа получаю theme_links() -> phptemplate_links() -> mytheme_links()

и далее по ответу: "вызываете, к примеру phptemplate_links() В этом случае не вызовется mytheme_*, а только все то, что ДО phptemplate_*" .... т.е. правильно ли я понял, что если я вызываю phptemplate_*, то mytheme_*, перекрыть ее уже не сможет? ... тогда что насчет "матрешки"?

в любом случае я пытался вызвать mytheme_* БЕЗ использования phptemplate_*, но она никак не вызывается ... в руководстве говориться, что в 6-м Друпале необходимо все такие функции зарегистрировать в каком-то реестре (я так и не понял что это такое) - как это сделать правильно и главное где?

Аватар пользователя neochief neochief 11 августа 2009 в 1:48

"bw_left" wrote:
и далее по ответу: "вызываете, к примеру phptemplate_links() В этом случае не вызовется mytheme_*, а только все то, что ДО phptemplate_*" .... т.е. правильно ли я понял, что если я вызываю phptemplate_*, то mytheme_*, перекрыть ее уже не сможет? ... тогда что насчет "матрешки"?

Вызываете theme('links') и она смотрит что реализовано, а что нет. Вы _не_ должны вызывать ничего на прямую.