2011-09-01 28 views
6

当你需要使用module_load_include()require_once包括分别位于您的模块中的文件,我想知道。module_load_include()与require_once

+0

Drupal是开源的,你可以做这个函数是怎么写的 – ajreal

+0

@ajreal检查:它仍然是一个合理的问题。即使[Drupal手册页](http://api.drupal.org/api/drupal/includes--module.inc/function/module_load_include/6)也没有给出通过'require_once'使用它的明确情况。事实上,在该页面的评论中提出了类似的问题,答案是“更多Drupal-ish使用它”,当你试图找出什么是最好的时候,这不是一个非常有用的答案在任何情况下练习。 – Spudley

+0

@ajreal:我现在在做什么,我只是想知道如果你想包含来自同一模块内的文件,你是否需要使用module_load_include。 – Frederic

回答

13

Drupal module_load_include()函数超过标准PHP require_once的关键是它在使用drupal_get_path()定位文件时引用了模块的路径。

如果你使用require_once,你就必须做到这一点位自己。

它所做的另一件事是在试图包含它之前检查文件是否存在,这对于避免致命的崩溃很方便,但是如果在尝试调用函数时无论如何要获取一个文件试图包括。这很方便,但允许您产生更多有意义的错误。

在这一天结束,module_load_include()实际上只是由Drupal的提供,使事情稍微容易为自己的小工具功能。如果您知道文件的位置,并且您知道它存在那里,则很少需要使用Drupal函数;你也可以使用require_once

+2

为了使解释更加明确,您的模块可以安装在sites/all/modules /,sites/all/modules/contrib /,sites/site.com/modules等模块中。module_load_include()将知道您的模块安装位置,使用正确的路径。 – Berdir

+0

@Berdir:绝对正确。另一方面,如果你从同一个模块中的另一个文件中包含它,你只需要知道相对路径,所以'require_once'就足够了。当从模块外部包含模块文件时(例如,需要由Drupal内核中的代码完成),通常会更好地使用'module_load_include()'。都有自己的位置。 – Spudley

+5

@Spudley相对路径始终从最初请求的文件开始,即index.php。要真正包含来自你自己的模块的文件,你必须使用像dirname(\ __ FILE__)这样的技巧来获取.module文件的位置。 – Berdir

1

module_load_include需要Drupal完全加载(Fully Bootstrapped)。

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

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

如果u希望在全球范围内使用该功能,然后使用require_once

require_once并不需要它。

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