Tentando adicionar uma tag de cabeçalho html no Drupal 8, beta 2


9

Com o Drupal 8.0 beta2, drupal_add_html_head() foi preterido em favor de #attached. Então, o caminho antigo era:

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

Com base no aviso de alteração que você usa agora #attached. Portanto, o código acima é essencialmente o mesmo, com a última parte alterada para:

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

Porém, isso não funciona e nenhuma mensagem de erro no watchdog. Eu também tentei colocar isso em uma página alter, bem como trocar $buildcom $variablese, $outputmas ainda não funciona. Além disso, tentei a coisa toda como uma matriz:

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

... mas isso também não funcionou. Não sei ao certo o que estou fazendo de errado, parece que deveria estar funcionando.

Atualizar

Aqui está o código de trabalho que usa o hook_page_attachments_alterque não está no D8 Beta 2, pois foi comprometido apenas com o 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'];
  }

O único problema agora é que a tag de viewport do núcleo não é substituída, por isso estou preso à minha tag e núcleo personalizados. Não sabe como lidar com essa ou minha tag deve substituir os principais?

insira a descrição da imagem aqui

Respostas:


7

Você não tem $ build no pré-processo, portanto não pode funcionar assim. $ build precisa ser uma matriz de renderização que é renderizada em algum lugar. Também não vejo como isso poderia ter funcionado antes, pois isso já foi convertido em template_preprocess_html () antes da execução da sua função.

Adicione hook_page_attachments (_alter) () e descontinue hook_page_build / alter () que acabou de ser confirmado e, como tema, você pode implementar hook_page_attachments_alter (), procure exemplos no patch confirmado, como common_test_page_attachments_alter () .

Então, algo como $page['#attached']['html_head'][] = [$viewport, 'viewport'];deve funcionar lá.


Bem, obrigado por sua ajuda, mas ainda estou perdido. Eu ficaria curioso para ver se você consegue fazer isso funcionar. Eu tentei hook_page_build e alterar, mas ainda sem alegria. Até peguei alguns exemplos do núcleo sem sorte. Não parece que deve ser tão difícil.
— Danny Englander

11
Atualize sua pergunta com seus exemplos de código atuais. Certamente o exemplo que apontei está funcionando, pois é usado para testes. Então você deve estar fazendo algo diferente. O gancho que sugeri usar é hook_page_attachments_alter (), não page_build (). Ao implementar um gancho e algo não está funcionando, a primeira coisa a verificar é sempre se o seu código é chamado, adicionando uma saída; por exemplo.
— Berdir

Adicionei código de trabalho que usa o sugerido hook_page_attachments_alter. Há um efeito colateral que agora tenho duas tags de viewport, uma do núcleo e a que adicionei do meu tema, por isso não tenho certeza de como lidar com isso.
— Danny Englander

11
É para isso que o segundo argumento deve ser, os elementos html_head estão usando isso para manter as coisas únicas. Observando o núcleo, esse elemento é adicionado em DefaultHtmlFragementRenderer :: setDefaultMetatags (). A nova API não tem como especificar uma chave, o que parece ser um problema bastante sério. Sugiro que você abra um problema para isso. Talvez drupal.org/node/2350943 esteja relacionado.
— Berdir

Abri um problema central: drupal.org/node/2359987 #
— Danny Englander
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.