¿Se permiten rutas absolutas en los archivos de información?
-
29-09-2020 - |
Pregunta
estoy escribiendo un .info
archivo para un módulo, y quiero incluir un script que se ha instalado en /sites/all/libraries
:
Así que he incluido la siguiente línea en mi .info
archivo:
scripts[] = /sites/all/libraries/zeroclipboard-2.2.0/dist/ZeroClipboard.js
Sin embargo, con o sin la barra diagonal inicial en este camino, siempre obtengo el mismo resultado:Drupal trata esto como relativo al directorio del módulo e intenta cargarlo y falla
/sites/all/modules/custom/clipboard//sites/all/libraries/zeroclipboard-2.2.0/dist/ZeroClipboard.js?nsnrjh
Entonces, tal vez haya respondido mi propia pregunta, pero no puedo encontrar ninguna respuesta definitiva en los documentos de Drupal.
Gracias a todos,
MEGABYTE
Solución
_system_rebuild_module_data
es responsable de eso.Hay una sección completa en el código solo para asegurarse:
// 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);
}
Mi adivinar es que el módulo nunca debe asumir que algo existe si el módulo mismo no lo instala.Es una forma de introducir errores.Además, permitir que los módulos salgan de su directorio podría ser una violación de seguridad.
Si necesita un script que no puede incluir en su módulo, use API de bibliotecas.Por supuesto, hay otras formas, pero la mayoría de ellas son problemáticas y, de todos modos, solucionar todos los problemas daría como resultado la clonación de este módulo listo.
Otros consejos
Si está creando un módulo personalizado, puede usar esta función para agregar una biblioteca o un archivo js desde la biblioteca.
$info = libraries_load('ui.tabs');
drupal_add_library('system', 'ui.tabs');