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_section' => array(
'template' => 'templates/foundation-section',
'render element' => 'element',
),
);
}
function foundation_group_field_group_formatter_info() {
return array(
'display' => array(
'foundation_group_section' => array(
'label' => t('Foundation Section container'),
'description' => t('This field group type renders a Zurb Foundation Section container.'),
'format_types' => array(
'open',
),
'default_formatter' => 'open',
'instance_settings' => array(
'classes' => '',
'section_type' => 'auto',
'deep_linking' => FALSE,
),
),
'foundation_group_section_item' => array(
'label' => t('Foundation Section item'),
'description' => t('This field group type renders the items of an section within a Zurb Foundation Section container.'),
'format_types' => array(
'open',
'closed',
),
'default_formatter' => 'closed',
'instance_settings' => array(
'classes' => '',
'id' => '',
),
),
),
);
}
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_section') {
$form['instance_settings']['section_type'] = array(
'#title' => t('Section type'),
'#type' => 'select',
'#options' => drupal_map_assoc(array(
'auto',
'tabs',
'accordion',
'vertical-nav',
'horizontal-nav',
)),
'#default_value' => isset($group->format_settings['instance_settings']['section_type']) ? $group->format_settings['instance_settings']['section_type'] : $formatter['instance_settings']['section_type'],
);
$form['instance_settings']['deep_linking'] = array(
'#title' => t('Enable Deep linking'),
'#description' => t('Deep linking allows visitors to visit a predefined URL with a hash that points to a particular section of the content.'),
'#type' => 'checkbox',
'#default_value' => isset($group->format_settings['instance_settings']['deep_linking']) ? $group->format_settings['instance_settings']['deep_linking'] : $formatter['instance_settings']['deep_linking'],
);
}
return $form;
}
function field_group_pre_render_foundation_group_section(&$element, &$group, &$form) {
$settings =& $group->format_settings['instance_settings'];
$classes =& $settings['classes'];
$classes = !empty($classes) ? explode(' ', $classes) : array();
$classes[] = 'section-container';
$classes[] = $settings['section_type'];
$classes = array_unique($classes);
$element += array(
'#type' => 'foundation_section',
'#theme' => 'foundation_section',
'#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_section_item(&$element, $group, &$form) {
$settings =& $group->format_settings['instance_settings'];
$classes =& $settings['classes'];
$classes = !empty($classes) ? explode(' ', $classes) : array();
$classes += array(
'foundation-section-item',
);
$classes = array_unique($classes);
if (isset($element['#id']) && !empty($element['#id'])) {
$id = $element['#id'];
}
else {
$id_parts = array(
$group->entity_type,
$group->bundle,
$group->mode,
$group->group_name,
);
$html_id = implode('-', $id_parts);
$id = drupal_html_id($html_id);
}
$element += array(
'#type' => 'foundation_section_item',
'#group' => $group->parent_name,
'#title' => check_plain(t($group->label)),
'#attributes' => array(
'id' => $id,
),
'#description' => $group->description,
'#parents' => array(
$group->parent_name,
),
'#formatter' => $group->format_settings['formatter'],
'#settings' => $group->format_settings['instance_settings'],
);
}
function template_preprocess_foundation_section(&$variables) {
$deep_linking = isset($variables['element']['#settings']['deep_linking']) ? $variables['element']['#settings']['deep_linking'] : FALSE;
$items_processed = array();
foreach (element_children($variables['element'], TRUE) as $key) {
$item =& $variables['element'][$key];
if (!empty($item) && $item['#type'] === 'foundation_section_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 ($deep_linking) {
$item_processed['content_attributes']['data-slug'] = $item['#attributes']['id'];
}
if ($item['#formatter'] === 'open') {
$item_processed['container_attributes']['class'][] = 'active';
}
$item_processed['content_attributes']['class'][] = 'content';
$items_processed[] = $item_processed;
}
}
$variables['items'] = $items_processed;
$data_options = array();
if ($deep_linking) {
$data_options[] = 'deep_linking: true';
}
$attributes =& $variables['element']['#attributes'];
if (!empty($data_options)) {
$attributes['data-options'] = implode('; ', $data_options);
}
$attributes['class'] = $variables['element']['#settings']['classes'];
}