Я работаю над сайтом, для которого мне нужно встроить весь вывод шаблона узла (для пары типов контента) в различные другие шаблоны. В большинстве случаев встраивают узел - выбранный в поле CCK привязки узла - в шаблон представления, поэтому мой текущий подход:
- в настройках вида: добавить поле noderef непосредственно как одно из полей для вывода (в отличие от использования отношения, чтобы сделать поля ссылочного узла доступными)
- установить формат для вывода поля на "полный узел" - который я нашел, печатает весь шаблон узла
Это здорово, НО: в шаблоне узла есть несколько важных переменных. Единственный способ, которым я уже знаю, чтобы установить их, это с помощью функции предварительной обработки, которая работает ... Раздражительность этого метода заключается в том, что в функции предварительной обработки я должен обнаружить (по тому, что там доступно), где будет выводиться шаблон встроенный, так что я могу установить переменные соответствующим образом.
Что я хочу сделать вместо этого:
Интуитивно понятно, что было бы более разумно иметь возможность вызывать функцию в моих различных шаблонах представления, которая бы: а) позволяла мне печатать весь шаблон узла, и б) передавала значения для переменных предварительной обработки. Кто-нибудь знает функцию, которая может сделать это, или альтернативный метод?
[До сих пор мысли, которые меня никуда не привели:
Я знаю, что в подобных случаях вы можете передавать опции в качестве аргументов для theme () в соответствии с сигнатурой конкретной функции темы, которая будет вызываться. Но node_view () не предоставляет такой возможности - и кажется, что node_view () является подходящей функцией для вызова шаблона узла, а не theme ('node', ...).
Я вижу, что node_view () вызывает hook_nodeapi () с 'alter' как $ op, но это происходит слишком поздно в игре; к тому времени содержимое узла уже будет в формате HTML (т.е. $ node-> body).]