【问题标题】:Joomla: Plugins for a plugin - how to 'advertise' capabilities?Joomla:插件的插件 - 如何“宣传”功能?
【发布时间】:2013-08-05 08:31:40
【问题描述】:

我正在开发一个插件,它有自己的插件来处理各种事件。

现在我正在考虑让这个插件添加他们自己的“命令”。但我想知道如何最有效地治疗它。我有一个我自己的命令列表,无论如何我都会在文章中搜索。然后我是否应该触发DoWhatYouWant($article)-event - 或者,因为无论如何我都会进行搜索(和解析参数),也许我可以构建一个全局命令列表然后触发“ExecuteCommand($article,$cmd,$params)”-事件?听起来更好,但是(我认为)我必须构建这个命令列表(以便我的程序知道要查找的内容),所以每个插件都必须以某种方式“宣传”它可以做什么,即它可以处理的命令 - 我不知道该怎么做。

或者有没有更好(更标准化?)的方法?

【问题讨论】:

    标签: joomla2.5 joomla-extensions


    【解决方案1】:

    如果您通过插件助手导入插件

    JPluginHelper::importPlugin('mycmdplugins');
    

    然后你可以得到你的子插件支持的所有可用命令,比如

    $cmds = JDispatcher::getInstance()->trigger('onMyAwesomeCmds');
    

    通过 $cmds 变量,您现在知道子插件支持哪些命令,并且您可以为它们解析文章。然后就可以了

    foreach ($cmds as $cmd) {
      preg_match_all("{".$cmd."*}", $article->text, $matches, PREG_SET_ORDER);
      if (!empty($matches)) {
        JDispatcher::getInstance()->trigger('onMyAwesome'.ucfirst($cmd), array($article, $params));
      }
    }
    

    为了消除更多重复的任务,我建议附加插件将从您的插件文件夹扩展一个基类。

    【讨论】:

    • 这处理处理已知命令集的插件。但我主要关心的是使插件能够添加他自己的命令 - 我的插件应该完全关心这一点(以消除重复任务)还是将它留给其他插件(使用DoWhatYouWant-approach)......?
    • 我已经更新了如何动态调用函数的代码。现在另一个插件可以为编辑命令实现​​ onMyAwesomeEdit 吗?使用这种方法,主插件不需要知道插件是否可用于此命令。
    • 对不起 - 也许我的英语太糟糕而无法正确解释这一点,或者我做了太多假设。我添加了一个示例,希望有助于使其更清晰。我认为动态代码没有多大帮助 - 因为我的插件甚至不知道 $cmd 是一个命令 - 除非它尝试解释它找到的每个 {text} - 我认为这花费了太多时间 - 所以我正在寻找一种更好的设计,使程序只能查看“真正的候选人”......
    • 更新了我的答案,首先获取命令列表,然后仅在它们上运行。
    • 谢谢 - 我会这样做,我喜欢这种方法。不幸的是,在插件上触发“getCommandList”会返回一个空数组——但我会把它放到另一篇文章中:)
    猜你喜欢
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多