2012-06-15 69 views
1

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

我怎样才能得到机模块名称编程?

例如,如果你有以下目录模块..

sites/all/modules/my_module/ 

..then你可以抓住它以这种方式

drupal_get_current_module_name(); // return my_module 
+0

您可以随时将module.info文件解析为.ini文件并获取名称 – Gntem

+0

您可以举一个用例的例子吗?只是想知道为什么你需要以编程方式找到你正在编写代码的模块的模块名称。或者,获取模块名称的代码应该位于不同的模块中? – nmc

+0

如果我想要名称很长的模块名称,并且我想创建[描述]主题,那么(据我所知),我应该创建类似'uc_very_long_name_description'(名称空间)的东西。然后我需要大约10个主题功能。我想要做的是创建我的帮手主题功能(_theme()),并在它使用模块名称。在改变模块名称的情况下,我不需要更改所有这些主题函数名称+所有主题()调用。'_theme('description')'而不是 'theme('uc_very_long_name_description')'' – sobi3ch

回答

1

我想出这样的事情:

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

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

更新: 我现在看到它更好地使用基名

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

更新2: 我想如果这是跨越整个模块需要的话那可能是通过在模块如最开始定义的常量访问:

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

那么你可以使用所有的时间,所有的功能是这样的:

drupal_get_path('module', MODULE_NAME); 
+1

更新的方法效果很好。 – daniels

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

嗨,是的,我知道模块的名称,但我希望它在更改模块(然后还有文件(S))名称的情况下进行证明.. – sobi3ch

+0

我想你可能会对如何使用Drupal模块有一些普遍的疑惑,或者可能你正试图在某个方面完成其他事情。你能解释为什么你认为你需要当前的模块名称,以及你想用它做什么? – jmdodge

+0

我有真正长名称使用的主题功能。另外我还想在主题函数的开头使用模块名称来使它成为某种名称空间。但我的模块名称很长,所以我想从函数中获取这个名称。如果这有意义? – sobi3ch

相关问题