我正在开发自己的模块。我意识到我经常需要在不同的地方手动输入我的模块名称。最常用的是drupal_get_path($type, $name)
函数(我的代码中有10个以上)。其中$name
是主题或模块名称。在此期间,我需要更改我的模块名称3次。您可以猜测我还需要更改我的项目中硬编码的所有模块名称。所以我觉得有一个方便的功能可以自动获取这个名称。
如何以编程方式获取机器模块名称?
例如,如果您的模块位于以下目录中..
sites/all/modules/my_module/
..那么你可以用这种方式抓住它
drupal_get_current_module_name(); // return my_module
答案 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);