2011-09-01 18 views
6

Mi chiedevo quando è necessario utilizzare module_load_include() o require_once per includere file che si trovano all'interno del modulo.module_load_include() vs require_once

+0

Drupal è opensource, si può fare un controllo su come viene scritto questa funzione – ajreal

+0

@ajreal: è ancora una domanda legittima. Anche la [pagina di manuale Drupal] (http://api.drupal.org/api/drupal/includes--module.inc/function/module_load_include/6) non fornisce un caso definitivo per l'utilizzo su 'require_once'. Infatti, una domanda simile è stata posta nei commenti su quella pagina, e la risposta è stata "è più Drupal-ish usarlo", che non è davvero una risposta molto utile quando stai cercando di capire cosa è meglio pratica in ogni situazione. – Spudley

+0

@ajreal: Ora cosa faccio, mi chiedo se è necessario utilizzare module_load_include se si desidera includere i file all'interno dello stesso modulo. – Frederic

risposta

13

La cosa fondamentale che la funzione Drupal module_load_include() fa al di sopra dello standard PHP require_once è che fa riferimento al percorso del modulo quando si localizza il file, utilizzando drupal_get_path().

Se si dovesse utilizzare require_once, si dovrebbe fare questo bit da soli.

L'altra cosa che fa è controllare che il file esista prima di provare ad includerlo, il che è utile per evitare crash fatali, ma piuttosto inutile se ne hai comunque uno quando provi a chiamare le funzioni cercato di includere. Questo è utile per consentire di produrre errori più significativi.

Alla fine della giornata, module_load_include() è davvero solo una piccola funzione di utilità fornita da Drupal per rendere le cose leggermente più semplici. Se sai dove si trova il file e sai che esiste lì, c'è pochissima necessità di usare la funzione Drupal; potresti anche usare require_once.

+2

Per rendere la spiegazione più esplicita, il modulo potrebbe essere installato in siti/all/modules /, sites/all/modules/contrib /, sites/site.com/modules ecc. Module_load_include() saprà dove è installato il modulo e usa il percorso corretto. – Berdir

+0

@Berdir: assolutamente corretto. D'altra parte, se lo includi da un altro file all'interno dello stesso modulo, devi solo conoscere il percorso relativo, quindi 'require_once' sarebbe sufficiente. 'module_load_include()' tipicamente dovrebbe essere usato meglio quando si include un file di modulo al di fuori di quel modulo (cioè come deve essere fatto dal codice nel core Drupal) Hai perfettamente ragione; entrambi hanno il loro posto. – Spudley

+5

@Spudley il percorso relativo inizia sempre dal file inizialmente richiesto, che è index.php. Per includere effettivamente un file dal tuo modulo, dovresti usare un trucco come dirname (\ __ FILE__) per ottenere la posizione del tuo file .module. – Berdir

1

module_load_include richiede Drupal per essere caricato completamente (completamente Bootstrapped).

sintassi: module_load_include ($ tipo, $ modulo, $ nome = NULL);

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

se volete utilizzare questa funzione in un contesto globale quindi utilizzare require_once

require_once non ne ha bisogno.

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

Problemi correlati