151 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * @file
 | |
|  * Implement a title field formater.
 | |
|  */
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Implements hook_field_formatter_info().
 | |
|  */
 | |
| function title_field_formatter_info() {
 | |
|   return array(
 | |
|     'title_linked' => array(
 | |
|       'label' => t('Linked and wrapped'),
 | |
|       'field types' => array('text'),
 | |
|       'settings' => array('title_style' => '', 'title_link' => '', 'title_class' => ''),
 | |
|     ),
 | |
|   );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Implements hook_field_formatter_settings_form().
 | |
|  */
 | |
| function title_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
 | |
|   $settings = $instance['display'][$view_mode]['settings'];
 | |
|   $element = array();
 | |
| 
 | |
|   $wrap_tags = array(
 | |
|     '_none' => t('- None -'),
 | |
|     'div' => t('DIV'),
 | |
|     'h1' => t('H1'),
 | |
|     'h2' => t('H2'),
 | |
|     'h3' => t('H3'),
 | |
|     'h4' => t('H4'),
 | |
|     'h5' => t('H5'),
 | |
|     'h6' => t('H6'),
 | |
|     'span' => t('SPAN'),
 | |
|   );
 | |
|   $element['title_style'] = array(
 | |
|     '#title' => t('Wrap title in tag'),
 | |
|     '#type' => 'select',
 | |
|     '#default_value' => !empty($settings['title_style']) ? $settings['title_style'] : '_none',
 | |
|     '#options' => $wrap_tags,
 | |
|   );
 | |
| 
 | |
|   $link_types = array(
 | |
|     'content' => t('Content'),
 | |
|   );
 | |
|   $element['title_link'] = array(
 | |
|     '#title' => t('Link title to'),
 | |
|     '#type' => 'select',
 | |
|     '#default_value' => $settings['title_link'],
 | |
|     '#empty_option' => t('Nothing'),
 | |
|     '#options' => $link_types,
 | |
|   );
 | |
| 
 | |
|   $element['title_class'] = array(
 | |
|     '#title' => t('Tag classes'),
 | |
|     '#type' => 'textfield',
 | |
|     '#description' => t('A CSS class to use in the wrapper tag for the title.'),
 | |
|     '#default_value' => $settings['title_class'],
 | |
|     '#element_validate' => array('_title_validate_class'),
 | |
|   );
 | |
| 
 | |
|   return $element;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Implements hook_field_formatter_settings_summary().
 | |
|  */
 | |
| function title_field_formatter_settings_summary($field, $instance, $view_mode) {
 | |
|   $settings = $instance['display'][$view_mode]['settings'];
 | |
|   $summary = array();
 | |
| 
 | |
|   $tag = isset($settings['title_style']) && $settings['title_style'] != '' && $settings['title_style'] != '_none' ? $settings['title_style'] : t('- None -');
 | |
|   $summary[] = t('Title wrap tag: @tag', array('@tag' => $tag));
 | |
| 
 | |
|   $link_types = array(
 | |
|     'content' => t('Linked to content'),
 | |
|   );
 | |
|   // Display this setting only if field is linked.
 | |
|   if (isset($link_types[$settings['title_link']])) {
 | |
|     $summary[] = $link_types[$settings['title_link']];
 | |
|   }
 | |
| 
 | |
|   // Display this setting only if wrapper has a class.
 | |
|   if (isset($settings['title_class']) && $settings['title_class'] != '_none' && $settings['title_class'] != '') {
 | |
|     $summary[] = t('Wrap tag classes: @classes', array('@classes' => $settings['title_class']));
 | |
|   }
 | |
| 
 | |
|   return implode('<br />', $summary);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Implements hook_field_formatter_view().
 | |
|  */
 | |
| function title_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
 | |
|   $settings = $display['settings'];
 | |
|   $output = isset($items[0]) ? $items[0]['safe_value'] : '';
 | |
|   $element = array();
 | |
| 
 | |
|   if (!empty($output)) {
 | |
|     if ($settings['title_link'] == 'content') {
 | |
|       $uri = entity_uri($entity_type, $entity);
 | |
|       $output = l($output, $uri['path'], array('html' => TRUE));
 | |
|     }
 | |
| 
 | |
|     $wrap_tag = empty($settings['title_style']) ? '_none' : $settings['title_style'];
 | |
| 
 | |
|     if ($wrap_tag != '_none') {
 | |
|       $variables = array(
 | |
|         'element' => array(
 | |
|           '#tag' => $wrap_tag,
 | |
|           '#value' => $output,
 | |
|         ),
 | |
|       );
 | |
| 
 | |
|       if (!empty($settings['title_class'])) {
 | |
|         $variables['element']['#attributes'] = array('class' => $settings['title_class']);
 | |
|       }
 | |
| 
 | |
|       $output = theme('html_tag', $variables);
 | |
|     }
 | |
| 
 | |
|     $element = array(
 | |
|       array(
 | |
|         '#markup' => $output,
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
|   return $element;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Validate that a space-separated list of values are lowercase and appropriate for use as HTML classes.
 | |
|  *
 | |
|  * @see title_field_formatter_settings_form()
 | |
|  */
 | |
| function _title_validate_class($element, &$form_state) {
 | |
|   $value = drupal_array_get_nested_value($form_state['values'], $element['#parents']);
 | |
|   $classes = explode(' ', $value);
 | |
| 
 | |
|   foreach ($classes as $class) {
 | |
|     if ($class != drupal_html_class($class)) {
 | |
|       form_error($element, t('Wrapper classes contain illegal characters; classes should be lowercase and may contain letters, numbers, and dashes.'));
 | |
|       return;
 | |
|     }
 | |
|   }
 | |
| }
 | 
