web-dev-qa-db-ja.com

機能クイックタグ

マークアップを追加するだけでなく、クイックタグを追加したいと思います。たとえば、ページコンテンツにjs正規表現を適用する機能を実行するためのクイックタグを追加したいと思います。関数を実行するクイックタグを追加するにはどうすればいいですか?

具体的な例として、投稿テキスト全体のすべてのマークアップタグを削除するボタンを追加します。これは、一致しないタグを見つけるための定義済みのクイックタグ、つまり「校正」などに似ています。

1
dkretz

クリックされるとJavascript関数を呼び出すQuicktagボタンを追加する簡単な例...

<?PHP
function _add_my_quicktags(){ ?>
    <script type="text/javascript">
    QTags.addButton( 'alert', 'Alert Button', simple_alert );

        function simple_alert() { 
            alert('hello, example callback function');
        }
    </script>
<?php 
}
add_action('admin_print_footer_scripts',  '_add_my_quicktags');
?>

UPDATE ....渡された変数を利用するコールバック関数を追加しています...

    // Add a button called 'abbr' with a callback function
    QTags.addButton( 'abbr', 'Abbr', abbr_Prompt );
    // and this is the callback function
    function abbr_Prompt(e, c, ed) {
        var prmt, t = this;
        if ( ed.canvas.selectionStart !== ed.canvas.selectionEnd ) {
            // if we have a selection in the editor define out tagStart and tagEnd to wrap around the text
            // Prompt the user for the abbreviation and return gracefully on a null input
            prmt = Prompt('Enter Abbreviation');
            if ( prmt === null ) return;
            t.tagStart = '<abbr title="' + prmt + '">';
            t.tagEnd = '</abbr>';
        } else if ( ed.openTags ) {
            // if we have an open tag, see if it's ours
            var ret = false, i = 0, t = this;
            while ( i < ed.openTags.length ) {
                ret = ed.openTags[i] == t.id ? i : false;
                i ++;
            }
            if ( ret === false ) {
                // if the open tags don't include 'abbr' Prompt for input
                prmt = Prompt('Enter Abbreviation');
                if ( prmt === null ) return;
                t.tagStart = '<abbr title="' + prmt + '">';
                t.tagEnd = false;
                if ( ! ed.openTags ) {
                    ed.openTags = [];
                }
                ed.openTags.Push(t.id);
                e.value = '/' + e.value;
            } else {
                // otherwise close the 'abbr' tag
                ed.openTags.splice(ret, 1);
                t.tagStart = '</abbr>';
                e.value = t.display;
            }
        } else {
            // last resort, no selection and no open tags
            // so Prompt for input and just open the tag
            prmt = Prompt('Enter Abbreviation');
            if ( prmt === null ) return;
            t.tagStart = '<abbr title="' + prmt + '">';
            t.tagEnd = false;
            if ( ! ed.openTags ) {
                ed.openTags = [];
            }
            ed.openTags.Push(t.id);
            e.value = '/' + e.value;
        }
        // now we've defined all the tagStart, tagEnd and openTags we process it all to the active window
        QTags.TagButton.prototype.callback.call(t, e, c, ed);
    };
2
JasonDavis

あなたはtinymceプラグインを書き、それからそれをロードするべきです(tinymce高度なプラグインを使用して)

0
boyska