Đang cố gắng thêm thẻ đầu html trong Drupal 8, beta 2


9

Với Drupal 8.0 beta2, drupal_add_html_head() đã không được ủng hộ #attached. Vì vậy, cách cũ là:

function MYTHEME_page_build(&$page) {
    $viewport = array(
          '#type' => 'html_tag',
          '#tag' => 'meta',
          '#attributes' => array(
            'name' => 'viewport',
            'content' => 'width=device-width, initial-scale=1.0, maximum-scale=2.0, minimum-scale=0.55, user-scalable=yes',
          ),
        );
        drupal_add_html_head($viewport, 'viewport');
}

Dựa trên thông báo thay đổi mà bạn hiện đang sử dụng #attached. Vì vậy, mã ở trên về cơ bản là giống nhau với phần cuối cùng thay đổi thành:

$build['#attached']['html_head'][] = [$viewport, 'viewport'];

Điều này không hoạt động mặc dù và không có thông báo lỗi trong watchdog. Tôi cũng đã cố gắng đặt này trong một trang thay đổi cũng như trao đổi $buildvới $variables$outputnhưng nó vẫn không làm việc. Ngoài ra, tôi đã thử toàn bộ mọi thứ như một mảng:

  $build['#attached']['html_head'][] = array(
    '#type' => 'html_tag',
    '#tag' => 'meta',
    '#attributes' => array(
      'name' => 'viewport',
      'content' => 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no',
    ),
  );

... nhưng điều đó cũng không hoạt động. Tôi không chắc mình đang làm gì sai, có vẻ như nó nên hoạt động.

Cập nhật

Đây là mã làm việc sử dụng hook_page_attachments_alterkhông có trong D8 Beta 2 vì nó vừa được cam kết với dev.

function MYTHEME_page_attachments_alter(array &$page) {
    $viewport = array(
      '#type' => 'html_tag',
      '#tag' => 'meta',
      '#attributes' => array(
        'name' => 'viewport',
        'content' => 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no',
      ),
    );
    $page['#attached']['html_head'][] = [$viewport, 'viewport'];
  }

Vấn đề duy nhất bây giờ là thẻ viewport của core không bị ghi đè nên tôi bị kẹt với thẻ tùy chỉnh và core của tôi. Không chắc chắn làm thế nào để xử lý cái đó hoặc thẻ của tôi nên ghi đè lên lõi?

nhập mô tả hình ảnh ở đây

Câu trả lời:


7

Bạn không có $ build trong tiền xử lý, vì vậy không thể làm việc như vậy. $ build cần phải là một mảng render được kết xuất ở đâu đó. Tôi cũng không thấy làm thế nào điều này có thể hoạt động trước đây, vì điều này đã được chuyển đổi trong template_pre process_html () trước khi chức năng của bạn chạy.

Thêm hook_page_attachments (_alter) () và không dùng hook_page_build / thay đổi () vừa được cam kết, và như một chủ đề, bạn có thể triển khai hook_page_attachments_alter (), tìm ví dụ trong bản vá đã cam kết, như common_test_page_attachments_al .

Vì vậy, một cái gì đó như $page['#attached']['html_head'][] = [$viewport, 'viewport'];nên làm việc trong đó.


Vâng, cảm ơn sự giúp đỡ của bạn nhưng tôi vẫn bị mất. Tôi tò mò muốn xem liệu bạn có thể làm việc này không. Tôi đã thử hook_page_build và thay đổi nhưng vẫn không có niềm vui. Tôi thậm chí đã lấy một số ví dụ từ cốt lõi không có may mắn. Có vẻ như nó không khó lắm.
Daniel Englander

1
Cập nhật câu hỏi của bạn với các ví dụ mã hiện tại của bạn sau đó. Chắc chắn ví dụ tôi đã chỉ ra đang hoạt động, vì nó được sử dụng cho các bài kiểm tra. Vì vậy, bạn phải làm một cái gì đó khác nhau. Móc mà tôi đề xuất sử dụng là hook_page_attachments_alter (), không phải page_build (). Khi thực hiện một hook và một cái gì đó không hoạt động, điều đầu tiên cần xác minh là luôn luôn nếu mã của bạn được gọi, bằng cách thêm một lối thoát; ví dụ.
Berdir

Tôi đã thêm mã làm việc sử dụng đề xuất của bạn hook_page_attachments_alter. Có một mặt ảnh hưởng đến việc bây giờ tôi có hai thẻ khung nhìn, một thẻ từ lõi và một thẻ tôi đã thêm từ chủ đề của mình nên tôi không biết làm thế nào để đối phó với điều đó.
Daniel Englander

1
Đó là những gì đối số thứ hai được cho là dành cho, các phần tử html_head đang sử dụng điều đó để có thể giữ mọi thứ độc đáo. Nhìn vào lõi, phần tử đó được thêm vào trong DefaultHtmlFragementRenderer :: setDefaultMetatags (). API mới không có cách nào để chỉ định khóa, có vẻ như là một vấn đề khá nghiêm trọng. Tôi đề nghị bạn mở một vấn đề cho việc này. Có lẽ drupal.org/node/2350943 có liên quan.
Berdir

Tôi đã mở một vấn đề cốt lõi: drupal.org/node/2359987
Danny Englander
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.