使用可用的WP参数更改TinyMCE编辑器的背景

时间:2013-07-12 作者:David Gard

我正在插件表单中使用TinyMCE编辑器的一个实例,如果字段填写不正确,我需要突出显示编辑器(浅红色背景)。

如果我的代码评估编辑器未按要求填写,我可以添加自定义类“error”,但添加该类只会影响“Text”模式的背景,而不会影响“Visual”模式。

有没有一种方法可以通过WP选项来实现这一点?谢谢

下面是我如何声明编辑器-

/** Set up the editor arguments */
$wp_editor_args = array(
    \'media_buttons\' => false,
    \'textarea_rows\' => 10
);

/** Check to see if this editor is in error */
$is_error = $this->is_error_field(\'description\');
if($is_error) :
    $wp_editor_args[\'editor_class\'] = \'error\';
    print("\\t\\t\\t\\t".\'<label class="error custom-editor">Please enter an event description (minimum of 50 characters)</label>\'."\\n");
endif;

/** Add the editor */
wp_editor($this->options_event[\'description\'], \'description\', $wp_editor_args);
这是我正在使用的CSS,以防有人好奇-

.dd-options .single-option input.error,
.dd-options .single-option textarea.error{
    background-color: #FFEBE8;
    border-color: red;
}
下面是我尝试过的(JS由@Kaiser建议)-

/**
 * PHP
 */
add_filter(\'tiny_mce_before_init\', \'initiate_tinyMCE_wordcount\');
function initiate_tinyMCE_wordcount($initArray){

    $initArray[\'setup\'] = <<<JS
[function(ed){
    setupcontent_callback : "myCustomSetupContent()";
}][0]
JS;

    return $initArray;

}

/**
 * JS
 */
function myCustomSetupContent() {
    tinyMCE.getInstanceById(\'description\')
        .getWin()
        .document.body.style.backgroundColor = \'#FFEBE8\';
}

2 个回复
最合适的回答,由SO网友:David Gard 整理而成

这就是我实现目标的方式-

过滤器\'tiny_mce_before_init\' 用于更新编辑器的设置,因此您可以将自己的JS添加到\'setup\' 钥匙

add_filter(\'tiny_mce_before_init\', \'initiate_tinyMCE_wordcount\');
function initiate_tinyMCE_wordcount($initArray){

    $initArray[\'setup\'] = <<<JS
[function(ed){

    ed.onLoad.add(function(ed, e){

        var tb_name = tinyMCE.activeEditor.id; // The ID of the active editor

        /** Check to see if the text editor (not the TinyMCE iframe) has the class \'error\' */
        if($(\'#\'+tb_name).hasClass(\'error\')){
            tinyMCE.activeEditor // Thanks fot @Kaiser for this bit
                .getWin()
                .document.body.style.backgroundColor = \'#FFEBE8\';
        }

    });

    return $initArray;

}

SO网友:kaiser

似乎有几种方法可以做到这一点Google foo):

通过JS:

function myCustomSetupContent() {
    tinyMCE.getInstanceById( \'mce_editor_0\' )
        .getWin()
        .document.body.style.backgroundColor = \'#000000\';
}
tinyMCE.init( {

    setupcontent_callback : "myCustomSetupContent()"
} );
通过CSS和;JS(&A);jQuery:

function myCustomSetupContent( editor_id, body, doc ) {
       $( body ).css( \'background\',\'your_color\' );
}
tinyMCE.init( {
    setupcontent_callback : "myCustomSetupContent"
} );
如果在IE中不起作用,请使用超时:

setTimeout(
        "document.getElementById( \'TinyMCE_ID_you_need_to_change_that_here\' )
        .contentWindow.document.body.style.backgroundColor = \'#000000\'; ",
    100
);

结束