Como faço para um tema exigir o Jquery (para usuários anônimos)?


7

Estou criando um tema para o D8 chamado 'herchel'. Estou tentando fazer com que o tema exija jquery em todas as páginas (por padrão, o D8 não carrega o Jquery para usuários anônimos)

Examinando a pouca documentação que posso encontrar além dos temas principais, criei um arquivo chamado herchel.libraries.yml

Eu tentei o seguinte ... tudo sem sorte:

drupal.herchel:
version: VERSION
  dependencies:
    - core/jquery

-

drupal:
version: VERSION
  dependencies:
    - core/jquery

-

herchel:
version: VERSION
  dependencies:
    - core/jquery

Alguém tem alguma idéia sobre o que eu preciso colocar nisso?


O terceiro está certo, acho que o problema é apenas um espaço em branco - tente recuar a linha versionpara corresponderdependencies
— Clive

Respostas:


11

Corri para esse upgrade de um dos meus temas de contribuição para o Drupal 8, pois queria o jquery.once para usuários anônimos. Aqui está o que eu fiz que funciona muito bem:

Em herchel.libraries.yml

herchel-corescripts:
  version: VERSION
  js:
    js/scripts.js: {}
  dependencies:
    - core/jquery
    - core/drupal.ajax
    - core/drupal
    - core/drupalSettings
    - core/jquery.once

Em seguida, no arquivo herchel.theme do seu tema .

function herchel_preprocess_page(&$vars, $hook) {
  // Render the library as laid out in herchel.libraries.yml
  $libraries['#attached']['library'][] = 'herchel/herchel-corescripts';
  \Drupal::service('renderer')->renderRoot($libraries);
}

Preste atenção ao recuo também para o código YML. Embora ainda não esteja realmente documentado, você pode dar uma olhada neste problema e em seu log de alterações.

Substitua hook_library_info () pelo arquivo * .libraries.yml

Observe que você também vê o arquivo "scripts.js" de um tema teórico no código acima, mas pode não ser necessário. No meu tema, é isso que usa o jquery para chamar código personalizado.

Esse código provavelmente também é uma boa referência para os bits YML. Observe que nos dois casos versionestá no mesmo nível que dependencies.

Também fiz uma lista dos problemas do Drupal 8 que encontrei e participei da minha atualização do D8.

Atualizar:

Corrigi o código, corremos para esse problema: Substitua os valores da matriz da biblioteca #attached por strings no provedor-namespaced

Observe o seguinte:

 $libraries['#attached']['library'][] = array('herchel', 'herchel-corescripts');

vs.

$libraries['#attached']['library'][] = 'herchel/herchel-corescripts';

Eu testei e os erros foram embora. :)


Danny, você é demais! Mas, estou recebendo alguns erros de PHP. Aviso: explode () espera que o parâmetro 2 seja string, matriz fornecida em _drupal_add_library () (linha 2676 de core \ includes \ common.inc). Aviso: explode () espera que o parâmetro 2 seja string, matriz fornecida em drupal_get_library () (linha 2741 do core \ includes \ common.inc). Esses erros aparecem independentemente do conteúdo do arquivo herchel.libraries.yml. Eu tentei contornar um pouco isso sem sorte. Eu também tentei o código a partir Grátis mas que parece ser antes de questão 8507583 foi cometido
— mherchel

11
$ page ['# attachment'] ['library'] [] = 'libraryprovider / libraryname';

Mike, o novo código no Gratis está apenas na versão dev ( drupalcode.org/project/gratis.git/tree/refs/heads/8.x-1.x ) e eu o testei e funciona com o Alpha mais recente de D8 Hoje estou de cabeça para baixo em um projeto, mas talvez eu possa ajudar neste fim de semana. Qual versão do D8 você está usando?
— Danny Englander

Como conseguir isso sem usar uma função de pré-processo?
— Itsdarrylnorris

11

No seu tema, crie um arquivo de bibliotecas herchel.libraries.yml. Neste arquivo, coloque:

libname:
  version: 1.x
  js:
    js/scripts.js: {}
  css:
    theme:
      css/styles.css: {}
  dependencies:
    - core/jquery

Em herchel.info.ymlcolocar:

libraries:
  - herchel/libname

Houve um problema sobre isso e foi corrigido no Drupal Developer Days em Szeged.
— perfil completo de Dragan Eror

Atualizei e testei o código na minha resposta. É mais provável que tenhamos esse problema com base na mensagem de erro. drupal.org/node/2203407
— Danny Englander

Talvez isso também ajuda ... Página de documentação sobre a implementação de bibliotecas drupal.org/node/2216195
— Dragan Eror

0

Talvez você tenha adicionado espaços antes de "dependências:"

isso é verdade:

google-maps:
  version: VERSION
  js:
    vendor/gmap3.js: {cope: footer}
    //maps.google.com/maps/api/js?key=000000: { type: external, cope: footer}
  dependencies:
    - core/jquery
    - core/drupal
    - core/drupalSettings

por exemplo, isso está errado:

google-maps:
  version: VERSION
  js:
    vendor/gmap3.js: {cope: footer}
    //maps.google.com/maps/api/js?key=000000: { type: external, cope: footer}
    dependencies:
      - core/jquery
      - core/drupal
      - core/drupalSettings
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.