Joomla 3.6中编辑器插件的onSave方法

时间:2016-12-15 07:51:56

标签: php joomla editor joomla3.6

我尝试创建一个插件,在编辑器中创建文章后会显示一些文本。

/editors/materialwords/materialwords.xml:

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.1" type="plugin" group="editors">
    <name>Editor Material Words Count Plugin</name>
    <creationDate>December 2016</creationDate>
    <author>Aleksandr Lapenko</author>
    <authorEmail>lapenkoak@gmail.com</authorEmail>
    <authorUrl>vk.com/web_rider</authorUrl>
    <copyright>Copyright</copyright>
    <license>GNU General Public License version 2 or later; see LICENSE.txt</license>
    <version>1.0.0</version>
    <description>Calculate articles words count</description>
    <files>
        <filename plugin="materialwords">materialwords.php</filename>
    </files>
    <config>
        <fields name="params">
            <fieldset name="basic">
                <field name="displayCount" type="text"
                       label="Display Count"
                       description="Words display count"
                       required="true"
                       size="10"
                       class="inputbox" />
            </fieldset>
        </fields>
    </config>
</extension>

/editors/materialwords/materialwords.php:

<?php
defined('_JEXEC') or die;

class PlgEditorMaterialwords extends JPlugin
{
    public function onSave($id)
    {
        return 'alert("' . $id . '");';
    }
}

我安装插件并启用它。但是有些错误(当我在编辑器中保存文章时没有任何内容) 请帮忙。 最好的问候,亚历山大。

2 个答案:

答案 0 :(得分:0)

实际上编辑插件是你可以在joomla后台使用的编辑器类型,如果你进入后台的系统配置,对于默认编辑器,你可以选择你的插件,因为它是一个编辑器插件。

如果要在保存文章后执行某些操作,则必须使用onContentAfterSave()方法编写内容插件。这个方法有3个参数:

  1. $ context,在你的情况下它应该是com_content.article,所以在把所有其他东西都测试之前测试它
  2. $ article,您要保存的文章的实例
  3. $ isNew,一个布尔值,如果是新文章则为true,如果是udpate则为false
  4. 插件代码

    class PlgContentMaterialwords extends JPlugin {
    
        public function onContentAfterSave($context, $article, $isNew){
    
            if ($context != 'com_content.content'){
                return true;
            }
    
            // do stuff
    
        }
    
    }
    

    插件声明

    <?xml version="1.0" encoding="utf-8"?>
    <extension version="3.1" type="plugin" group="content">
        <name>Editor Material Words Count Plugin</name>
        <creationDate>December 2016</creationDate>
        <author>Aleksandr Lapenko</author>
        <authorEmail>lapenkoak@gmail.com</authorEmail>
        <authorUrl>vk.com/web_rider</authorUrl>
        <copyright>Copyright</copyright>
        <license>GNU General Public License version 2 or later; see LICENSE.txt</license>
        <version>1.0.0</version>
        <description>Calculate articles words count</description>
        <files>
            <filename plugin="materialwords">materialwords.php</filename>
        </files>
        <config>
            <fields name="params">
                <fieldset name="basic">
                    <field name="displayCount" type="text"
                           label="Display Count"
                           description="Words display count"
                           required="true"
                           size="10"
                           class="inputbox" />
                </fieldset>
            </fields>
        </config>
    </extension>
    

    要在javascript中覆盖保存的插件

    使用以前的方法,您无法在此页面中添加javascript。如果你想这样做,你必须添加一个onBeforeRender方法。单击管理按钮时,会调用javascript方法Joomla.submitbutton,因此您可以覆盖它(请先保存它,以便在处理后调用它)。

    class PlgContentMaterialwords extends JPlugin
    {
        public function onBeforeRender()
        {
    
            if ( JFactory::getApplication()->isAdmin() ){
    
                $document = JFactory::getDocument();
                $document->addScriptDeclaration('
                    var Myvar = {};
                    Myvar.submitbutton = Joomla.submitbutton;
                    Joomla.submitbutton = function(task) {
                        if ( task == "article.save" || task == "article.apply" || task == "article.save2new" ){
                            alert("foo");
    
                        }
                        Myvar.submitbutton(task);
                    }
                ');
    
            }
    
        }
    }
    

答案 1 :(得分:0)

如果您想在保存之前或保存事件之后插入插件

  1. onExtensionBeforeSave

  2. onExtensionAfterSave