2011-09-01 12 views
6

Me preguntaba cuándo necesita usar module_load_include() o require_once para incluir archivos que se encuentran dentro de su módulo.module_load_include() vs require_once

+0

Drupal es de código abierto, se puede hacer una verificación de cómo se escribe esta función – ajreal

+0

@ajreal: Todavía es una pregunta legítima. Incluso la [página de manual de Drupal] (http://api.drupal.org/api/drupal/includes--module.inc/function/module_load_include/6) no da un caso definitivo para usarla en 'require_once'. De hecho, se formuló una pregunta similar en los comentarios en esa página, y la respuesta fue "es más Drupal-ish usarlo", que no es realmente una respuesta muy útil cuando estás tratando de averiguar qué es lo mejor. practicar en cualquier situación dada. – Spudley

+0

@ajreal: Ahora lo que es, solo me pregunto si necesitas usar module_load_include si quieres incluir archivos dentro del mismo módulo. – Frederic

Respuesta

13

La clave de que la función Drupal module_load_include() supera el estándar PHP require_once es que hace referencia a la ruta del módulo al ubicar el archivo, usando drupal_get_path().

Si tuviera que usar require_once, tendría que hacer este bit usted mismo.

La otra cosa que hace es verificar que el archivo exista antes de tratar de incluirlo, lo cual es útil para evitar accidentes fatales, pero no tiene sentido si va a obtener uno de todos modos cuando intente llamar a las funciones que intenté incluir Sin embargo, esto es útil para permitirle producir errores más significativos.

Al final del día, module_load_include() es en realidad una pequeña función de utilidad proporcionada por Drupal para facilitar las cosas por sí mismos. Si sabe dónde se encuentra el archivo y sabe que existe allí, hay muy poca necesidad de utilizar la función Drupal; también puede usar require_once.

+2

Para que la explicación sea más explícita, su módulo podría instalarse en sites/all/modules /, sites/all/modules/contrib /, sites/site.com/modules, etc. module_load_include() sabrá dónde está instalado su módulo y usa la ruta correcta – Berdir

+0

@Berdir: absolutamente correcto. Por otro lado, si lo está incluyendo desde otro archivo dentro del mismo módulo, solo necesita conocer la ruta relativa, por lo que 'require_once' sería suficiente. 'module_load_include()' normalmente se usaría mejor cuando se incluye un archivo de módulo desde fuera de ese módulo (es decir, como debe ser hecho por el código en el núcleo de Drupal). Sin embargo, estás en lo cierto; ambos tienen su lugar. – Spudley

+5

@Spudley la ruta relativa siempre comienza desde el archivo solicitado inicialmente, que es index.php. Para incluir realmente un archivo de su propio módulo, tendría que usar un truco como dirname (\ __ FILE__) para obtener la ubicación de su archivo .module. – Berdir

1

module_load_include requiere que Drupal se cargue por completo (Totalmente Bootstrapped).

sintaxis: module_load_include ($ type, $ module, $ name = NULL);

Ej: module_load_include('inc','module_name','file_name');

si quieres utilizar esta función en un contexto global a continuación, utilizar require_once

require_once no lo necesita.

Ej: require_once DRUPAL_ROOT . '/path/file' .

Cuestiones relacionadas