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

Danny Englander
fonte

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á.

Berdir
fonte
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