动态加载wordpress wp_editor(ajax)

动态加载wordpress wp_editor(ajax),第1张

动态加载wordpress wp_editor(ajax)

可能涉及黑客攻击,但是,我尝试将其最小化。

为了使wp_editor可以在动态html中工作(这意味着在不重新加载页面的情况下,js会更改页面结构),需要注意两个主要问题:

  1. TinyMce
  2. 快速标签

对于[tinymce]:

一个。需要正确重置UI

  • 解决方法是[删除mce实例]-> [获取正确的mce设置]-> [重新初始化新的mce实例]

  • 在js代码中(id表示textarea id):

        tinymce.execCommand('mceRemoveEditor', true, id);    var init = tinymce.extend( {}, tinyMCEPreInit.mceInit[ id ] );    try { tinymce.init( init ); } catch(e){}

b。提交前需要将数据写回textarea

  • 解决方案是[将单击绑定到按钮]->在submt上:: [关闭mce]-> [打开提交]
  • 在js代码中:
        jq('textarea[id="' + id + '"]').closest('form').find('input[type="submit"]').click(function(){        if( getUserSetting( 'editor' ) == 'tmce' ){ var id = mce.find( 'textarea' ).attr( 'id' ); tinymce.execCommand( 'mceRemoveEditor', false, id ); tinymce.execCommand( 'mceAddEditor', false, id );        }        return true;    });

对于[快速标记]:

一个。重新初始化标签

  • [获取设置]-> [设置鼠标事件]-> [重新初始化QTags]

b。切换到适当的标签(MCE标签或快速标签标签)

  • [切换到当前标签页模式]

  • 两者都在js代码中:

        if ( typeof(QTags) == 'function' ) {        jq( '[id="wp-' + id + '-wrap"]' ).unbind( 'onmousedown' );        jq( '[id="wp-' + id + '-wrap"]' ).bind( 'onmousedown', function(){ wpActiveEditor = id;        });        QTags( tinyMCEPreInit.qtInit[ id ] );        QTags._buttonsInit();        switchEditors.switchto( jq( 'textarea[id="' + id + '"]' ).closest( '.widget-mce' ).find( '.wp-switch-editor.switch-' + ( getUserSetting( 'editor' ) == 'html' ? 'html' : 'tmce' ) )[0] );    }

另外,请记住,如果您使用Ajax,则每次回传mce UI时,都需要在js中重新执行[reset mce
UI]和[Qtags]。一个简单的解决方案是在您发回html并在php中检测以下内容时使用js代码:

$isAjax = defined( 'DOING_AJAX' ) && DOING_AJAX == true );

关于js值的默认设置:

  1. mce:

    tinyMCEPreInit.mceInit

  2. qtags:

    tinyMCEPreInit.qtInit

如果尝试将默认设置用于小部件模式,则需要找到默认设置。

要获取小部件模板ID,请使用JS代码:

    function getTemplateWidgetId( id ){ var form = jQuery( 'textarea[id="' + id + '"]' ).closest( 'form' ); var id_base = form.find( 'input[name="id_base"]' ).val(); var widget_id = form.find( 'input[name="widget-id"]' ).val(); return id.replace( widget_id, id_base + '-__i__' );    }

因此,您可以通过以下方式获取设置:

  1. 对于mce:
        var init;    if( typeof tinyMCEPreInit.mceInit[ id ] == 'undefined' ){        init = tinyMCEPreInit.mceInit[ id ] = tinymce.extend( {}, tinyMCEPreInit.mceInit[ getTemplateWidgetId( id ) ] );    }else{        init = tinyMCEPreInit.mceInit[ id ];    }
  1. 对于Qtags:
        var qInit;    if( typeof tinyMCEPreInit.qtInit[ id ] == 'undefined' ){        qInit = tinyMCEPreInit.qtInit[ id ] = jq.extend( {}, tinyMCEPreInit.qtInit[ getTemplateWidgetId( id ) ] );        qInit['id'] = id;    }else{        qInit = tinyMCEPreInit.qtInit[ id ];    }

有关完整的代码示例,请检查:https :
//github.com/hezachary/wordpress-wysiwyg-
widget/blob/master/widget_wp_editor.class.php

如果有人想在菜单清单中使用wp_editor进行管理,则原理应相同。

如果您有任何疑问或更好的解决方案,请发表评论,谢谢。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5013299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存