xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Вывод псевдо-поля при просмотре материала

Опубликовано в

В одном из прошлых постов писал о том, как добавить контент к ноде перед её выводом. В этом посте покажу, как это же можно сделать с помощью псевдо-полей (extra fields). Преимущества псевдо-полей в возможности их скрытия на странице Manage display или изменения порядка вывода (изменение веса).

Пример вывода автора материала:

/**
 * Implements hook_field_extra_fields().
 */
function mymodule_field_extra_fields() {
  // 'node' - Entity type
  // 'article' - Bundle name
  // 'display' - 'display' or 'form'
  // 'mymodule_author' - Field name
  $extra_fields['node']['article']['display']['mymodule_author'] = array(
    'label' => t('Author'),            // Label
    'description' => t('Author name'), // Description
    'weight' => 0,                     // Default weight
  );
  return $extra_fields;
}
 
/**
 * Implements hook_node_view().
 */
function mymodule_node_view($node, $view_mode, $langcode) {
  static $extra_fields = array();
 
  $key = 'node:' . $node->type . ':' . $view_mode;
  if (!isset($extra_fields[$key])) {
    $extra_fields[$key] = field_extra_fields_get_display('node', $node->type, $view_mode);
  }
 
  if (isset($extra_fields[$key]['mymodule_author']) && $extra_fields[$key]['mymodule_author']['visible']) {
    $node->content['mymodule_author'] = array(
      '#markup' => '<b>Author</b>: ' . $node->name,
      '#weight' => $extra_fields[$key]['mymodule_author']['weight'],
    );
  }
}

Страница управления отображением полей
Псевдо-поле

Создание псевдо-полей в Drupal 8.

P.S: ищу возможность прикрутить к псевдо-полю один из форматтеров.

Написанное актуально для Drupal 7
Похожие записи

Комментарии RSS

Просто супер. Спасибо :)

Спасибо, как раз то, что я искал!

то что нужно!
жаль только, что не написано куда код вставлять

Для Барсика: Сюда смотри

Вот это я удачно зашел! Спасибо.

Хочу добавить, что такой же фокус можно легко провернуть и для Manage display юзера.
Просто вместо hook_node_view() использкем hook_user_view()
А в массиве mymodule_field_extra_fields() - заменям 'node' и 'article' на - 'user'

Как использовать псевдо-поля в сущностях созданных самостоятельно (hook_entity_info , Entity API)? почему-то работают поля в form , а поля display отображаются в "управлении отображением" , но и в методе контроллера buildContent и с помощью хука hook_entity_view видны только реально существующие поля

Вопрос снят) Надо использовать имена свойств = form[имя поля] для form псевдополей = сontent[ имя поля] для display полей

Спасибо за статью! А не подскажите как добавить возможность задать параметры для этого поля?

только на отдельной странице, обычной формой

Т.е. как например Настройки формата в поле Изображения не получится сделать?

нет

Печально, спасибо

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании