Drupal hoe kunt u door middel van hook_field_formatter_info een andere formatter aan een cck field toevoegen

Posted by: 
Dominique De Cooman

Hoe kunt u een andere formatter aan een cck veld toevoegen? Een cck formatter is in principe een thematiseringsfunctie waar de waarde van het veld is doorgevoerd. Formatters zijn beschikbaar op "admin/content/node-type/[your node type]/display" in de cck interface.

Het vorige screenshot laat u de build modes van een node blog zien. Hier kunt u veranderen welke formatter gebruikt wordt voor welke build mode. U kunt bijvoorbeeld de afbeelding door een andere formatter laten lopen in de full node dan in de teaser. Dit screenshot is zonder de display suite. Als het mogelijk is zou u de display suite moeten gebruiken. Het zal uw thematiserings leven makkelijker maken. U zult tevens in staat zijn om custom build modes te bepalen. Dan ziet het er zo uit.

Om een andere formatter aan de node displays toe te voegen implementeert u een hook thema. In ons voorbeeld willen we een formatter gebruiken voor onze titel. De formatter zal de h3 tag gebruiken om onze titel te renderen.

<?php

/**
 * Implementation of hook_theme().
 */
function your_module_theme() {
  
$theme_functions = array();

  
// Formatter theming functions.
  
$formatters = array(
    
'your_module_title_h3',
  );

  foreach (
$formatters as $formatter) {
    
$theme_functions[$formatter] = array(
      
'arguments' => array('field' => NULL),
    );
  }
 
  return 
$theme_functions;
}

?>

Then you define your theme function

<?php

function theme_your_module_title_h3($field) {

  return 
'<h3>'.$field['object']->title.'</h3>';

}

?>

En in de laatste stap maakt u deze formatter zichbaar voor cck door middel van hook_field_formatter_info()

<?php

/**
 * Implementation of hook_field_formatter_info(),.
 */
function your_module_field_formatter_info() {
    return array(
    
'your_module_title_h3' => array(
      
'label' => t('Renders text tru a h3 tag'),
      
'field types' => array('text'),
      
'multiple values' => CONTENT_HANDLE_MODULE,
    ),
  );
}

?>

Tenslotte wanneer u dit niet allemaal in code wilt doen (wat u waarschijnlijk zou moeten omdat het gemakkelijker te controleren is) is er een gemakkelijke module genaamd custom formatters

Reactie toevoegen