Skip to content
Snippets Groups Projects

Resolve #2442197 "Blockenize several fields"

1 file
+ 77
10
Compare changes
  • Side-by-side
  • Inline
+ 77
10
@@ -43,9 +43,22 @@ function fieldblock_form_field_ui_display_overview_form_alter(&$form, &$form_sta
// Add a column header.
$form['fields']['#header'][] = t('Display as block');
// Collect blockable fields and field groups.
$field_names = array_flip(array_merge($form['#fields'], $form['#extra']));
if (module_exists('field_group') && isset($form_state['field_group'])) {
$field_group_names = array();
foreach ($form_state['field_group'] as $group_name => $group) {
if ($group->format_type == 'fieldblock') {
$field_names[$group_name] = 1;
foreach ($group->children as $field_name) {
unset($field_names[$field_name]);
}
}
}
}
// Add checkboxes.
$field_names = array_merge($form['#fields'], $form['#extra']);
foreach ($field_names as $field_name) {
foreach (array_keys($field_names) as $field_name) {
$form['fields'][$field_name]['fieldblock'] = array(
'#type' => 'checkbox',
'#default_value' => isset($settings[$field_name]) ? true : false,
@@ -53,6 +66,13 @@ function fieldblock_form_field_ui_display_overview_form_alter(&$form, &$form_sta
);
}
// Fill out empty cells.
foreach (element_children($form['fields']) as $name) {
if (!isset($form['fields'][$name]['fieldblock'])) {
$form['fields'][$name]['fieldblock'] = array('#markup' => '');
}
}
// Add a submit handler.
$form['#submit'][] = 'fieldblock_field_display_submit';
}
@@ -85,6 +105,20 @@ function fieldblock_field_display_submit($form, &$form_state) {
drupal_set_message(t('One or more fields have been made available as block. Do not forget to assign the block(s) to a region.'));
}
}
/**
* Implements hook_field_group_formatter_info().
*/
function fieldblock_field_group_formatter_info() {
return array(
'display' => array(
'fieldblock' => array(
'label' => t('Fieldblock'),
'description' => t('Combine fields in this group into 1 block.'),
'instance_settings' => array('title' => 1),
),
),
);
}
/**
* Implements hook_block_info().
@@ -165,15 +199,36 @@ function fieldblock_block_view($delta = '') {
$fieldblocks_storage = &drupal_static(FIELDBLOCK_STORAGE_STATIC);
if (isset($fieldblocks_storage[$delta])) {
$block['subject'] = '';
// Field groups use the group label.
if (isset($fieldblocks_storage[$delta]['field_group'])) {
$group = $fieldblocks_storage[$delta]['field_group'];
$block['subject'] = check_plain($group->label);
}
// If the field has a label, use it as block title and hide it on the
// field itself.
$block['subject'] = '';
if (isset($fieldblocks_storage[$delta]['#label_display']) && $fieldblocks_storage[$delta]['#label_display'] != 'hidden') {
$block['subject'] = $fieldblocks_storage[$delta]['#title'];
$fieldblocks_storage[$delta]['#label_display'] = 'hidden';
else {
$field = reset($fieldblocks_storage[$delta]['fields']);
if (isset($field['#label_display']) && $field['#label_display'] != 'hidden') {
$block['subject'] = $field['#title'];
$fieldblocks_storage[$delta]['fields'][$field['#field_name']]['#label_display'] = 'hidden';
}
}
$block['content'] = $fieldblocks_storage[$delta];
$block['content'] = $fieldblocks_storage[$delta]['fields'];
$block['fieldblock_name'] = $fieldblocks_storage[$delta]['fieldblock_name'];
// Multiple fields still need extra fields' pre_render to sort.
if (isset($fieldblocks_storage[$delta]['entity_type'])) {
$block['content'] += array(
'#entity_type' => $fieldblocks_storage[$delta]['entity_type'],
'#bundle' => $fieldblocks_storage[$delta]['bundle'],
'#view_mode' => $fieldblocks_storage[$delta]['view_mode'],
'#pre_render' => array('_field_extra_fields_pre_render'),
);
}
}
return $block;
@@ -208,10 +263,22 @@ function fieldblock_entity_view_alter(&$build, $type) {
// Loop over the fieldblocks for this entity + bundle + view mode combination
// and store the field's render array for later use.
foreach ($fieldblock_settings as $field_name => $field_label) {
if (isset($build[$field_name])) {
$fieldblock_name = $variable_name .'-'. $field_name;
if (isset($build['#groups'][$field_name])) {
$fieldblock_name = $variable_name . '-' . $field_name;
$fieldblock_id = md5($fieldblock_name);
foreach ($build['#groups'][$field_name]->children as $child_field_name) {
$fieldblocks_storage[$fieldblock_id]['fields'][$child_field_name] = $build[$child_field_name];
hide($build[$child_field_name]);
}
$fieldblocks_storage[$fieldblock_id]['fieldblock_name'] = $fieldblock_name;
$fieldblocks_storage[$fieldblock_id]['field_group'] = $build['#groups'][$field_name];
$fieldblocks_storage[$fieldblock_id]['entity_type'] = $build['#entity_type'];
$fieldblocks_storage[$fieldblock_id]['bundle'] = $build['#bundle'];
$fieldblocks_storage[$fieldblock_id]['view_mode'] = $build['#view_mode'];
} elseif (isset($build[$field_name])) {
$fieldblock_name = $variable_name . '-' . $field_name;
$fieldblock_id = md5($fieldblock_name);
$fieldblocks_storage[$fieldblock_id] = $build[$field_name];
$fieldblocks_storage[$fieldblock_id]['fields'][$field_name] = $build[$field_name];
hide($build[$field_name]);
$fieldblocks_storage[$fieldblock_id]['fieldblock_name'] = $fieldblock_name;
}
Loading