Drupal, CCK - удалить перетаскиваемый порядок для не-администраторов - PullRequest
2 голосов
/ 23 июня 2010

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

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

Ответы [ 2 ]

1 голос
/ 24 июня 2010

Похоже, что материал таблицы тянется в функциях темы cck - например, theme_content_multiple_values добавляет класс 'draggable' к строкам таблицы и вызывает drupal_add_tabledrag для таблицы.

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

0 голосов
/ 01 июля 2010

Спасибо за отзыв @ Андрей. Вот что я в итоге придумал:

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