Невозможно создать html с помощью таблицы тем в представлении блоков
Я создал block_view, В этом блоке я хочу показать динамическую таблицу.
Я написал следующий код.
$table_headers = array(t('User'), t('Relation'),t('Period') );
foreach ($result as $row) {
$table_rows[] = array(
$row->name,
$row->relation,
$row->period_from,
);
}
dpm($table_rows);
В приведенном выше массиве $table_rows
я получаю следующие элементы
Если я использую
$table_html = theme_table($table_headers,$table_rows);
$block['content'] = $table_html;
Затем появляется следующая ошибка на странице
The website encountered an unexpected error. Please try again later.
Если бы я использовал
$table_html = theme('table',$table_headers,$table_rows);
dpm($table_html);
$block['content'] = $table_html;
Я получаю следующий html-код на странице
Пожалуйста, подскажите, допустил ли я ошибку и что должен ли я это сделать.
3 answers
Ошибка заключается в том, как вы передаете параметры в крючок темы. Вы должны использовать следующий код.
$block['content'] = theme('table', array('header' => $table_headers, 'rows' => $table_rows));
В Drupal 7 тематические крючки получают свои параметры в массиве.
Вы также можете использовать следующий код, так как на Drupal 7 вы можете напрямую использовать массив визуализации.
$block['content'] = array(
'#theme' => 'table',
'#header' => $table_headers,
'#rows' => $table_rows
);
Если модуль изменил хук темы таблицы , и вы не понимаете, какие переменные использует измененная версия, или вообще, если вы не знаете, какие переменные используются из крючок темы, вы можете распечатать значение, возвращенное из theme_get_registry()
чтобы проверить это.
Например, на моем тестовом сайте drush ev "\$hooks = theme_get_registry(); var_export(\$hooks['table']);"
выводит мне следующее.
array (
'variables' => array(
'header' => NULL,
'rows' => NULL,
'attributes' => array(),
'caption' => NULL,
'colgroups' => array(),
'sticky' => true,
'empty' => '',
),
'type' => 'module',
'theme path' => 'modules/system',
'function' => 'theme_table',
)
Предполагая, что Drupal 7 и предполагая, что $table_rows
и $table_headers
содержат действительные данные, это то, что вам нужно:
$block['content'] = [
'#theme' => 'table',
'#rows' => $table_rows,
'#header' => $table_headers,
'#empty' => 'Nothing to see here...',
];
Предполагая, что drupal 7 и предполагая, что $table_headers и $table_rows имеют правильные данные.
$table_headers = array(t('User'), t('Relation'),t('Period') );
foreach ($result as $row) {
$table_rows[] = array(
$row->name,
$row->relation,
$row->period_from,
);
}
$output = theme('table', array('header' => $table_headers, 'rows'=> $table_rows));