Экстра поля

Этот код добавляет кнопку facebook like к определенным типам материала (в данном случае к page)

  1. /**
  2.  * Implements hook_node_view().
  3.  *
  4.  * Adds a Facebook like button to page nodes.
  5.  */
  6. function MYMODULE_node_view($node, $view_mode, $langcode) {
  7.   switch ($node->type) {
  8.     case 'page':
  9.       $node->content['MYMODULE_fb_like'] = array(
  10.         '#type' => 'item',
  11.         '#title' => t('Like this content: '),
  12.         '#markup' => '<fb:like send="false" layout="button_count" width="90" show_faces="false" href="' . url(current_path(), array('absolute' => TRUE)) . '"></fb:like>',
  13.       );
  14.       break;
  15.   }
  16. }

Но в этом варианте мы не можем управлять расположением кода. Оно всегда будет зацеплено в конце ноды.

Решить эту проблему поможет hook_field_extra_fields(). По сути это псевдо поля, которые мы не можем удалять, а только перемещать в типе материала

  1. /**
  2.  * Implements hook_field_extra_fields().
  3.  *
  4.  * Declare our Facebook Like button as a pseudo-field.
  5.  */
  6. function MYMODULE_field_extra_fields() {
  7.   // The levels of the array that we return correspond to the
  8.   // entity type, bundle and then either 'display' or 'form'.
  9.   // In this case, we apply to 'page' nodes, when we display them.
  10.   $extra['node']['page']['display'] = array(
  11.     // The keys here must correspond to the keys of the items
  12.     // that we add in our hook_node_view() or similar function.
  13.     // Prefix it with our module name to ensure it doesn't clash
  14.     // with anything from other modules.
  15.     'MYMODULE_fb_like' => array(
  16.       'label' => t('Custom FB Like button'),
  17.       'description' => t('Facebook like button, added in MYMODULE_node_view().'),
  18.       'weight' => 10,
  19.     ),
  20.   );
  21.   return $extra;
  22. }

Еще одна демка реализации:

  1. /**
  2.  * Implements hook_field_extra_fields().
  3.  */
  4. function MODULE_field_extra_fields() {
  5.   $extra['node']['article']['display']['extended_submitted_by'] = array(
  6.     'label' => t('Extended Submitted By'),
  7.     'description' => t('Provides Jumper Menu for Version Selection'),
  8.     'weight' => 0,
  9.   );
  10.   return $extra;
  11. }
  12.  
  13. /**
  14.  * Implements hook_node_view().
  15.  */
  16. function MODULE_node_view($node, $view_mode, $langcode) {
  17.   // Only add if the view mode is for a full view, although we
  18.   // could control this via the Field UI too using 'hidden'.
  19.   if ($view_mode == 'full' && $node->type == 'article') {
  20.     $node->content['extended_submitted_by'] = array(
  21.       '#markup' => '<p>This is inserted unless hidden in the field ui.</p>',
  22.     );
  23.   }
  24. }

Для меня этот хук весьма полезен, если требуется разместить title материала где-нибудь в теле записи, а не только снизу или сверху