Створення форматера для CCK-поля

09.05.2012
Creating a formatter for CCK-field
Автор:

ССК-форматери - це частини коду, і вони дозволяють виводити поля так, як нам заманеться. Часто виникає ситуація, коли веб розробнику існуючих форматерів для виконання тієї або іншої задачі не вистачає. В статті я розгляну створення форматтера для поля nodereference, і він просто додаватиме якір до ссилки.

Спершу оголошуємо форматер, для чого викликаємо хук hook_field_formatter_info ():

/** 
 * Implements of hook_field_formatter_info(). 
 * 
 * Here we define an array with the options we will provide in display fields page
 * The array keys will be used later in hook_theme and theme_
 */ 

function example_field_formatter_info() { 
  $formatters = array( 
    'nodereference_anchor' => array( 
      // The name that the user will choose in the display fields configuration page.
      'label' => t('Link(with anchor)'), 
      // An array with the types of cck fields that the formatter supports.
      'field types' => array('nodereference'), 
      'description' => t('Displays a link to the referenced node with anchor.'),
    ), 
  ); 
  return $formatters; 
}

Хук повертає масив масивів всіх заявлених в цьому модулі форматерів. 

Далі в hook_theme() об’являємо функцію темізації, яка буде відповідати за виведення поля:

/** 
 * Implements hook_theme(). 
 * 
 * We declare our theme functions according to the array keys in  hook_field_formatter_info.
 */ 
function example_theme() {  
  return array(  
    'example_formatter_nodereference_anchor' => array(  
      'arguments' => array('element' => NULL),  
    ),  
  );  
}
/* 
 * Theming functions for our formatter. 
 * 
 * And here we do our magic. You can use dsm($element) to see what you have to play with (requires devel module).
 */ 
function theme_example_formatter_nodereference_anchor($element) {
  $output = '';  
  if (!empty($element['#item']['nid']) && is_numeric($element['#item']['nid']) && ($title = _nodereference_titles($element['#item']['nid']))) {  
    $output = l($title, 'node/'. $element['#item']['nid'], array('fragment' => 'example-anchor')); 
  }  
  return $output;  
}

Із прикладу видно: все відбувається просто і без витівок. Та як там не є, а ця простота позбавляє необхідності писати великий об’єм коду в template.php, котрий потім було б важко підтримувати.

Голосів: 1 Рейтинг: 5

Також по темі

1

Досить часто виникає необхідність реалізувати сайт із підтримкою мультимовності - можливості перекладу вмісту сайта на різні мови, де переклад на ту чи іншу мову здійснює модератор сайту. Проте...

2

В унісон із новими віяннями моди попапи здобули не на жарт серйозну популярність серед замовників, при чому в останніх сформувалось стійке відчуття, що сайт в ідеалі повинен бути в попапі. ...

3

Підключення до різних баз потрібно для експорту та імпорту даних. Розглянемо три способи виходу з такої ситуації.

4

У попередньому пості я приводив приклад використання Ctools modal API за допомогою однієї форми. У цьому ж я...

5

Початкова ідея #states полягає в тому, щоб уможливлювати створення динамічних форм без написання JavaScript коду, як такого.

Subscribe to our blog updates