2010-06-23 156 views

回答

0

感谢提示@安德鲁。以下是我最终想到的结果:

function stannes_content_multiple_values($element) { 
    global $user; 
    $field_name = $element['#field_name']; 
    $field = content_fields($field_name); 
    $output = ''; 

    if ($field['multiple'] >= 1) { 
     $table_id = $element['#field_name'] .'_values'; 
     $order_class = $element['#field_name'] .'-delta-order'; 
     $required = !empty($element['#required']) ? '<span class="form-required" title="'. t('This field is required.') .'">*</span>' : ''; 

     $header = array(
      array('data' => t('!title: !required', array('!title' => $element['#title'], '!required' => $required)), 'colspan' => 2) 
     ); 

     if ($user->uid == 1) { 
      $header[] = t('Order'); 
     } 

     $rows = array(); 

     // Sort items according to '_weight' (needed when the form comes back after 
     // preview or failed validation) 
     $items = array(); 
     foreach (element_children($element) as $key) { 
      if ($key !== $element['#field_name'] .'_add_more') { 
       $items[] = &$element[$key]; 
      } 
     } 
     usort($items, '_content_sort_items_value_helper'); 

     // Add the items as table rows. 
     foreach ($items as $key => $item) { 
      $item['_weight']['#attributes']['class'] = $order_class; 
      $delta_element = drupal_render($item['_weight']); 
      if ($user->uid == 1) { 
       $cells = array(
        array('data' => '', 'class' => 'content-multiple-drag'), 
        drupal_render($item), 
        array('data' => $delta_element, 'class' => 'delta-order'), 
       ); 
      } else { 
       $cells = array(
        drupal_render($item) 
       ); 
      } 
      $rows[] = array(
       'data' => $cells, 
       'class' => 'draggable', 
      ); 
     } 

     $output .= theme('table', $header, $rows, array('id' => $table_id, 'class' => 'content-multiple-table')); 
     $output .= $element['#description'] ? '<div class="description">'. $element['#description'] .'</div>' : ''; 
     $output .= drupal_render($element[$element['#field_name'] .'_add_more']); 

     if ($user->uid == 1) { 
      drupal_add_tabledrag($table_id, 'order', 'sibling', $order_class); 
     } 
    } else { 
     foreach (element_children($element) as $key) { 
      $output .= drupal_render($element[$key]); 
     } 
    } 

    return $output; 
} 
1

它看起来像tabledrag东西正在修建的CCK主题功能 - 如theme_content_multiple_values它添加一个“可拖动”类表中的行,并呼吁 在桌子上drupal_add_tabledrag

您应该能够在主题/模块(?)中覆盖此内容,并添加一个相当简单的开关,以在添加拖动之前为具有适当权限的用户进行测试。