Рейтинг:0

How do I add HTML markup to the title?

флаг zw

I am trying to alter my title to include html. I have tried the following

function MODULENAME_views_pre_render(\Drupal\views\ViewExecutable $view) {
  if ($view->id() == 'products_test') {
    foreach($view->result as $value) {
      $value->_object->set('title', 'test - <b>My new Title</b>');
    }
  }
}

This outputs the title as test - <b>My new Title</b>, rather than rendering the text as HTML markup.

I tried passing the title to decode_entities(), but nothing changed.

I am using the Full content mode, rather than the Fields mode, if this makes any difference.

Рейтинг:2
флаг cn

Если вы хотите изменить html, обычно вы будете работать с hook_preprocess_hook или переопределение шаблона ветки. Это касается и просмотров. В случае представлений шаблон, отображающий заголовок, просмотры-view.html.twig.

РЕДАКТИРОВАТЬ: самый быстрый способ - просто использовать #markup

функция my_module_preprocess_views_view(&$variables) {
  $переменные['название'] = [
    '#markup' => 'test - <b>Мой новый заголовок</b>'
  ];
}

Итак, если вы хотите отобразить заголовок с помощью б тег, вы можете сделать:

функция my_module_preprocess_views_view(&$variables) {
  $existing_title = $variables['title'];
  $переменные['название'] = [
    '#type' => 'inline_template',
    '#template' => '<b>{{ title }}</b>',
    '#контекст' => [
      'название' => $existing_title,
    ],
  ];
}

Однако, возможно, использование тегов для представления не идеально, и лучше использовать классы и стили CSS. Если вы просто хотите добавить класс CSS для цели, вы можете сделать то же самое:

функция my_module_preprocess_views_view(&$variables) {
  $existing_title = $variables['title'];
  $переменные['название'] = [
    '#type' => 'контейнер',
    '#атрибуты' => [
      'класс' => [
        'views-title', // или что-то еще 
      ],
    ],
    '#значение' => $existing_title
  ];
}

Обе #контейнер и #inline_template находятся визуализировать элементы, и есть много доступных для вас.

Конечно, в зависимости от того, что делает ваша тема и другие модули, существующие $переменные['название'] может быть не просто строкой, поэтому вам может потребоваться соответствующая настройка.

May  avatar
флаг zw
Привет, спасибо за подробности ответил. Но я хочу, чтобы HTML-элементы в заголовке не просто переносили заголовок в класс.
флаг cn
Извините, неправильно прочитал. Обновлен мой ответ, чтобы включить в него информацию о том, как использовать #markup
leymannx avatar
флаг ne
Пожалуйста, не стесняйтесь отменить мою правку, если она вам не нравится. Но лучше порекомендуйте `inline_template` вместо `html_tag`, который лучше использовать, например, для тегов `script`.
флаг cn
На самом деле я не знал о `inline_template` — это здорово! Спасибо, что поделился.
Рейтинг:1
флаг us

Чтобы изменить заголовок представления, вы можете реализовать hook_preprocess_views_view(), что и Просмотры пользовательского интерфейса модуль делает, с views_ui_preprocess_views_view().

// Визуализировать заголовок для предварительного просмотра администратором.
если (!пусто($view->live_preview)) {
  $переменные['название'] = [
    '#markup' => $view->getTitle(),
  ];
}

Использование этого кода позволяет избежать экранирования/санации HTML-разметки, используемой в заголовке.

Когда Посмотреть пользовательский интерфейс модуль установлен, и вы хотите установить тот же заголовок представления в предварительном просмотре администратора, хук, реализованный вашим модулем, должен быть вызван после того, как реализованный модулем Посмотреть пользовательский интерфейс модуль. Имейте в виду, что views_ui_preprocess_views_view() использует также следующий код.

if (!empty($view->live_preview) && \Drupal::moduleHandler()->moduleExists('contextual')) {
  $view->setShowAdminLinks(FALSE);
  foreach (['название', 'заголовок', 'выставлено', 'строки', 'пейджер', 'больше', 'нижний колонтитул', 'пусто', 'attachment_after', 'attachment_before'] как $section) {
    если (!пусто($переменные[$раздел])) {
      $переменные[$раздел] = [
        '#theme' => 'views_ui_view_preview_section',
        '#вид' => $вид,
        '#section' => $раздел,
        '#content' => $переменные[$section],
        '#theme_wrappers' => [
          'views_ui_container',
        ],
        '#атрибуты' => [
          'класс' => [
            'контекстная область',
          ],
        ],
      ];
    }
  }
}

Как примечание, по умолчанию просмотры-view.html.twig шаблон, используемый модулем Views, использовал еще две переменные шаблона: title_prefix и title_suffix.

  {{ title_prefix }}
  {{ заглавие }}
  {{ title_suffix }}

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

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.