Спроба додати тег заголовка html у Drupal 8, beta 2


9

З Drupal 8.0 beta2, drupal_add_html_head() його прихильний на користь #attached. Отже, старий спосіб:

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');
}

На основі повідомлення про зміни, яке ви зараз використовуєте #attached. Отже, наведений вище код по суті той самий, що остання частина змінюється на:

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

Це не працює, хоча повідомлення про помилки у сторожовій службі немає. Я також спробував поставити це на сторінці змінити, а також обмін $buildз $variablesі , $outputале він по- , як і раніше не працює. Крім того, я спробував всю справу як масив:

  $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',
    ),
  );

... але і це не спрацювало. Я не впевнений, що я роблю неправильно, схоже, що це має працювати.

Оновлення

Тут працює робочий код, який використовує, hook_page_attachments_alterякого немає у D8 Beta 2, оскільки він був просто скоєний розробником.

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'];
  }

Єдине питання полягає в тому, що тег поля перегляду ядра не перезаписується, тому я застряг зі своїм власним тегом та ядром. Не знаєте, як поводитися з цим чи повинен мій тег перезаписати ядро?

введіть тут опис зображення

Відповіді:


7

У вас немає $ build в попередній обробці, тому не можете працювати так. $ build має бути масивом візуалізації, який десь відображається. Я також не бачу, як це могло працювати раніше, оскільки це вже перетворено в template_preprocess_html () перед запуском функції.

Додавання mock_page_attachments (_alter) () та застаріваюче зачіпання ho_page_build / alter () було лише скоєно, і як тему ви можете реалізувати прив'язку____________________________________ (), шукайте приклади в скоєному патчі, як common_test_page_attachments_alter () .

Отже, щось подібне $page['#attached']['html_head'][] = [$viewport, 'viewport'];повинно працювати там.


Ну, дякую за вашу допомогу, але я все одно втрачений. Мені буде цікаво дізнатися, чи можете ви змусити це працювати. Я спробував_закінчити_замінити і змінити, але все-таки немає радості. Я навіть схопив кілька прикладів з ядра, не пощастивши. Не здається, що це має бути таким важким.
Danny Englander

1
Оновіть своє запитання за допомогою своїх поточних прикладів коду. Звичайно, приклад, на який я вказав, працює, оскільки він використовується для тестів. Отже, ви повинні робити щось інакше. Гак, який я запропонував використати, - це_помітка___засоби__ (), а не сторінка_будування (). Коли ви реалізуєте гачок, а щось не працює, перше, що потрібно перевірити, це завжди, якщо ваш код навіть викликається, додавши вихід; наприклад.
Бердір

Я додав робочий код, який використовує запропоновані вами hook_page_attachments_alter. Є одна сторона, що у мене зараз два теги огляду, один з основних і той, який я додав із своєї теми, тому я не знаю, як з цим боротися.
Danny Englander

1
Саме для цього повинен бути другий аргумент, html_head елементи використовують це, щоб мати можливість зберігати речі унікальними. Дивлячись на ядро, цей елемент додається у DefaultHtmlFragementRenderer :: setDefaultMetatags (). У новому API там немає способу вказати ключ, що здається досить серйозною проблемою. Я пропоную вам відкрити питання для цього. Можливо drupal.org/node/2350943 пов’язано.
Бердір

Я відкрив основне питання: drupal.org/node/2359987
Danny Englander
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.