Drupal, CCK - Удалить перезагрузку Draggable для не администраторов

StackOverflow https://stackoverflow.com/questions/3104651

  •  29-09-2019
  •  | 
  •  

Вопрос

Есть ли чистый способ удалить опцию Draggable на полях CCK несколько значений? Я предполагаю, что я смогу стимулировать его с CSS, но это не похоже на «правильный» способ сделать это.

В идеале опция Draggable не будет доступна для любых пользователей, кроме администраторов.

Это было полезно?

Решение 2

Спасибо за совет @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;
}

Другие советы

Похоже, что в тематических функциях CCK построен материал TableDRAG - например theme_content_multiple_values Он добавляет класс «Draggable» к столовым строкам и вызовdrupal_add_tabledrag на столе.

Вы должны быть в состоянии переопределить это в своей теме / модуле (?) И добавить довольно простой переключатель, чтобы проверить для пользователей с соответствующим разрешением перед добавлением перетаскивания.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top