12

有没有办法获取您正在使用的模块的名称?我有一大组模块(大约 35 个),有一些通用功能。长话短说,我希望能够在不将其硬编码为字符串的情况下获得模块名称。希望这不是必需的,但这是我正在尝试的一个想法:

function MYMODULE_mycustom_hook($args) {
    $sCurrModule = 'MYMODULE';

    // Operations using $sCurrModule...
}

本质上,我可以用模块名称替换“MYMODULE”并完成它,但我想知道是否有办法以编程方式获取该值。我正在使用 Drupal 7。

这不适用于 Drupal 8。

4

3 回答 3

22

如果您的模块文件是,sites/default/modules/MYMODULE/MYMODULE.module那么模块名称是 MYMODULE。

您可以使用以下命令在 MYMODULE.module 文件中以编程方式获取它:

$module_name = basename(__FILE__, '.module');
于 2013-05-20T20:47:56.670 回答
6

尽管 OP 询问的是 D7,但这里也是 Drupal 8 (D8) 的解决方案:

/** @var \Drupal\Core\Extension\ModuleHandlerInterface $module_handler */
$module_handler = \Drupal::service('module_handler');

/** @var \Drupal\Core\Extension\Extension $module_object */
$module_object = $module_handler->getModule(basename(__FILE__, '.module'));

$module_name = $module_object->getName();

当然,如有必要,您可以链接这些调用:

\Drupal::service('module_handler')->getModule(basename(__FILE__, '.module'))->getName()
于 2019-08-22T09:09:52.283 回答
0

正如评论中正确所说

 basename(__FILE__, '.module');

仅适用于实际的 .module 文件。

回答问题:

  1. 在你的 MYMODULE.module 里面

    function  print_current_module_name()  {
      return  basename(__FILE__, '.module');
    } 
    
  2. 来自 Drupal >8 的任何地方

    $module_name = print_current_module_name();
    echo "module name is : " . $module_name
    

不确定这也适用于 Drupal 7

于 2022-01-06T17:03:42.593 回答