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

Foi útil?

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');
Licenciado em: CC-BY-SA com atribuição
Não afiliado a drupal.stackexchange
scroll top