Drupal → Вывод псевдо-поля при просмотре материала
В одном из прошлых постов писал о том, как добавить контент к ноде перед её выводом. В этом посте покажу, как это же можно сделать с помощью псевдо-полей (extra fields). Преимущества псевдо-полей в возможности их скрытия на странице Manage display или изменения порядка вывода (изменение веса).
Пример вывода автора материала:
Drupal 8
/** * Implements hook_entity_extra_field_info(). */ function modulename_entity_extra_field_info() { $extra_fields = []; $extra_fields['node']['article']['display']['extra_field_author'] = [ 'label' => t('Author name'), 'weight' => 0, ]; return $extra_fields; } /** * Implements hook_ENTITY_TYPE_view(): node. */ function modulename_node_view(array &$build, NodeInterface $node, EntityViewDisplayInterface $display, $view_mode) { if ($node->bundle() == 'article' && $display->getComponent('extra_field_author')) { $build['extra_field_author'] = [ '#markup' => $node->getOwner()->getDisplayName(), ]; } }
Drupal 7
/** * 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_info = array(); $extra_field_cache_key = $node->type . ':' . $view_mode; if (!isset($extra_fields_info[$extra_field_cache_key])) { $extra_fields_info[$extra_field_cache_key] = field_extra_fields_get_display('node', $node->type, $view_mode); } if (!empty($extra_fields_info[$extra_field_cache_key]['mymodule_author']['visible'])) { $node->content['mymodule_author'] = array( '#markup' => '<b>Author</b>: ' . $node->name, '#weight' => $extra_fields_info[$extra_field_cache_key]['mymodule_author']['weight'], ); } }
Комментарии
Просто супер. Спасибо :)
Спасибо, как раз то, что я искал!
то что нужно!
жаль только, что не написано куда код вставлять
Для Барсика: Сюда смотри
Вот это я удачно зашел! Спасибо.
Хочу добавить, что такой же фокус можно легко провернуть и для 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 полей
Спасибо за статью! А не подскажите как добавить возможность задать параметры для этого поля?
только на отдельной странице, обычной формой
Т.е. как например Настройки формата в поле Изображения не получится сделать?
нет
Печально, спасибо
Оставить комментарий