Независимо от версии Drupal, для которой вы пишете модуль, в вашем коде есть две ошибки:
- Вы определяете «Bluemarine» как функцию темы, но затем вызываете
theme('custom')
, что вызовет «пользовательскую» функцию темы
- Если вы определяете "custom" как функцию темы, которая использует файл шаблона, то
theme_custom()
она никогда не вызывается
Если вы пишете код для Drupal 6, то этот код должен быть похож на следующий. Я принимаю предположение, что имя для функции темы custom
.
function custom_menu(){
$items = array();
$items['custom'] = array(
'title' => t('custom!'),
'page callback' => 'custom_page',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function custom_theme() {
return array(
'custom' => array(
'arguments' => array('output' => NULL),
'template' => 'custom',
),
);
}
function custom_page() {
$output = 'This is a custom module';
return theme('custom', $output);
}
function theme_custom($output) {
}
Файл шаблона будет иметь доступ $output
и к любым установленным переменным template_preprocess_custom()
, если ваш модуль реализует его.
Например, вы можете реализовать код, подобный следующему:
function template_preprocess_custom(&$variables) {
if ($variables['output'] == 'This is a custom module') {
$variables['append'] = ' and I wrote it myself.";
}
}
С этим кодом файл шаблона имеет доступ к $output
и $append
.
В качестве примера функции темы, которая использует файл шаблона, вы можете посмотреть на theme_node () , которая определена в node_theme () , и которая использует node.tpl.php в качестве файла шаблона; Функция предварительной обработки, реализованная модулем Node для этой функции темы, - это template_preprocess_node () .