Question

Y at-il un moyen propre pour enlever l'option draggable sur les champs CCK multiples valeur? Je suppose que je pourrais le dénommer avec CSS, mais cela ne semble pas comme la « bonne » façon de le faire.

Idéalement, l'option draggable ne serait pas disponible pour tous les utilisateurs, sauf les admins.

Était-ce utile?

La solution 2

Merci pour le conseil @ Andrew. Voici ce que je fini par venir avec:

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

Autres conseils

On dirait que les choses de tabledrag est en cours de construction dans les fonctions thématiques de CCK - par exemple theme_content_multiple_values il est l'ajout d'une classe « draggable » aux lignes de la table, et appelant drupal_add_tabledrag sur la table.

Vous devriez être en mesure de passer outre dans votre thème / module (?) Et ajouter un commutateur assez simple à tester pour les utilisateurs avec une autorisation appropriée avant d'ajouter le glisser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top