Os caminhos absolutos são permitidos em arquivos de informações?
-
29-09-2020 - |
Pergunta
Estou escrevendo um .info
arquivo para um módulo, e quero incluir um script que foi instalado em /sites/all/libraries
:
Então eu incluí a linha abaixo no meu .info
arquivo:
scripts[] = /sites/all/libraries/zeroclipboard-2.2.0/dist/ZeroClipboard.js
No entanto, com ou sem a barra inicial neste caminho, sempre obtenho o mesmo resultado:Drupal trata isso como relativo ao diretório do módulo e tenta e não consegue carregar
/sites/all/modules/custom/clipboard//sites/all/libraries/zeroclipboard-2.2.0/dist/ZeroClipboard.js?nsnrjh
Talvez eu tenha respondido minha própria pergunta, mas não consigo encontrar nenhuma resposta definitiva para isso nos documentos do Drupal?
Obrigado a todos,
MB
Solução
_system_rebuild_module_data
é responsável por isso.Há uma seção inteira no código apenas para ter certeza:
// Prefix stylesheets and scripts with module path.
$path = dirname($module->uri);
if (isset($module->info ['stylesheets'])) {
$module->info ['stylesheets'] = _system_info_add_path($module->info ['stylesheets'], $path);
}
if (isset($module->info ['scripts'])) {
$module->info ['scripts'] = _system_info_add_path($module->info ['scripts'], $path);
}
Meu adivinhar é que o módulo nunca deve assumir que algo existe se o próprio módulo não o instalar.É uma forma de introduzir erros.Além disso, permitir que os módulos cheguem fora do seu diretório pode ser uma violação de segurança.
Se você precisar de um script que não pode incluir em seu módulo, use API de bibliotecas.É claro que existem outras maneiras, mas a maioria delas é problemática, e corrigir todos os problemas resultaria na clonagem deste módulo pronto de qualquer maneira.
Outras dicas
Se você estiver criando um módulo personalizado, poderá usar essas funções para adicionar uma biblioteca ou arquivo js da biblioteca.
$info = libraries_load('ui.tabs');
drupal_add_library('system', 'ui.tabs');