PHP массивы в drupal и element_children (drupal 7.x)

Я пытаюсь узнать о PHP-массивах и drupal и использую функцию system_modules (в modules/system/system.admin.inc) в качестве руководства, чтобы посмотреть, смогу ли я воссоздать и понять, как drupal печатает формы в таблицах. Я точно определил свою проблему в функции темы, но я не понимаю некоторые проблемы и хотел бы знать, может ли кто-нибудь помочь мне в правильном направлении.

Цель состоит в том, чтобы напечатать 2 набора полей, каждое с двумя строками (как определено в массивах). Теперь я могу генерировать наборы полей с заголовками, но без каких-либо строк. Я думаю, что это как-то связано с drupal_render, но когда я пытаюсь изменить, результаты не верны. Кроме того, я не понимаю, почему код падает, если я исключаю хэштеги (#) из ключей массива. В чем причина этого, PHP массивы не требуют хэштегов.

Пример кода:

function sb_erp_test($form, $form_state){
$form['Headers'] = array('#tree' => TRUE);


$form['Headers']=  array(
    '#tree' => TRUE,
);
$form['Headers']['a']=  array(
    array('#subset1' => 'Group a Line 1 Field 1',
        '#subset2' => 'Group a Line 1 Field 2',
        '#Group' => 'Group a Line 1 Field 3',
        '#ID' => 'Group a Line 1 Field 4',
    ),
    array('#subset1' => 'Group a Line 2 Field 1',
        '#subset2' => 'Group a Line 2 Field 2',
        '#Group' => 'Group a Line 2 Field 3',
        '#ID' => 'Group a Line 2 Field 4',
    ),      
);
$form['Headers']['b']=  array(
    array('#subset1' => 'Group b Line 1 Field 1',
        '#subset2' => 'Group b Line 1 Field 2',
        '#Group' => 'Group b Line 1 Field 3',
        '#ID' => 'Group b Line 1 Field 4',
    ),
    array('#subset1' => 'Group b Line 2 Field 1',
        '#subset2' => 'Group b Line 2 Field 2',
        '#Group' => 'Group b Line 2 Field 3',
        '#ID' => 'Group b Line 2 Field 4',
    ),      
);
foreach(element_children($form['Headers']) as $tmp){


    //drupal_set_message($tmp);
    $form['Headers'][$tmp] += array(
        '#type' => 'fieldset',
        '#title' => t($tmp),
        '#collapsible' => TRUE,
        //'The theme reference generates the rows.
        '#theme' => 'test_fieldset',
        '#header' => array(
            //array('data' => t('Enabled'), 'class' => array('checkbox')),
            t('ID'),
            t('subset1'),
            t('subset2'),
            //array('data' => t('Operations'), 'colspan' => 3),
        ),
    );


}
return $form;
}


function theme_test_fieldset($variables){
    $form = $variables['form'];
    // Individual table headers.
    $rows = array();
    // Iterate through all the modules, which are
    // children of this fieldset.

    foreach(element_children($form) as $key){
        // Stick it into $module for easier accessing.
        $module = $form[$key];
        //$row = array();
        //$row[] = array('class' => array('checkbox'), 'data' => drupal_render($module['enable']));
        $row[] = '<label><strong>' . drupal_render($module['#ID']) . '</strong></label>';
        // $row[] = drupal_render($module['version']);
        // Add the description, along with any modules it requires.

        $description = drupal_render($module['#subset1']);
        $description3 = drupal_render($module['#subset2']);

        $row[] = array('data' => $description, 'class' => array('description'));
        $row[] = array('data' => $description3, 'class' => array('description'));
        // Display links (such as help or permissions) in their own columns.
        $rows[] = $row;
    }

    return theme('table', array('header' => $form['#header'], 'rows' => $rows));


}

0 ответов

Другие вопросы по тегам