Frage

Gibt es eine saubere Art und Weise die ziehbar Option auf Mehrwert CCK Felder zu entfernen? Ich nehme an, ich könnte es Stil heraus mit CSS, aber das scheint nicht wie der „richtige“ Weg, es zu tun.

Idealerweise würde die ziehbar Option nicht für alle Benutzer außer Administratoren zur Verfügung.

War es hilfreich?

Lösung 2

Danke für den Tipp @ Andrew. Hier ist, was ich am Ende kommen mit:

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

Andere Tipps

Es sieht aus wie die tabledrag Sachen in den CCK Thema Funktionen gebaut wird - zB theme_content_multiple_values es das Hinzufügen einer ‚ziehbar‘ Klasse, um die Tabellenzeilen, und ruft drupal_add_tabledrag auf dem Tisch.

Sie sollten diese in der Lage sein, außer Kraft zu setzen in Ihrem Thema / Modul (?) Und fügen Sie einen ziemlich einfachen Schalter zu Test für Benutzer mit einer entsprechenden Erlaubnis, bevor die Drag hinzufügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top