Làm việc với các đề xuất mẫu trên Drupal 8


8

Tôi cần Drupal để sử dụng mẫu trang tùy chỉnh nếu URL chứa tham số _GET cụ thể .

Trong D7 tôi sẽ làm một cái gì đó như thế này trong template.php của chủ đề:

function mytheme_preprocess_page(&$variables) {
      if($_GET['isCustomTpl'] == true)
        $variables['theme_hook_suggestions'][] =  'page__myCustomTpl';
}

Nó không hoạt động trong D8 mặc dù (tôi sẽ ngạc nhiên về điều ngược lại, xem xét tất cả các thay đổi kiến ​​trúc trong lớp chủ đề).

Có ý kiến ​​gì không?

Câu hỏi thưởng: có thể định nghĩa một chức năng như vậy trong một mô-đun, để tôi có thể phát hành công khai mà không cần người dùng chỉnh sửa chủ đề của họ không?

Câu trả lời:


13

Bạn có thể thực hiện hook_theme_suggestions_HOOK_alter()móc mới .

Alters đặt tên gợi ý cho một hook chủ đề cụ thể.

Móc này cho phép bất kỳ mô-đun hoặc chủ đề nào cung cấp chức năng chủ đề thay đổi hoặc đề xuất tên mẫu và sắp xếp lại hoặc xóa các đề xuất được cung cấp bởi hook_theme_suggestions_HOOK () hoặc bằng các yêu cầu trước đó của hook này.

Bạn có thể sử dụng nó như vậy

function MYMODULE_theme_suggestions_page_alter(array &$suggestions, array $variables) {
  if (\Drupal::request()->query->get('foo') == 'bar') {
    $suggestions[] = 'page__myCustomTpl';
  }
}

Bạn có thể thực hiện nó trong một mô-đun hoặc chủ đề


1
Tuyệt vời, làm việc hoàn hảo! Hy vọng rằng nó sẽ phát triển thành một mô-đun pjax đầy đủ chức năng cho d8!
Sifro

Nếu tôi muốn làm theo chủ đề, tôi phải đặt mã này vào tệp template.php như drupal 7? và tên tệp chủ đề phải là page_myCustomTpl.html.twig? tôi có đúng không
shekoufeh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.