Я бы хотел предварительно обработать и оформить мои узлы из модуля вместо template.php. Раньше у меня был гигантский оператор switch в theme_preprocess_node()
. Но это применимо только к моей основной вкладке - вложенные вкладки создавались из модулей, в которых они были определены. Поэтому мне нравится идея объединения всех моих функций и шаблонов предварительной обработки в один организованный модуль.
Структура, которую я хочу, по сути, похожа на эту (вытягивая детали для сводки):
function foomodule_menu()
{
$items['foo/%node'] = array(
'page callback' => 'page_foo_overview',
'page arguments' => array(1),
'type' => MENU_NORMAL_ITEM,
);
$items['foo/%node/overview'] = array(
'type' => MENU_DEFAULT_LOCAL_TASK,
);
$items['foo/%node/details'] = array(
'page callback' => 'page_foo_details',
'page arguments' => array(1),
'type' => MENU_LOCAL_TASK,
);
}
function foomodule_theme()
{
return array(
'page_foo_overview' => array(
'arguments' => array('node' => NULL),
'template' => 'templates/page-foo-overview'
),
'page_foo_details' => array(
'arguments' => array('node' => NULL),
'template' => 'templates/page-foo-details'
),
);
}
function page_foo_overview($node)
{
// Used to do this, and themed it from template.php
// return node_view($node, FALSE, TRUE);
// Instead, I'd like to theme all pages directly in this module:
return theme('page_foo_overview', $node);
}
function template_preprocess_page_foo_overview(&$vars)
{
// But $vars doesn't contain the same data as when I themed from template.php
// Specifically the ['view'] element of CKK fields, and flags like $teaser
// What do I need to do to get at the same data?
dsm($vars);
}
Все отлично работает, но $ vars, доступные в моем препроцессе, не те, к которым я привык в функции theme_preprocess_node()
template.php. С одной стороны, похоже, что поля CCK не были пропущены через content_format()
(без элемента ['view']), а флаги типа teaser
и page
отсутствуют.
Как называется theme_preprocess_node()
, что я мог бы здесь вызвать?
Я спрашиваю о неприятностях, делая это? Для меня гораздо больше смысла организовывать его таким образом и контролировать каждый шаг: меню> обратный вызов страницы> тема> предварительный процесс> шаблон, а также иметь возможность организовать его по нескольким модулям, как я считаю нужным.