Переопределение функции ядра

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

Аватар пользователя Scarrr Scarrr 18 октября 2009 в 9:22

Здравствуйте, у меня была задача, которую я решил тем путём - что перезаписал функцию taxonomy_select_nodes (одна из функций, расположенных в taxonomy.module). Но дело в том, что так как это - функция ядра - то нужно её переопределить, и я не имею права лезть в taxonomy.module конечно же. Подскажите - как это сделать правильнее всего. У меня есть вариант, но я не думаю - что вариант правильный.

Какой бы вариант вы посоветовали?

заранее большое спасибо.

Комментарии

Аватар пользователя Demimurych Demimurych 18 октября 2009 в 12:40

Если вопрос ставится именно как - изменить логику работы функции taxonomy_select_nodes то без патча никак.

А чем вызвано такое желание можно полюбопытствовать?

Аватар пользователя andypost@drupal.org andypost@drupal.org 18 октября 2009 в 13:29

Правильно - скопировать папку модуля в sites/all/modules и там вносить изменения, но и следить за заплатами придется в последствии самому.

Аватар пользователя Nikit Nikit 18 октября 2009 в 13:31

_своймодуль_taxonomy_select_nodes
угу, причина нужна, может какая оптимизация или фикс, тогда прямиком в хидеры дру Smile

Аватар пользователя Scarrr Scarrr 18 октября 2009 в 15:07

да нет - не оптимизация или фикс - просто мне нужна другая сортировка терминов таксономии, вернее - нужно её дополнить, а сортировка осуществляется именно этой функцией, так вот я в ней всё переделал - перезаписал запрос конкретно, но - это конечно же неправильно - править прямо там.

вообще склоняюсь уже к тому - что надо скорее переписать taxonomy_menu (ведь именно там изначально нужная мне функция и вызывается), только вот непонятно - если я пропишу в своём модуле хук моймодуль_menu, и пропишу в нём свою функцию для того же самого пути, для которого прописан хук taxonomy_menu, то какой из хуков будет вызываться друпалом для отображения данной страницы - мой или taxonomy_menu?

извините за дополнительное беспокойство..

Аватар пользователя Nikit Nikit 19 октября 2009 в 0:42

там вообще вызове то есть сортировка параметр
$order = 'n.sticky DESC, n.created DESC'
если этого не хватает, ятак понимаю вы хотите переопределить сортировку в на странице taxonomy/term/% ?
если так, то можете просто переопределить theme_taxonomy_term_page.

либо если недостаточно или не то, просто создайте свой модуль, копипаст с таксономии, и готово с вызовом своих функций.

Аватар пользователя Scarrr Scarrr 19 октября 2009 в 2:02

да не - не оптимизация или фикс, правил исключительно для собственных нужд.

Nikit, _своймодуль_taxonomy_select_nodes - если прописать такую функцию в своём модуле - то она будет заменять собой taxonomy_select_nodes ? дело в том, что эта функция вызывается из другой функции, которая в свою очередь вызывается из taxonomy_menu.
может написать тогда хук своймодуль_menu, в котором я прописываю свою функцию для данного адреса taxonomy/term/TERMID - но вот - вопрос, какой из хуков тогда будет вызывать Друпал - мой или taxonomy_menu? (для отображения контента по данному УРЛу).

извини за беспокойство..

Аватар пользователя Nikit Nikit 19 октября 2009 в 3:05

"Scarrr" wrote:
если прописать такую функцию в своём модуле - то она будет заменять собой taxonomy_select_nodes

нет, просто предлагаю заменить и сделать своё.

"Scarrr" wrote:
но вот - вопрос, какой из хуков тогда будет вызывать Друпал

тот у которого weight модуля выше (или ниже), не помню.

Аватар пользователя andypost@drupal.org andypost@drupal.org 19 октября 2009 в 20:49

Есть разные способы перекрыть стандартный функционал в данном случае
1) hook_menu_alter и свой обработчик
2) hook_db_rewrite_sql подправить запрос
3) custom_url_rewrite_inbound
4) использовать views