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.