Điểm:0

How do I add HTML markup to the title?

lá cờ 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.

Điểm:2
lá cờ cn

Nếu bạn muốn thay đổi html, thông thường bạn sẽ làm việc với hook_pre process_hook hoặc một ghi đè mẫu cành cây. Đây là trường hợp cho quan điểm là tốt. Trong trường hợp dạng xem, mẫu hiển thị tiêu đề là lượt xem-view.html.twig.

CHỈNH SỬA: Cách nhanh nhất là chỉ sử dụng #markup

function my_module_pre process_views_view(&$variables) {
  $variables['title'] = [
    '#markup' => 'kiểm tra - <b>Tiêu đề mới của tôi</b>'
  ];
}

Vì vậy, nếu bạn muốn hiển thị tiêu đề với một b thẻ, bạn có thể làm:

function my_module_pre process_views_view(&$variables) {
  $current_title = $variables['title'];
  $variables['title'] = [
    '#type' => 'inline_template',
    '#template' => '<b>{{ title }}</b>',
    '#bối cảnh' => [
      'tiêu đề' => $current_title,
    ],
  ];
}

Tuy nhiên, có thể không lý tưởng khi sử dụng các thẻ để trình bày và tốt hơn là sử dụng các lớp và kiểu dáng CSS. Nếu bạn chỉ muốn thêm một lớp CSS để nhắm mục tiêu, bạn có thể làm điều tương tự:

function my_module_pre process_views_view(&$variables) {
  $current_title = $variables['title'];
  $variables['title'] = [
    '#type' => 'thùng chứa',
    '#thuộc tính' => [
      'lớp học' => [
        'views-title', // hoặc bất cứ thứ gì 
      ],
    ],
    '#value' => $current_title
  ];
}

Cả hai #thùng đựng hàng#inline_templatekết xuất các phần tử, và có rất nhiều có sẵn cho bạn.

Tất nhiên, tùy thuộc vào những gì chủ đề của bạn và các mô-đun khác đang làm, hiện có $variables['title'] có thể không chỉ là một chuỗi, vì vậy bạn có thể cần phải điều chỉnh cho phù hợp.

May  avatar
lá cờ zw
Xin chào, cảm ơn vì đã trả lời chi tiết. Nhưng tôi đang muốn nhưng phần tử HTML trong Tiêu đề không chỉ bao bọc tiêu đề trong một lớp.
lá cờ cn
Xin lỗi, đọc nhầm. Đã cập nhật câu trả lời của tôi để bao gồm cách sử dụng #markup
leymannx avatar
lá cờ ne
Xin vui lòng hoàn nguyên chỉnh sửa của tôi nếu bạn không thích nó. Nhưng tốt hơn bạn nên sử dụng `inline_template` thay vì `html_tag`, ví dụ như nên sử dụng cho các thẻ `script`.
lá cờ cn
Thực ra tôi không biết về `inline_template` -- điều đó thật tuyệt! Cám ơn vì đã chia sẻ.
Điểm:1
lá cờ us

Để thay đổi tiêu đề chế độ xem, bạn có thể triển khai hook_pre process_views_view(), đó là những gì Lượt xem giao diện người dùng mô-đun nào, với lượt xem_ui_pre process_views_view().

// Hiển thị tiêu đề cho bản xem trước của quản trị viên.
if (!empty($view->live_preview)) {
  $variables['title'] = [
    '#markup' => $view->getTitle(),
  ];
}

Sử dụng mã đó để tránh đánh dấu HTML được sử dụng trong tiêu đề được thoát/khử trùng.

Khi mà Xem giao diện người dùng mô-đun đã được cài đặt và bạn muốn đặt cùng một tiêu đề chế độ xem trong bản xem trước của quản trị viên, hook do mô-đun của bạn triển khai cần được gọi sau khi hook được triển khai bởi mô-đun Xem giao diện người dùng mô-đun. Hãy nhớ rằng lượt xem_ui_pre process_views_view() cũng sử dụng mã sau đây.

if (!empty($view->live_preview) && \Drupal::moduleHandler()->moduleExists('contextual')) {
  $view->setShowAdminLinks(FALSE);
  foreach (['title', 'header', 'exposed', 'rows', 'pager', 'more', 'footer', 'empty', 'attachment_after', 'attachment_before'] dưới dạng $section) {
    if (!empty($variables[$section])) {
      $variables[$section] = [
        '#theme' => 'views_ui_view_preview_section',
        '#view' => $view,
        '#phần' => $phần,
        '#content' => $variables[$section],
        '#theme_wrappers' => [
          'lượt xem_ui_container',
        ],
        '#thuộc tính' => [
          'lớp học' => [
            'khu vực theo ngữ cảnh',
          ],
        ],
      ];
    }
  }
}

Như lưu ý bên lề, mặc định lượt xem-view.html.twig mẫu được sử dụng bởi mô-đun Chế độ xem đã sử dụng thêm hai biến mẫu: title_prefixtitle_suffix.

  {{ title_prefix }}
  {{ Tiêu đề }}
  {{ title_suffix }}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.