Бьюсь уже полдня, хочу сделать таблицу с возможностью изменения последовательностей записей. Т.е. хочется получить аналог списка пунктов меню, только без подпунктов, т.е. все записи находятся в одной группе, смена последовательности записей делается перетаскиванием строк таблицы.
Нашел описание данной системы api.drupal.ru, просмотрел различные модули, где использована эта функция drupal_add_tabledrag().
По примеру функции одного модуля сделал для своих данных, все проверил, данные выдаются функциями однотипные, но у моей таблицы так и не появляется этого крестика за который можно перетащить запись.
Кто делал подобные вещи, подскажите, мож там какая особенность.
формирование формы с данными
<?php
function provider_list() {
$result = db_query("SELECT * FROM {provider} ORDER BY ordering ASC");
while ($row = db_fetch_object($result)) {
$form[$row->prid]['title'] = array('#value' => $row->title);
$form[$row->prid]['prid'] = array('#value' => $row->prid);
$form[$row->prid]['edit'] = array('#value' => l(t('edit'),'admin/settings/provider/edit/'.$row->prid));
$form[$row->prid]['delete'] = array('#value' => l(t('delete'),'admin/settings/provider/delete/'.$row->prid));
$form[$row->prid]['published'] = array('#type' => 'checkbox', '#default_value' => $row->published);
$form[$row->prid]['weight'] = array('#type' => 'weight', '#delta' => 10, '#default_value' => $row->ordering);
}
$form['submit'] = array('#type' => 'submit', '#value' => t('Save'));
}
?>
темизация
<?php
function theme_provider_list($form) {
$header = array(t('Title'), t('Id'), t('weight'), t('published'), t('Operations'));
drupal_add_tabledrag('provider-list', 'order', 'sibling', 'prov-weight');
$rows = array();
foreach (element_children($form) as $key) {
if (isset(
$form[$key]['title'])) {
$provider = &$form[$key];
$provider['#attributes']['class'] = 'prov-weight';
$row = array();
$row[] = drupal_render($provider['title']);
$row[] = drupal_render($provider['prid']);
$row[] = drupal_render($provider['weight']);
$row[] = drupal_render($provider['published']);
$row[] = drupal_render($provider['edit']) .' ' . drupal_render($form[$key]['delete']);
$rows[] = array('data' => $row, 'class' => 'draggable');
}
}
$output = theme('table', $header, $rows, array('id' => 'provider-list')) . drupal_render($form);
return $output;
}
?>
Комментарии
вместо
<?php
$provider['#attributes']['class'] = 'prov-weight';
?>
напишите
<?php
$provider['weight']['#attributes']['class'] = 'prov-weight';
?>
и все заработает.
Спасибо, помогло
А как создать такую же таблицу, только с подпунктами