代码之家  ›  专栏  ›  技术社区  ›  Ian McIntyre Silber

drupal,cck-删除非管理员的可拖动重新排序

  •  2
  • Ian McIntyre Silber  · 技术社区  · 16 年前

    是否有一种干净的方法来删除多值CCK字段上的可拖动选项?我想我可以用CSS来设计它,但这似乎不是“正确”的方法。

    理想情况下,除了管理员之外,任何用户都不能使用draggable选项。

    2 回复  |  直到 13 年前
        1
  •  1
  •   Andrew    16 年前

    看起来TableDrag的东西是在cck主题函数中构建的-例如 theme_content_multiple_values 它正在向表行添加“draggable”类,并调用 drupal_add_tabledrag 在桌子上。

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

        2
  •  0
  •   Michael Celey Luís Ledebour    13 年前

    谢谢你给我小费@andrew。我最后想到的是:

    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;
    }