Очень долго бьюсь и никак не могу определить - как можно сделать так, чтобы на главной выводились только те ноды которые прошли анализ в моем коде (на предмет - выводить их или нет).
Пока решил задачу просто - хакнул ядро (node.module). Отключил pager в node.module и сделал анализ (выводить-не выводить тизер) в node.tpl.php темы.
Но это ведь совсем как-то криво...
Пересмотрел все хуки - не увидел ничего похожего на то что мне нужно.
Комментарии
hook_bd_rewrite_sql()
Эх не то...
Мне нужно загрузить ноды, проанализировать и в процессе "решать" - эту показывать эту нет...
Наверное прийдется делать свою главную и туда вставлять код... - дублирующий стндартный вывод только со своими доработками.
Вообщем полностью продублировать функцию node_page_default() модуля node
Если честно, то мне не совсем понятно в чем проблема… Если нельзя просто модифицировать запрос к БД и нужно придумать способ, чтобы как-то переопределить функцию node_page_default, то это можно сделать через hook_ menu_alter.
Вариантов масса - от написания inline кода на странице, которую потом делаем главной и своего модуля до использования сторонних модулей, views, в частности.
Я сделал модуль (от views падает сайт).
Только не знаю какую функцию использовать...
Проблема в том, что ноду нужно проанализировать. Т.е. вытащить поля ССК (в т.ч. и список юзеров поля User Reference), сравнить с текущим юзером, сделать еще кучу всяких операций и потом выводить или не выводить. Модификацией одного запроса тут не обойтись...
А hook_menu_alter разве может переопределить node_page_default? Это же хук меню вроде...
1. либо Вы делаете для каждой ноды node_load и убиваете MySQL, либо...
2. таки составляете SQL запрос
3. возможно имеет смысл изменить архитектуру сайта
уже
Только модуль Flag все время глючит - замучался я с ним...
Увы... не получится.
Вы имеете в виду сделать не на Drupal а на чем-то другом? Как то обидно - столько времени потратил.
Вообще немного убивает то, что всё завязано на node. Я когда-то несколько лет работал с Access (майкрософтовским) и настолко проникся идеологией что всё пытаюсь сделать как там.
Если бы в Drupal можно было так же гибко разбирать-собирать те-же node... Или вот эта ситуация что сейчас - почему нет хука который переопределял бы вывод нод (что-то вроде hook_page_alter)? По принципу модулей контролирующих доступ - пробежался по нодам, определил какие показывать какие нет и они ВЕЗДЕ либо видны либо нет (например в модуле event тоже).
P.S.
Возможно я просто еще не до конца проник в принципы работы Drupal...
Хуже всего что руководство гонит - быстрей, не дают посидеть разобраться...
Вообщем пока обошелся хаком модуля node (в том числе пришлось сделать свою разбивку на страницы). А потом надо будет смотреть как это лучше реализовать...
Наверное прийдется делать свою главную страницу и там всё красиво своими запросами реализовать. Просто думал что можно обойтись штатным функционалом.
Хм. Если вас устраивает код в node.module, то почему бы не взять его за основу и написать собственный модуль? Сделайте новый пункт меню типа MENU_CALLBACK, напр. my_node_list, вставьте туда код из node.module с Вашими правками и в настройках сайта сделайте my_node_list главной страницей.
Не то чтобы устраивает... Просто там это намного удобнее перехватывать (там есть четкое движение по строкам и перегонка их в $output - вот здесь можно и решать по каждой ноде что с ней делать). Кстати мои несколько сот строк кода работают там (в node.module) раза в два быстрее чем в шаблоне.
Я просто был почему-то уверен что есть такая функция - перехват списка нод перед выводом. 100%-ный перехват - т.е. могу идти по списку и решать - вот эту ноду показывать а эту нет.
Стыдно признаться но я никак не могу до конца понять идеологию Drupal. Когда всё станет ясно, то наверное напишу свой модуль с самого начала и всё переделаю.
А пока прийдется видимо так и сделать как Вы написали - свою главную страницу.
Ну вообще для этих целей, особенно пока непонятно как друпал работает, лучше всего подходит views.
Вы писали что он у Вас не работает. Я так понимаю имелось ввиду UI? Да, оно тяжелое, но можно сделать список на локальном компе а потом импортировать его на сайт, где UI можно отключить.
После views сайт падает как только его включить. (Падает страница списка модулей).
Друпал я не то чтобы не знаю - не могу до конца понять идеологию. Это очень существенный момент.
Скорее всего нехватка памяти.
Точно - Fatal Error limit memory
Не пробовали написать свой модуль, создать в ней новый тип ноды и фильтровать через hook_view?
Это ресурсоёмко. Фильтровать надо на этапе выборки из БД, а не откидывать _уже_ загруженные ноды.