View source
<?php
function foundation_group_ctools_plugin_api($module, $api) {
if ($module == 'field_group' && $api == 'field_group') {
return array(
'version' => 1,
);
}
}
function foundation_group_theme() {
return array(
'foundation_accordion' => array(
'template' => 'templates/foundation-accordion',
'render element' => 'element',
),
);
}
function foundation_group_field_group_formatter_info() {
return array(
'display' => array(
'foundation_group_accordion' => array(
'label' => t('Foundation Accordion container'),
'description' => t('This field group type renders a Zurb Foundation Accordion container.'),
'format_types' => array(
'open',
),
'default_formatter' => 'open',
'instance_settings' => array(
'classes' => '',
'group_type' => 'auto',
'toggable' => FALSE,
),
),
'foundation_group_accordion_item' => array(
'label' => t('Foundation Accordion item'),
'description' => t('This field group type renders the child items within a Zurb Foundation Accordion container.'),
'format_types' => array(
'open',
'closed',
),
'default_formatter' => 'closed',
'instance_settings' => array(
'classes' => '',
),
),
),
);
}
function foundation_group_field_group_format_settings($group) {
$form = array(
'instance_settings' => array(
'#tree' => TRUE,
'#weight' => 2,
),
);
$field_group_types = field_group_formatter_info();
$mode = $group->mode == 'form' ? 'form' : 'display';
$formatter = $field_group_types[$mode][$group->format_type];
if ($group->format_type === 'foundation_group_accordion') {
$form['instance_settings']['group_type'] = array(
'#title' => t('Grouping type'),
'#type' => 'select',
'#options' => drupal_map_assoc(array(
'auto',
'accordion',
)),
'#default_value' => isset($group->format_settings['instance_settings']['group_type']) ? $group->format_settings['instance_settings']['group_type'] : $formatter['instance_settings']['group_type'],
);
}
return $form;
}
function field_group_pre_render_foundation_group_accordion(&$element, &$group, &$form) {
$settings =& $group->format_settings['instance_settings'];
$classes =& $settings['classes'];
$classes = !empty($classes) ? explode(' ', $classes) : array();
$classes[] = 'accordion-container';
$classes[] = $settings['group_type'];
$classes = array_unique($classes);
$element += array(
'#type' => 'foundation_accordion',
'#theme' => 'foundation_accordion',
'#title' => check_plain(t($group->label)),
'#attributes' => array(
'id' => drupal_clean_css_identifier($group->label),
),
'#description' => $group->description,
'#parents' => array(
$group->parent_name,
),
'#settings' => $settings,
);
}
function field_group_pre_render_foundation_group_accordion_item(&$element, $group, &$form) {
$settings =& $group->format_settings['instance_settings'];
$classes =& $settings['classes'];
$classes = !empty($classes) ? explode(' ', $classes) : array();
$classes += array(
'foundation-accordion-item',
);
$classes = array_unique($classes);
$element += array(
'#type' => 'foundation_accordion_item',
'#group' => $group->parent_name,
'#title' => check_plain(t($group->label)),
'#attributes' => array(
'id' => isset($element['#id']) ? $element['#id'] : drupal_html_id($group->label),
),
'#description' => $group->description,
'#parents' => array(
$group->parent_name,
),
'#formatter' => $group->format_settings['formatter'],
'#settings' => $group->format_settings['instance_settings'],
);
}
function template_preprocess_foundation_accordion(&$variables) {
$toggable = isset($variables['element']['#settings']['toggable']) ? $variables['element']['#settings']['toggable'] : FALSE;
$items_processed = array();
foreach (element_children($variables['element'], TRUE) as $key) {
$item =& $variables['element'][$key];
if (!empty($item) && $item['#type'] === 'foundation_accordion_item') {
$item['#attributes']['class'] = $item['#settings']['classes'];
$item_processed = array(
'title' => $item['#title'],
'content' => drupal_render($item),
'container_attributes' => $item['#attributes'],
'content_attributes' => array(),
);
if ($item['#formatter'] === 'open') {
$item_processed['container_attributes']['class'][] = 'active';
$item_processed['content_attributes']['class'][] = 'active';
}
$item_processed['content_attributes']['class'][] = 'content';
$items_processed[] = $item_processed;
}
}
$variables['items'] = $items_processed;
$data_options = array();
$attributes =& $variables['element']['#attributes'];
if (!empty($data_options)) {
$attributes['data-options'] = implode('; ', $data_options);
}
$attributes['class'] = $variables['element']['#settings']['classes'];
}