如何以编程方式获取Drupal模块名称?

时间:2012-06-15 15:13:28

标签: php drupal drupal-6

我正在开发自己的模块。我意识到我经常需要在不同的地方手动输入我的模块名称。最常用的是drupal_get_path($type, $name)函数(我的代码中有10个以上)。其中$name是主题或模块名称。在此期间,我需要更改我的模块名称3次。您可以猜测我还需要更改我的项目中硬编码的所有模块名称。所以我觉得有一个方便的功能可以自动获取这个名称。

如何以编程方式获取机器模块名称?

例如,如果您的模块位于以下目录中..

sites/all/modules/my_module/

..那么你可以用这种方式抓住它

drupal_get_current_module_name(); // return my_module

2 个答案:

答案 0 :(得分:2)

通常,您应该按惯例知道 - 如果您有:sites/all/modules/my_module/,则模块的计算机名称应与文件夹名称my_module匹配。

几乎所有贡献的模块都遵循这个惯例,你也应该这样做。

您的.info和.module文件可能与文件夹的名称不匹配,但这不正确。

如果您已经在模块中执行代码,您应该已经根据您正在编辑的文件的名称知道模块的机器名称 - 除非您尝试做一些我不理解的事情

编辑:由于我们已经确定您只是尝试调用模块的主题功能,因此您实际上并不需要知道名称。

如果你有:

/** Implements theme_table **/
function my_really_long_module_name_table() {}

您的函数可能会被调用如下:

theme('table');

还有更多内容,但主题引擎将根据实现它们的内容确定调用哪些主题函数。

听起来您可能想要了解一下Drupal主题系统的一些基础知识。 这是学习Drupal 6主题图层的一个良好开端:http://drupal.org/node/165706

答案 1 :(得分:1)

我想出这样的事情:

function get_current_module_name() {
    return array_shift(explode('.', end(explode(DIRECTORY_SEPARATOR, __FILE__))));
}

但不知道是不是最好的方法..

更新: 我现在看到使用basename

更好
$name = basename(__FILE__, '.module');

更新2: 我认为如果需要在整个模块中使用它,那么它可以通过在模块的最开始定义的常量来访问,例如:

define('MODULE_NAME', basename(__FILE__, '.module'));

然后你就可以像以前一样在所有的功能中使用:

drupal_get_path('module', MODULE_NAME);