After looking around for a bit and some experimenting, I created a dropdown plugin based on the Format plugin, with some help from the code from kuba http://cksource.com/forums/viewtopic.php?f=11&t=15910&p=40520&hilit=plugin+richcombo+plugin#p40520. I wanted to post it here so that it might be of aid to others who need to create a similiar plugin. The text is in French, but that shouldn't hinder the comprehension.
The plugin is called 'Fusion', so there's a /plugins/fusion/ folder with a plugin.js file which looks like this:
CKEDITOR.plugins.add('fusion', { requires: ['richcombo', 'styles'], init: function (editor) { var config = editor.config, lang = editor.lang.fusion, tags = editor.config.fusion_tags.split(';'); var elements = []; for (var i = 0; i < tags.length; i++) { var tag_name = tags[i]; elements[tag_name] = new CKEDITOR.style(config['fusion_' + tag_name]); } editor.ui.addRichCombo('Fusion', { label: lang.label, title: lang.panelTitle, voiceLabel: lang.voiceLabel, className: 'cke_format', multiSelect: false, panel: { css: [config.contentsCss, CKEDITOR.getUrl(editor.skinPath + 'editor.css')], voiceLabel: lang.panelVoiceLabel }, init: function () { this.startGroup(lang.panelTitle); for (var tag in elements) { // small problem here, we also loop through the object properties var label = lang['tag_' + tag]; var placeholder = elements[tag].element; if (label != undefined){ // so we check this.add('##' + placeholder + '##', label, label); } } }, onClick: function (value) { editor.focus(); editor.fire('saveSnapshot'); editor.insertHtml(value); editor.fire('saveSnapshot'); }, onRender: function () { editor.on('selectionChange', function (h) { var i = this.getValue(), j = h.data.path; for (var k in e) if (e[k].checkActive(j)) { if (k != i) this.setValue(k, editor.lang.fusion['tag_' + k]); return; } this.setValue(''); }, this); } }); } }); CKEDITOR.config.fusion_tags = 'civilite;raison_social;prenom;cle_identite;adresse;adresse1;adresse2;adresse3;code_postal;cedex;commune;pays;telephone;fax;mail;portable;siret;siren;evv;cvi;ppm;num_echantions;tva;vinificateur;embouteilleur;negociant;nom_ou_rs;nom_ou_rs_libelle;siret_ou_cvi;siren_ou_cvi;date_du_jour'; CKEDITOR.config.fusion_civilite = { element: '.civilite' }; CKEDITOR.config.fusion_raison_social = { element: '.rs' }; CKEDITOR.config.fusion_prenom = { element: '.prenom' }; CKEDITOR.config.fusion_cle_identite = { element: '.cle_identite' }; CKEDITOR.config.fusion_adresse = { element: '.adresse' }; CKEDITOR.config.fusion_adresse1 = { element: '.adresse1' }; CKEDITOR.config.fusion_adresse2 = { element: '.adresse2' }; CKEDITOR.config.fusion_adresse3 = { element: '.adresse3' }; CKEDITOR.config.fusion_code_postal = { element: '.cp' }; CKEDITOR.config.fusion_cedex = { element: '.cedex' }; CKEDITOR.config.fusion_commune = { element: '.commune' }; CKEDITOR.config.fusion_pays = { element: '.pays' }; CKEDITOR.config.fusion_telephone = { element: '.tel' }; CKEDITOR.config.fusion_fax = { element: '.fax' }; CKEDITOR.config.fusion_mail = { element: '.mail' }; CKEDITOR.config.fusion_portable = { element: '.portable' }; CKEDITOR.config.fusion_siret = { element: '.siret' }; CKEDITOR.config.fusion_siren = { element: '.siren' }; CKEDITOR.config.fusion_evv = { element: '.evv' }; CKEDITOR.config.fusion_cvi = { element: '.cvi' }; CKEDITOR.config.fusion_ppm = { element: '.numppm' }; CKEDITOR.config.fusion_num_echantions = { element: '.num_echantions' }; CKEDITOR.config.fusion_tva = { element: '.tva' }; CKEDITOR.config.fusion_vinificateur = { element: '.isvinificateur' }; CKEDITOR.config.fusion_embouteilleur = { element: '.isembouteilleur' }; CKEDITOR.config.fusion_negociant = { element: '.isnegoc' }; CKEDITOR.config.fusion_nom_ou_rs = { element: '.nomlibelle' }; CKEDITOR.config.fusion_nom_ou_rs_libelle = { element: '.nomorrswithlibelle' }; CKEDITOR.config.fusion_siret_ou_cvi = { element: '.sirenorcvi' }; CKEDITOR.config.fusion_siren_ou_cvi = { element: '.siretorcvi' }; CKEDITOR.config.fusion_date_du_jour = { element: '.datedujour' };