Перейти к основному содержанию

Drupal 8: программно добавить нижний колонтитул для представлений

Недавно мне нужно было добавить динамический контент в нижний колонтитул Views. В частности, мне нужно было изменить ссылку в нижнем колонтитуле Views, основываясь на текущем пути, который не доступен в пользовательском интерфейсе Views. Я нашел хорошую документацию, показывающую, как это можно сделать в более старых версиях Drupal ( https://www.drupal.org/node/749452 ), но ничего для Drupal 8. Я подумал, что для Drupal 8 подход должен быть аналогичным, поэтому я начал поиски и реверс-инжиниринг.

Сначала я добавил нижний колонтитул непосредственно через пользовательский интерфейс Views и экспортировал конфигурацию своих сайтов, используя инструменты управления конфигурацией Drupal 8 Поиск нижнего колонтитула в экспортированном файле YAML предоставил ценную информацию о том, как можно добавить программный нижний колонтитул.

Вид нижнего колонтитула, найденный в экспорте YAML:

footer:
  area_text_custom:
    id: area_text_custom
    table: views
    field: area_text_custom
    relationship: none
    group_type: group
    admin_label: ''
    empty: false
    tokenize: false
    content: Footer content is great
    plugin_id: text_custom

Экспорт YAML Views предоставил настройки, необходимые для добавления нижнего колонтитула, но мне также нужно было найти правильное место, чтобы сделать это в коде. Если вы знакомы с хуками Views, то знаете, что их множество, и иногда найти подходящий для них можно только методом проб и ошибок. Так как некоторые из примеров Drupal 7, которые я нашел, использовали функцию hook_views_pre_view () , я начал с нее. Используя модуль Devel , отличный вариант для отладки в Drupal, и его dpm()функции, я осмотрел $view объект. В Drupal 8 dpm()показаны доступные методы для объекта. Немного угадав, метод setHandler показался мне правильным выбором.

dpm

Вывод из функции dpm ().

Мне удалось добавить нижний колонтитул Views с некоторым кодом в пользовательский модуль:

use Drupal\views\ViewExecutable;
function YOURMODULENAME_views_pre_view(ViewExecutable $view, $display_id, array &$args) {
  if ($view->id() == 'view_machine_name' && $display_id === 'view_display') {
    $options = array(
      'id' => 'area_text_custom',
      'table' => 'views',
      'field' => 'area_text_custom',
      'relationship' => 'none',
      'group_type' => 'none',
      'admin_label' => '',
      'empty' => TRUE,
      'tokenize' => FALSE,
      'content' => ‘Footer content is great.’,
      'plugin_id' => 'text_custom',
    );
    $view->setHandler('view_display', 'footer', 'area_text_custom', $options);
  }
}

 

Добавить комментарий

Restricted HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.
Нажимая кнопку "Отправить комментарий", Вы автоматически соглашаетесь с политикой конфиденциальности и даете свое согласие на обработку персональных данных. Ваши данные не будут переданы третьим лицам.
Top