Перетаскиваемая таблица: drupal_render, render, оба дают пустую строку для типов "#weight"

Я пытаюсь реализовать перетаскиваемую таблицу в модуле 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;
}

0 ответов

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