Невозможно создать 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 я получаю следующие элементы

enter image description here

Если я использую

$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-код на странице

enter image description here

Пожалуйста, подскажите, допустил ли я ошибку и что должен ли я это сделать.

Author: Jimmy Ko, 2016-07-20

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',
) 
 1
Author: kiamlaluno, 2016-07-20 17:49:03

Предполагая, что Drupal 7 и предполагая, что $table_rows и $table_headers содержат действительные данные, это то, что вам нужно:

$block['content'] = [
  '#theme' => 'table',
  '#rows' => $table_rows,
  '#header' => $table_headers,
  '#empty' => 'Nothing to see here...',
];
 1
Author: Clive, 2016-07-20 07:58:26

Предполагая, что 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));
 0
Author: RajneeshB, 2016-07-22 12:35:22