Drupal, CCK - Entfernen ziehbar Neuordnungs für Nicht-Admins
-
29-09-2019 - |
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.
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.