function theme_content_multigroup_node_form in Content Construction Kit (CCK) 6.3
Theme an individual form element.
Combine multiple values into a table with drag-n-drop reordering.
File
- modules/
content_multigroup/ content_multigroup.node_form.inc, line 867 - Implementation of node edit functions for content multigroup.
Code
function theme_content_multigroup_node_form($element) {
$group_name = $element['#group_name'];
$groups = fieldgroup_groups($element['#type_name']);
$group = $groups[$group_name];
$group_multiple = $group['settings']['multigroup']['multiple'];
$group_fields = $element['#group_fields'];
$table_id = $element['#group_name'] . '_values';
$table_class = 'content-multiple-table';
$order_class = $element['#group_name'] . '-delta-order';
$subgroup_settings = isset($group['settings']['multigroup']['subgroup']) ? $group['settings']['multigroup']['subgroup'] : array();
$show_label = isset($subgroup_settings['label']) ? $subgroup_settings['label'] : 'above';
$subgroup_labels = isset($group['settings']['multigroup']['labels']) ? $group['settings']['multigroup']['labels'] : array();
$multiple_columns = isset($group['settings']['multigroup']['multiple-columns']) ? $group['settings']['multigroup']['multiple-columns'] : 0;
$headers = array();
if ($group_multiple >= 1) {
$headers[] = array(
'data' => '',
);
}
if ($multiple_columns) {
foreach ($group_fields as $field_name => $field) {
$required = !empty($field['required']) ? ' <span class="form-required" title="' . t('This field is required.') . '">*</span>' : '';
$headers[] = array(
'data' => check_plain(t($field['widget']['label'])) . $required,
'class' => 'content-multigroup-cell-' . str_replace('_', '-', $field_name),
);
}
$table_class .= ' content-multigroup-edit-table-multiple-columns';
}
else {
if ($group_multiple >= 1) {
$headers[0]['colspan'] = 2;
}
$table_class .= ' content-multigroup-edit-table-single-column';
}
if ($group_multiple >= 1) {
$headers[] = array(
'data' => t('Order'),
'class' => 'content-multiple-weight-header',
);
if ($group_multiple == 1) {
$headers[] = array(
'data' => '<span>' . t('Remove') . '</span>',
'class' => 'content-multiple-remove-header',
);
}
}
$rows = array();
$i = 0;
foreach (element_children($element) as $delta => $key) {
if (is_numeric($key)) {
$cells = array();
$label = $show_label == 'above' && !empty($subgroup_labels[$i]) ? theme('content_multigroup_node_label', check_plain(t($subgroup_labels[$i]))) : '';
$element[$key]['_weight']['#attributes']['class'] = $order_class;
if ($group_multiple >= 1) {
$cells[] = array(
'data' => '',
'class' => 'content-multiple-drag',
);
$delta_element = drupal_render($element[$key]['_weight']);
if ($group_multiple == 1) {
$remove_element = drupal_render($element[$key]['_remove']);
}
}
else {
$element[$key]['_weight']['#type'] = 'hidden';
}
if ($multiple_columns) {
foreach ($group_fields as $field_name => $field) {
$cell = array(
'data' => isset($element[$key][$field_name]) ? drupal_render($element[$key][$field_name]) : '',
'class' => 'content-multigroup-cell-' . str_replace('_', '-', $field_name),
);
if (!empty($cell['data']) && !empty($element[$key][$field_name]['#description'])) {
$cell['title'] = $element[$key][$field_name]['#description'];
}
$cells[] = $cell;
}
}
else {
$cells[] = $label . drupal_render($element[$key]);
}
if ($group_multiple >= 1) {
$row_class = 'draggable';
$cells[] = array(
'data' => $delta_element,
'class' => 'delta-order',
);
if ($group_multiple == 1) {
if (!empty($element[$key]['_remove']['#value'])) {
$row_class .= ' content-multiple-removed-row';
}
$cells[] = array(
'data' => $remove_element,
'class' => 'content-multiple-remove-cell',
);
}
$rows[] = array(
'data' => $cells,
'class' => $row_class,
);
}
else {
$rows[] = array(
'data' => $cells,
);
}
}
$i++;
}
drupal_add_css(drupal_get_path('module', 'content_multigroup') . '/content_multigroup.css');
$output = theme('table', $headers, $rows, array(
'id' => $table_id,
'class' => $table_class,
));
$output .= drupal_render($element[$group_name . '_add_more']);
// Enable drag-n-drop only if the group really allows multiple values.
if ($group_multiple >= 1) {
drupal_add_tabledrag($table_id, 'order', 'sibling', $order_class);
drupal_add_js(drupal_get_path('module', 'content') . '/js/content.node_form.js');
}
return $output;
}