На самом деле я хочу составить список комментариев для узлов самостоятельно (например, по представлениям), поэтому мне нужно скрыть стандартный список комментариев из основного модуля комментариев. Я могу сделать это так:
unset($node['comments']['comments']);
Но это не помешает БД запрашивать комментарии.
Поэтому я нашел несколько безумных способов обмануть модуль комментариев. Например, чтобы установить поддельное $node->preview
свойство, или создать новый режим просмотра и переписать стандартный node/%node
обратный вызов.
Неужели так сложно скрыть комментарии под узлом, но все же можно добавить новый комментарий, или я что-то пропустил?
Обновление о «Скрытой» опции
Что насчет значения «Hidden» для типа контента:
мне нужно закрытое / открытое поведение для моих комментариев. Но если я установлю «Скрытый» для своего типа контента, мои новые части контента будут установлены как «Комментарии закрыты» вместо скрытых ( вот код ). Другая проблема заключается в том, что пользователь с разрешением «оставлять комментарии» не может добавить комментарий, если комментарии скрыты ( вот код ).
Так что я не могу понять.
Ответ
Решение найдено с hook_module_implements_alter()
. Большое спасибо!
Ответы:
В модуле / comment / comment.module мы видим, что hook_node_view () (comment_node_view ()) работает в строке 614. Здесь функции запускаются, чтобы загрузить все комментарии и прикрепить их к узлу. Первые 2 набора if () {...}, по-видимому, обрабатывают форму добавления комментария и ссылку действия. Затем последний блок кода, наконец, добавляет комментарии, которые, как я полагаю, вас больше всего беспокоит скрытие, и я предполагаю, что вы хотите, чтобы это было пропущено по соображениям производительности:
Я думаю, что этот код глуп, потому что модуль комментариев не должен зависеть от какого-либо конкретного жестко закодированного режима просмотра. Надеюсь, это изменится и станет настройкой в пользовательском интерфейсе.
Несмотря на это, я нашел похожий пост, который может вас заинтересовать: есть ли способ остановить запуск comment_node_view?
По сути, вы хотите использовать hook_module_implements_alter (), чтобы запретить модулю комментариев отключить hook_node_view (). Вот что вам нужно добавить в свой пользовательский модуль:
источник
hook_module_implements_alter
!Просто попробуйте использовать hide () в файле шаблона или hook_preprocess_node ():
источник