Я пытаюсь реализовать перетаскиваемую таблицу в модуле Drupal 7. Всякий раз, когда я призываю либо render()
или же drupal_render
на моем элементе типа #weight
пустая строка возвращается. Таблица выполняет рендеринг, и я могу перетаскивать строки, но не вижу веса. Я не могу понять, что я делаю неправильно: я изучил некоторые основные компоненты Drupal, которые следуют той же схеме (вызова drupal_render
на #weight
типа элемент) и ничего не выскакивает у меня.
Моя форма начинается здесь:
$table_header = array_map(t, array('Order', 'Item', 'Manage'));
$form['table'] = array(
'#theme' => 'mymodule_kw_table',
'#header' => $table_header,
'#rows' => $my_rows // array(string)
);
hook_theme()
реализован так:
function mymodule_theme()
{
return array(
'mymodule_kw_table' => array(
'render element' => 'form',
'function' => 'mymodule_table'
)
);
}
В заключение, mymodule_table()
выглядит так:
function mymodule_table($variables)
{
$table_data = $variables['form'];
$table_id = uniqid('tb');
$rows = $table_data['#rows'];
for ($i=0; $i < count($rows); ++$i) {
$weight = array(
'#type' => 'weight',
'#title' => t('Order'),
'#default_value' => $i,
'#delta' => 1,
'#attributes' => array('class' => array($table_id . '-weight'))
);
$rows[$i] = array(
'data' => array_map(render, array($weight, $rows[$i], 'abcd placeholder')),
'class' => array('draggable')
);
}
$table = theme('table', array(
'header' => array_map(t, array('Order', 'Item', 'Manage')),
'rows' => $rows,
'attributes' => array('id' => $table_id)
));
$table .= drupal_render_children($table_data);
drupal_add_tabledrag($table_id, 'order', 'sibling', $table_id . '-weight');
return $table;
}
Задача ещё не решена.
Других решений пока нет …