помогите пожалуйста заставить работать модуль
<?php
function array_pages_menu(){
$items = array();
$items['array_pages'] = array(
'title' => 'array_pages',
'description' => 'array_pages list pages',
'page callback' => 'array_pages_list',
'access callback'=> TRUE,
);
return $items;
}
function
theming_array_pages_list_theme() {
return array(
'theming_array_pages' => array(
'render element' => 'element',
)
);
}
function
theme_theming_array_pages_list($variables){
$element = $variables['element'];
$output = '';
foreach (element_children($element) as $item){
if (!$item) {
$output .= '<h1>' . $element[$item] . '</h1>';
}
else {
$output .= '<div>' . $element[$item] . '</div>';
}
}
return $output;
}
function
array_pages_list(){
$content[] = t('array pages list:');
$content[] = l(t('page 1'), 'array_pages/page1');
$content[] = l(t('page 2'), 'array_pages/page2');
$content['#theme_wrappers'] = array('theming_array_pages_list');
return $content;
}
?>
сейчас на экран выводится пустая нода.
опишу как я понимаю, происходящее в этом коде:
1. в hook_menu объявляется адрес будущей страницы
2. содержимое страницы в виде рендерного массива формируется в array_pages_list(). рендерный массив состоит из самого содержимого и свойства #theme_wrappers, которое указывает функцию рендеринга(преобразования в html и добавление обёртки)
3. функция рендеринга theme_theming_array_pages_list() (которая предварительно зарегистрирована в более общей функции темизации theming_array_pages_list_theme()) разбирает рендерный массив и выводит результат на экран
но не выводит почему-то. подскажите пожалуйста где я допустил ошибку и как её можно исправить
Комментарии
Попробуйте поступить так.
Сделайте пошаговую отладку проекта по F8/F7, например, среда программирования NetBeans является бесплатной и это позволяет.
И в совокупности с функциями из модуля Devel ошибка найдется очень быстро.
Кстати, что вот это за функция ?
return array(
'theming_array_pages' => array(
'render element' => 'element',
)
);
}
Это реализация в данном модуле hook_theme ? Если да, то её название некорректно. Правильно было бы так - array_pages_theme()
1. все хуки в модуле должны начинаться с имени модуля. У вас hook_menu начинается с array_pages, а hook_theme начинается c theming_array_pages_list. Один из них точно не сработает.
2. Если у вас в hook_theme название хука темизации 'theming_array_pages', то и соответствующая функция должна называться с theme_theming_array_pages и в page callback должно быть
<?php
$content['#theme_wrappers'] = array('theming_array_pages');
?>
а не
<?php
$content['#theme_wrappers'] = array('theming_array_pages_list');
?>
Не путайте ноды и страницы. Это совсем разные понятия.
Если вы не собираетесь публиковать модуль на d.org, то просто сформируйте нужный вам html в array_pages_list, не заморачивайтесь с функциями темизации. Для новичков это слишком сложная тема.
P.S. смотрите https://drupal.org/project/examples, там много полезного.