【问题标题】:Getting the current module name获取当前模块名称
【发布时间】:2013-05-20 20:34:33
【问题描述】:

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

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

    // Operations using $sCurrModule...
}

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

这不适用于 Drupal 8。

【问题讨论】:

    标签: drupal drupal-7


    【解决方案1】:

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

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

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

    【讨论】:

    • CAVEAT:如果代码在 .module 文件之外,这将不起作用,这对于任何重要的功能几乎总是如此。
    • 我也不明白为什么接受这个答案:关于 D​​8 .module 文件经常被使用。
    • 如果您查看标签,您会注意到这是针对 Drupal 7 的。它被标记为已接受的答案,因为它解决了我的问题。
    • CAVEAT:$module_name 变量没有命名空间到特定的类或模块,因此如果您在多个模块中使用它,可能会得到意想不到的结果。
    • 公平观察;对于我的实现,我在特定函数之外从来不需要它,但其他可能只是将它放到文件顶部的人可能会遇到麻烦。
    【解决方案2】:

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

    【讨论】:

    • 谢谢你,但问题与 Drupal 8 无关。
    • @Lawrence Johnson 如您所见,我回答的第一句话就是承认您指出的事实:“尽管 OP 询问的是 D7 [...]”。我希望你不介意我试图分享一段经验,希望对其他人有用。
    • 我认为这很棒,我也赞成这个答案。但是,我认为将我的问题重新标记为 Drupal 8 并不好。
    • 正如@dreftymac 正确指出的那样,他的解决方案仅在此代码在 *.module 文件中运行的极少数情况下才有效。
    【解决方案3】:

    正如 cmets 中所说的那样

     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

    【讨论】:

      猜你喜欢
      • 2021-06-10
      • 2021-11-26
      • 2017-12-20
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 2013-11-06
      • 2014-01-15
      相关资源
      最近更新 更多