Подумал над тем как будет более "по правильному" реализовать операцию подобную:
Есть нода, у нее термины таксономии, идут например от 3-х словарей.
А мне нужно например выводить все термины только одного из словарей(случайно выбирается скриптом)
Вижу два пути:
1) На уровне темы в функции препроцесса ноды формирую свою переменную $terms2 для шаблона
Плюс - довольно легко локализуется данное изменение
Минус - а)зависит от темы; б)все равно движком формируется переменная $terms которая не используется
2)В неком модуле настройки сайта(своем), с большим весом в hook_nodeapi и операции 'alter' переделываю $node->taxonomy
Плюс - а)не зависит от темы; б)не формир. неиспользуемая переменная
Минус - сложней локализуется источник изменения.
Так вот - какой из подходов более правильный по идеологии друпал?
Используется ли обычно такой модуль настройки на сайтах для тонкой настройки системы(хуки_алтер тех же форм и т.д.)? Если да - то как его лучше именовать, может стандарт какой есть? Как вообще такие изменения проще находить на сайте если не знаешь какой модуль изменил?
Спасибо.
Комментарии
очень даже вариант.
минус сохраница полюбому - переменная будет генериться дважды если вы ее перекроете. правда лишних запросов там в БД быть не дложно - функции кешируют чсть данных в памяти
вы получите большой минус
данные ноды будут гоняться неверные и косяк где нить да всплывет. лучше "ровнять" на выводе
hook_nodeapi + view
большой плюс в том что сможете сделать конфигурируемым то самое скрытие - модуль же
либо preprocess функции в самой теме
в смысле не на load а на view? Не вижу в принципе разницы, т.к. в taxonomy_nodeapi ничего не делается на операции view. Именно модулем переменную вторую не надо будет формировать тогда. Плюс как бы логика в ядре и модулях, а тема уже выводит.
Но что то смотрю что нечасто встретишь чтобы так в модуле вывод меняли, больше в теме занимаются. Предполагают наверное: один сайт - одна тема.
А если запрос из БД потребуется, из функции препроцесса - в принципе кошерно?
нешибко. но иногда других вариантов нет