获取当前模块名称

问题描述 投票:0回答:4

有没有办法获取您正在使用的模块的名称?我有一大堆具有一些常见功能的模块(大约 35 个)。长话短说,我希望能够获取模块名称,而无需将其硬编码在字符串中。希望这不是必需的,但这是我正在尝试的一个想法:

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

    // Operations using $sCurrModule...
}

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

这不适用于 Drupal 8。

drupal drupal-7
4个回答
24
投票

如果您的模块文件是

sites/default/modules/MYMODULE/MYMODULE.module
那么模块名称是 MYMODULE。

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

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

8
投票

虽然 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()

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


0
投票

有点 hacky,但在大多数情况下仍然简单可靠:

public function getModuleName() { return explode('\\', __CLASS__)[1]; }

由于第三方模块类命名空间应以 Drupal\my_module_name 为前缀,这将返回预期值。

© www.soinside.com 2019 - 2024. All rights reserved.