Таблица с изменением веса записей

Главные вкладки

Аватар пользователя oriGNss oriGNss 28 января 2010 в 9:18

Бьюсь уже полдня, хочу сделать таблицу с возможностью изменения последовательностей записей. Т.е. хочется получить аналог списка пунктов меню, только без подпунктов, т.е. все записи находятся в одной группе, смена последовательности записей делается перетаскиванием строк таблицы.

Нашел описание данной системы 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']) .'&nbsp;' 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;
}
?>

Комментарии

Аватар пользователя stenli21 stenli21 28 января 2010 в 14:43

вместо

<?php
$provider
['#attributes']['class'] = 'prov-weight';
?>

напишите

<?php
$provider
['weight']['#attributes']['class'] = 'prov-weight';
?>

и все заработает.