field_jquery_tabs.module in jQuery Tabs Field 7
Same filename and directory in other branches
jQuery Tabs Field module allows you to create jQuery tabs field.
File
field_jquery_tabs.moduleView source
<?php
/**
* @file
* jQuery Tabs Field module allows you to create jQuery tabs field.
*/
/**
* Implements hook_field_info().
*/
function field_jquery_tabs_field_info() {
return array(
'field_jquery_tabs' => array(
'label' => t('jQuery Tabs Field'),
'description' => t('jQuery Tabs Field.'),
'default_widget' => 'field_jquery_tabs_widget',
'default_formatter' => 'field_jquery_tabs_default',
),
);
}
/**
* Implements hook_field_widget_info().
*/
function field_jquery_tabs_field_widget_info() {
return array(
'field_jquery_tabs_widget' => array(
'label' => t('jQuery Tabs'),
'field types' => array(
'field_jquery_tabs',
),
),
);
}
/**
* Implements hook_field_widget_form().
*/
function field_jquery_tabs_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
$base = $element;
$settings = $instance['settings'];
$element += array(
'#type' => 'fieldset',
'#tree' => TRUE,
'#title' => isset($instance['label']) ? $instance['label'] : NULL,
'#description' => isset($instance['description']) ? $instance['description'] : NULL,
'#prefix' => '<div id="jquery-tabs-wrapper">',
'#suffix' => '</div>',
);
$field_name = $field['field_name'];
$field_data = array(
'field_name' => $field_name,
'langcode' => $langcode,
'delta' => $delta,
);
$form_state['jquery_tabs']['field_data'] = $field_data;
// Build the fieldset with the proper number of names. We'll use
// $form_state['num_names'] to determine the number of textfields to build.
if (empty($form_state['num_names'])) {
if (isset($items[$delta])) {
$form_state['num_names'] = _field_jquery_tabs_entered_tab_count($items[$delta]);
}
else {
$form_state['num_names'] = 1;
}
}
for ($i = 1; $i <= $form_state['num_names']; $i++) {
$element['tab_title_' . $i] = array(
'#type' => 'textfield',
'#title' => t('Tab @value Title', array(
'@value' => $i,
)),
'#size' => 50,
'#maxlength' => 50,
'#description' => t('Enter title for the Tab @value', array(
'@value' => $i,
)),
'#required' => $delta == 0 && $instance['required'] && $i == 1 ? TRUE : FALSE,
'#default_value' => isset($items[$delta]['tab_title_' . $i]) ? $items[$delta]['tab_title_' . $i] : NULL,
);
$element['tab_body_' . $i] = array(
'#type' => 'textarea',
'#title' => t('Tab @value Body', array(
'@value' => $i,
)),
'#cols' => 60,
'#rows' => 5,
'#description' => t('Enter body for the Tab @value', array(
'@value' => $i,
)),
'#default_value' => isset($items[$delta]['tab_body_' . $i]) ? $items[$delta]['tab_body_' . $i] : NULL,
);
}
if ($form_state['num_names'] < 7) {
$element['add_jquery_tab'] = array(
'#type' => 'submit',
'#value' => t('Add one more'),
'#submit' => array(
'_field_jquery_tabs_add_more_add_one',
),
'#ajax' => array(
'callback' => '_field_jquery_tabs_add_more_callback',
'wrapper' => 'jquery-tabs-wrapper',
),
);
}
if ($form_state['num_names'] > 1) {
$element['remove_jquery_tab'] = array(
'#type' => 'submit',
'#value' => t('Remove one'),
'#submit' => array(
'_field_jquery_tabs_add_more_remove_one',
),
'#ajax' => array(
'callback' => '_field_jquery_tabs_add_more_callback',
'wrapper' => 'jquery-tabs-wrapper',
),
);
}
return $element;
}
/**
* Callback for getting number of opened tabs in form.
*/
function _field_jquery_tabs_entered_tab_count($item) {
$count = 1;
if (isset($item['tab_title_1']) && isset($item['tab_title_2']) && isset($item['tab_title_3']) && isset($item['tab_title_4']) && isset($item['tab_title_5']) && isset($item['tab_title_6']) && isset($item['tab_title_7'])) {
$count = 7;
}
elseif (isset($item['tab_title_1']) && isset($item['tab_title_2']) && isset($item['tab_title_3']) && isset($item['tab_title_4']) && isset($item['tab_title_5']) && isset($item['tab_title_6'])) {
$count = 6;
}
elseif (isset($item['tab_title_1']) && isset($item['tab_title_2']) && isset($item['tab_title_3']) && isset($item['tab_title_4']) && isset($item['tab_title_5'])) {
$count = 5;
}
elseif (isset($item['tab_title_1']) && isset($item['tab_title_2']) && isset($item['tab_title_3']) && isset($item['tab_title_4'])) {
$count = 4;
}
elseif (isset($item['tab_title_1']) && isset($item['tab_title_2']) && isset($item['tab_title_3'])) {
$count = 3;
}
elseif (isset($item['tab_title_1']) && isset($item['tab_title_2'])) {
$count = 2;
}
return $count;
}
/**
* Callback for both ajax-enabled buttons.
*
* Selects and returns the fieldset with the names in it.
*/
function _field_jquery_tabs_add_more_callback($form, $form_state) {
$field_name = $form_state['jquery_tabs']['field_data']['field_name'];
$delta = $form_state['jquery_tabs']['field_data']['delta'];
$langcode = $form_state['jquery_tabs']['field_data']['langcode'];
return $form[$field_name][$langcode][$delta];
}
/**
* Submit handler for the "add-one-more" button.
*
* Increments the max counter and causes a rebuild.
*/
function _field_jquery_tabs_add_more_add_one($form, &$form_state) {
$form_state['num_names']++;
$form_state['rebuild'] = TRUE;
}
/**
* Implements hook_field_is_empty().
*/
function field_jquery_tabs_field_is_empty($item, $field) {
return empty($item['tab_title_1']) && empty($item['tab_body_1']);
}
/**
* Submit handler for the "remove one" button.
*
* Decrements the max counter and causes a form rebuild.
*/
function _field_jquery_tabs_add_more_remove_one($form, &$form_state) {
if ($form_state['num_names'] > 1) {
$form_state['num_names']--;
}
$form_state['rebuild'] = TRUE;
}
/**
* Implements hook_field_validate().
*/
function field_jquery_tabs_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) {
foreach ($items as $delta => $value) {
_field_jquery_tabs_validate($items[$delta], $delta, $field, $entity, $instance, $langcode);
}
}
/**
* Callback function for validate.
*/
function _field_jquery_tabs_validate(&$item, $delta, $field, $node, $instance, $langcode) {
for ($i = 2; $i <= 7; $i++) {
if (isset($item['tab_body_' . $i])) {
if (!empty($item['tab_body_' . $i])) {
if (empty($item['tab_title_' . $i])) {
form_set_error($field['field_name'] . '][' . $langcode . '][' . $delta . '][tab_title_' . $i, t('Tab @value Title is manadatory if you choose to enter text in Tab 2 body', array(
'@value' => $i,
)));
}
}
}
}
}
/**
* Implements hook_field_formatter_info().
*/
function field_jquery_tabs_field_formatter_info() {
return array(
'field_jquery_tabs_default' => array(
'label' => t('jQuery Tabs'),
'field types' => array(
'field_jquery_tabs',
),
'multiple values' => FIELD_BEHAVIOR_DEFAULT,
),
);
}
/**
* Implements hook_theme().
*/
function field_jquery_tabs_theme() {
return array(
'field_jquery_tabs_wrapper' => array(
'variables' => array(),
'template' => 'templates/field-jquery-tabs-wrapper',
),
'field_jquery_tabs_list' => array(
'variables' => array(),
'template' => 'templates/field-jquery-tabs-lists',
),
'field_jquery_tabs_body' => array(
'variables' => array(),
'template' => 'templates/field-jquery-tabs-body',
),
);
}
/**
* Implements hook_field_formatter_view().
*/
function field_jquery_tabs_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$element = array();
switch ($display['type']) {
case 'field_jquery_tabs_default':
drupal_add_library('system', 'ui.tabs');
$tabs_list = '';
$tabs_body = '';
foreach ($items as $delta => $item) {
for ($i = 1; $i <= 7; $i++) {
if (!empty($item['tab_title_' . $i])) {
$tabs_list .= theme('field_jquery_tabs_list', array(
'delta' => $delta,
'tab_title' => check_plain($item['tab_title_' . $i]),
'counter' => $i,
));
$tabs_body .= theme('field_jquery_tabs_body', array(
'delta' => $delta,
'tab_body' => check_markup($item['tab_body_' . $i], NULL, $langcode),
'counter' => $i,
));
}
}
$js = ' jQuery( "#tabs-' . $delta . '" ).tabs();';
drupal_add_js('jQuery(document).ready(function () { ' . $js . ' });', array(
'type' => 'inline',
'scope' => 'header',
));
$output = theme('field_jquery_tabs_wrapper', array(
'tabs_list' => $tabs_list,
'tabs_body' => $tabs_body,
'delta' => $delta,
));
$element[$delta]['#markup'] = $output;
}
break;
}
return $element;
}
Functions
Name![]() |
Description |
---|---|
field_jquery_tabs_field_formatter_info | Implements hook_field_formatter_info(). |
field_jquery_tabs_field_formatter_view | Implements hook_field_formatter_view(). |
field_jquery_tabs_field_info | Implements hook_field_info(). |
field_jquery_tabs_field_is_empty | Implements hook_field_is_empty(). |
field_jquery_tabs_field_validate | Implements hook_field_validate(). |
field_jquery_tabs_field_widget_form | Implements hook_field_widget_form(). |
field_jquery_tabs_field_widget_info | Implements hook_field_widget_info(). |
field_jquery_tabs_theme | Implements hook_theme(). |
_field_jquery_tabs_add_more_add_one | Submit handler for the "add-one-more" button. |
_field_jquery_tabs_add_more_callback | Callback for both ajax-enabled buttons. |
_field_jquery_tabs_add_more_remove_one | Submit handler for the "remove one" button. |
_field_jquery_tabs_entered_tab_count | Callback for getting number of opened tabs in form. |
_field_jquery_tabs_validate | Callback function for validate. |