1

我正在开发自己的模块。我意识到我经常需要在不同的地方手动输入我的模块名称。最流行的用法是drupal_get_path($type, $name)函数(我的代码中有超过 10 个)。$name主题或模块名称在哪里。在此期间,我需要更改我的模块名称 3 次。正如您所猜测的那样,我还需要更改项目中硬编码的所有模块名称。所以我认为有一些方便的功能来自动获取这个名字会很好。

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

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

sites/all/modules/my_module/

..那么你可以这样抓住它

drupal_get_current_module_name(); // return my_module
4

2 回答 2

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

于 2012-06-15T15:31:54.283 回答
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);
于 2012-06-15T15:14:57.627 回答