有没有一种干净的方法来删除多值 CCK 字段上的可拖动选项?我想我可以用 CSS 设置样式,但这似乎不是“正确”的方式。
理想情况下,除管理员外,任何用户都无法使用可拖动选项。
有没有一种干净的方法来删除多值 CCK 字段上的可拖动选项?我想我可以用 CSS 设置样式,但这似乎不是“正确”的方式。
理想情况下,除管理员外,任何用户都无法使用可拖动选项。
看起来 tabledrag 的东西正在 cck 主题函数中构建 - 例如theme_content_multiple_values
,它正在向表格行添加一个“可拖动”类,并
drupal_add_tabledrag
在表格上调用。
您应该能够在您的主题/模块(?)中覆盖它并添加一个相当简单的开关来测试具有适当权限的用户,然后再添加拖动。
感谢@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;
}