将自定义按钮添加到核心后端组件


11

是否可以在修改原始源代码的情况下向标准Joomla 3组件(com_contents)的JToolbar中添加自定义按钮(当然是具有自定义操作)?

背景:我需要在com_contents主屏幕上添加一个按钮(所有文章的列表),以创建大量的邮件功能。我当然可以修改标准的Joomla文件,但是如果我对其进行修改,那么当我将Joomla升级到新版本时,我将失去自定义功能。但是,如果我可以添加按钮,那么更新时我不会丢失任何更改...

如果有可能做到这一点,怎么办呢?创建一个插件?是否有任何教程可以指导我完成此插件的创建?

Answers:


10

这是使用插件的想法草案:

您需要创建一个系统插件(我不打算介绍)并使用event onBeforeRender。在内部,您可以看到工具栏的一个实例并附加按钮。

class PlgSystemCustomtoolbar extends JPlugin
{
    public function onBeforeRender()
    {
        // Get the application object
        $app = JFactory::getApplication();

        // Run in backend
        if ($app->isAdmin() === true)
        {
            // Get the input object
            $input = $app->input;

            // Append button just on Articles
            if ($input->getCmd('option') === 'com_content' && $input->getCmd('view', 'articles') === 'articles')
            {
                // Get an instance of the Toolbar
                $toolbar = JToolbar::getInstance('toolbar');

                // Add your custom button here
                $url = JRoute::_('index.php?option=com_example&task=massemail&format=raw');
                $toolbar->appendButton('Link', 'export', 'Mass Email', $url);
            }
        }
    }
}

大!它就像一个魅力!只是一个小问题:如何将所选项目传递给控制器​​?AFAIK,如果我使用标准的Joomla JS函数,它们将调用com_content控制器,不是吗?
mHouses

1
请问这个新问题。
Valentin Despa

4

以外部方式工作,您可以创建一个Administrator模块,一个editors-xtd插件或一个系统插件。在这两种情况下,执行代码时,都可以添加一些Javascript代码以将按钮插入所需的位置。

  • 管理员模块,它将显示在一个位置,例如menu。它可以向所有页面添加任何内容。
  • editors-xtd插件,它将仅在文本编辑器下方显示为按钮。它可以从您的组件中打开完整视图。
  • 系统插件,它可以执行任何操作,但是像前面的情况一样,它本身没有用户界面。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.