вывод рендерного массива в модуле

Главные вкладки

Аватар пользователя zlodiak zlodiak 9 ноября 2013 в 11:40

помогите пожалуйста заставить работать модуль

<?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()) разбирает рендерный массив и выводит результат на экран

но не выводит почему-то. подскажите пожалуйста где я допустил ошибку и как её можно исправить

Комментарии

Аватар пользователя roman-yrv roman-yrv 9 ноября 2013 в 12:43

Попробуйте поступить так.

Сделайте пошаговую отладку проекта по F8/F7, например, среда программирования NetBeans является бесплатной и это позволяет.
И в совокупности с функциями из модуля Devel ошибка найдется очень быстро.

Кстати, что вот это за функция ?

function theming_array_pages_list_theme() {
    return array(
        'theming_array_pages' => array(
            'render element' => 'element',
        )
    );
}    

Это реализация в данном модуле hook_theme ? Если да, то её название некорректно. Правильно было бы так - array_pages_theme()

Аватар пользователя serega111 serega111 9 ноября 2013 в 12:43

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');
?>

"zlodiak" wrote:
сейчас на экран выводится пустая нода.

Не путайте ноды и страницы. Это совсем разные понятия.

Если вы не собираетесь публиковать модуль на d.org, то просто сформируйте нужный вам html в array_pages_list, не заморачивайтесь с функциями темизации. Для новичков это слишком сложная тема.

P.S. смотрите https://drupal.org/project/examples, там много полезного.