web-dev-qa-db-fra.com

Comment puis-je ajouter un bouton de division ou une zone de liste à l'instance WordPress TinyMCE

J'ai ajouté un bouton personnalisé à la tinymce pour insérer mes codes abrégés, mais j'en ai beaucoup et je veux créer un splitbutton à la place et je ne peux pas comprendre comment. Tout le monde peut aider. Voici le code que j'ai utilisé pour créer le bouton normal:

dans functions.php:

/**
Hook into WordPress
*/

add_action('init', 'onehalf_button');  
/**
Create Our Initialization Function
*/

function onehalf_button() {

   if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') ) {
     return;
   }

   if ( get_user_option('rich_editing') == 'true' ) {
     add_filter( 'mce_external_plugins', 'add_plugin' );
     add_filter( 'mce_buttons', 'register_button' );
   }

}
/**
Register Button
*/

function register_button( $buttons ) {
 array_Push( $buttons, "|", "onehalf" );
 return $buttons;
}
/**
Register TinyMCE Plugin
*/

function add_plugin( $plugin_array ) {
   $plugin_array['onehalf'] = get_bloginfo( 'template_url' ) . '/js/tinymce_buttons.js';
   return $plugin_array;
}

et dans le plugin personnalisé .js

// JavaScript Document
(function() {
    tinymce.create('tinymce.plugins.onehalf', {
        init : function(ed, url) {
            ed.addButton('onehalf', {
                title : 'One Half Column',
                image : url+'/mylink.png',
                onclick : function() {
                     ed.selection.setContent('[one_half]' + ed.selection.getContent() + '[/one_half]');

                }
            });
        },
        createControl : function(n, cm) {
            return null;
        },
    });
    tinymce.PluginManager.add('onehalf', tinymce.plugins.onehalf);
})();

J'ai trouvé quelque chose ici http://tinymce.moxiecode.com/tryit/listbox_splitbutton.php mais je ne vois pas comment l'implémenter dans WP.

Quelqu'un peut aider? Merci.

5
Gina Alessia

Ce devrait être assez simple, copiez les morceaux de code pertinents de la page que vous avez liée dans votre plugin TinyMCE existant, mettez à jour quelques chaînes ... c'est fait! ..

Commencez par ceci pour votre plugin TinyMCE JS et voyez comment vous vous en sortez.

// JavaScript Document
(function() {
    // Creates a new plugin class and a custom listbox
    tinymce.create('tinymce.plugins.onehalf', {
        createControl: function(n, cm) {
            switch (n) {
                case 'onehalf':
                    var mlb = cm.createListBox('onehalf', {
                        title : 'My list box',
                        onselect : function(v) {
                            tinyMCE.activeEditor.windowManager.alert('Value selected:' + v);
                        }
                    });

                    // Add some values to the list box
                    mlb.add('Some item 1', 'val1');
                    mlb.add('some item 2', 'val2');
                    mlb.add('some item 3', 'val3');

                // Return the new listbox instance
                return mlb;

                /*
                case 'onehalf':
                var c = cm.createSplitButton('onehalf', {
                    title : 'My split button',
                    image : 'img/example.gif',
                    onclick : function() {
                        tinyMCE.activeEditor.windowManager.alert('Button was clicked.');
                    }
                });

                c.onRenderMenu.add(function(c, m) {
                    m.add({title : 'Some title', 'class' : 'mceMenuItemTitle'}).setDisabled(1);

                    m.add({title : 'Some item 1', onclick : function() {
                        tinyMCE.activeEditor.windowManager.alert('Some  item 1 was clicked.');
                    }});

                    m.add({title : 'Some item 2', onclick : function() {
                        tinyMCE.activeEditor.windowManager.alert('Some  item 2 was clicked.');
                    }});
                });

                // Return the new splitbutton instance
                return c;
                */
            }
            return null;
        }
    });
    tinymce.PluginManager.add('onehalf', tinymce.plugins.onehalf);
})();

Si quelque chose ne fonctionne pas, merci de faire un rapport avec autant d'informations que possible, par exemple. ce que vous avez essayé, quel a été le résultat, ce qui est arrivé, ce qui ne s'est pas passé, etc.

4
t31os

la réponse est géniale. Juste une note de côté: pour obtenir le chemin d'accès à l'image, ajoutez

init : function(ed, url) {
    theurl = url;
},

juste avant createControl: function... et maintenant vous pouvez l'utiliser dans

var c = cm.createSplitButton('onehalf', {
    title : 'My split button',
    image : theurl + '/theicon.png',
    onclick : function() {
           tinyMCE.activeEditor.windowManager.alert('Button was clicked.');
    }
});

En supposant que votre icône soit juste à côté du JavaScript pour le plugin TinyMCE.

4
Elliot