No Drupal 7, posso usar drupal_add_js
o arquivo template.php de um tema como uma theme_preprocess_html(&$vars)
função:
drupal_add_js(drupal_get_path('theme', 'mytheme') . '/js/scripts.js',
array(
'group' => JS_THEME,
'preprocess' => TRUE,
'weight' => '999',
));
$vars['scripts'] = drupal_get_js();
No Drupal 8, tentei converter isso usando attached
o arquivo .theme do meu tema da seguinte forma:
$vars['#attached']['js'] = array(
array(
'data' => drupal_get_path('theme', 'mytheme') . '/js/scripts.js',
'options' => array(
'group' => JS_THEME,
'preprocess' => TRUE,
'every_page' => TRUE,
),
),
);
... mas isso não funcionou e não houve erros no watchdog / console ou de outra forma.
De acordo com a página da API D8 para drupal_add_js
:
Descontinuado - a partir do Drupal 8.0. Use a chave #attached nas matrizes de renderização.
No entanto, não havia muito mais informações do que isso. Parece que drupal_add_css
também usará esse método. Eu sei que ainda é cedo para o Drupal 8, mas eu esperava dar um salto nisso.
theming
8
javascript
Danny Englander
fonte
fonte
Respostas:
Parece que você pode usar
hook_preprocess_page
com anexado como tal:Isso funciona muito bem ( theme.inc usa esse método), observe a matriz extra aninhada em torno do peso.
fonte
O ponto chave na documentação é este bit
Ênfase minha.
A
$variables
matriz em uma função de tema / pré-processo não é uma matriz de renderização, é apenas uma matriz contendo variáveis. Para usar,#attached
você precisará de algo assim na função pré-processo:E isso no arquivo de modelo:
Em outras palavras, mais ou menos o mesmo que no Drupal 7 (neste momento, pelo menos).
hook_preprocess_html()
provavelmente não é o lugar certo para esse código; não esqueça que os arquivos js / css são renderizados naquele modelo; portanto, é tarde demais para adicionar maishook_preprocess_page()
,hook_preprocess_node()
ou o equivalente provavelmente obterá resultados mais confiáveis.Consulte a página Melhores práticas do Twig - funções de pré-processamento e modelos para obter mais informações sobre variáveis de pré-processamento.
fonte
{{ foo }}
no mundo Galho, não há mais php / imprimir tornar no tema modelos, ou seja,node.html.twig
/page.html.twig
#attached
no contexto de uma matriz de renderização; a documentação está correta. Você precisa usar o método acima, juntamente com isso para pré-processar e pré-renderizar a variável, ou usar o arquivo .info.yml do seu tema para incluir o JS. Essas são as únicas opções que posso dizer até agora, sem seguir a rota da bibliotecahook_library_info
e que Mołot implicava acima. Vou ter que brincar um pouco com isso. Obrigado.No Drupal 8.0.x-beta2, você pode anexar CSS e JS a partir de funções de pré-processamento.
Consulte https://www.drupal.org/node/2352319
fonte
Neste exemplo, você está usando uma matriz de renderização real e não uma que é renderizada na própria função.
Dessa forma, outros módulos, temas etc. podem alterá-lo.
fonte
Embora o OP seja sobre o Drupal 8, isso pode ser feito de maneira semelhante no Drupal 7 sem usar
drupal_add_js()
para começar a se acostumar a não ter pordrupal_add_js()
perto:As opções podem ser definidas na matriz vazia, consulte https://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_add_js/7 .
fonte