martes, octubre 05, 2010

Plugin "Insertar HTML" para FCKEditor

Hace ya bastante tiempo que utilizo el editor WYSIWYG FCKEditor y de siempre me ha parecido una herramienta excepcional. En este artículo voy a desarrollar un plugin que utilizo y que me ha venido muy bien para muchos proyectos. Este plugin es muy simple, un botón para que el usuario pueda pegar un HTML y que se inserte donde tenga puesto el cursor. La razón es que para usuarios no acostumbrados a HTML, explicarles que para, p.e. enlazar con un mapa de google, tienen que pulsar sobre el botón Fuente HTML y localizar la ubicación en el código HTML y pegar allí el código de Google Maps es, en muchos casos, imposible.

Puedes descargar los códigos de este post aquí.

1. El Objetivo
El objetivo es conseguir lo siguiente, un botón en el editor que al pulsarse muestre la ventana de insertar HTML:




2. Ficheros necesarios
Lo primero es conocer la estructura para crear un plugin para FCKEditor. En realidad es muy simple, necesitaremos crear una carpeta en el directorio /editor/plugins (en este caso insertarHtml es el nombre de la carpeta) del FCKEditor que contenga los siguientes ficheros:
  1. fckplugin.js: fichero javascript en el que se definen las propiedades del plugin: formato de la ventana a mostrar, icono, nombre del plugin, ...
  2. insertarHtml.png: imagen para el icono del botón en el FCKEditor.
  3. insertarHtml.php: página que se muestra al pulsar el botón. En este caso es PHP pero puede ser perfectamente HTML o ASPX o lo que se quiera.
Finalmente, necesitamos dar de alta el plugin en el fichero fckconfig.js que está en el directorio raiz del FCKEditor. Vamos a ir viendo paso a paso cada uno de los ficheros.

3. fckplugin.js
En este fichero se configuran los datos generales del plugin. Lo primero es registrar el comando:

FCKCommands.RegisterCommand( 'Insertar_Html', new FCKDialogCommand( 'Insertar código HTML', 'Insertar código HTML', FCKConfig.PluginsPath + 'insertarHtml/insertarHtml.php', 400, 400 ) ) ;

Indicamos qué página se abre en la nueva ventana, el tamaño de la ventana, el nombre que aparece en la ventana, etc. Lo siguiente es crear el botón:

var oHTMLItem        = new FCKToolbarButton( 'Insertar_Html', 'Insertar código HTML en la posición del cursor' ) ;
oHTMLItem.IconPath    = FCKConfig.PluginsPath + 'insertarHtml/insertarHtml.png' ;


y finalmente, registramos el elemento:

FCKToolbarItems.RegisterItem( 'Insertar_Html', oHTMLItem ) ;

4. insertarHtml.php
En el fichero insertarHtml.php es donde se genera la acción. Es la pantalla que se llama cuando el usuario pulsa sobre el botón. La página tiene una parte de presentación HTML y otra de código PHP. La primera parte es:


Es importante la parte inicial de javascript que es la que coge la referencia al FCKEditor que ha llamado a esta ventana. La parte de código es la que se ejecuta cuando se pulsa sobre el botón btnInsertar:


Lo que hacemos es generar el código javascript que inserta el código HTML en la posición del cursor y lo pasamos a la variable codigoJavascript, de la que se hace un echo en la parte HTML. Seguidamente, cerramos la ventana y volvemos a la pantalla del FCEditor.

5. fckconfig.js
Lo último es dar de alta el botón en la toolbar de nuestro FCKEditor y utilizarlo. Para ello tenemos que modificar el fichero fckconfig.js que se encuentra en el directorio raiz del FCKEditor. Lo primero que tenemos que hacer es añadir el plugin:

FCKConfig.Plugins.Add( 'insertarHtml' ) ;

y finalmente, incluir el comando en la toolbarset que estemos utilizando. Yo, p.e., he incluido el botón en la toolbarset default, al final:

FCKConfig.ToolbarSets["Default"] = [
    ['Source','DocProps','-','Preview','-','Templates'],
    ['Cut','Copy','Paste','PasteText','PasteWord','-','Print'],
    ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
    '/',
    ['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
    ['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote','CreateDiv'],
    ['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
    ['Link','Unlink','Anchor'],
    ['Image','Flash','Table','Rule','Smiley','SpecialChar'],
    '/',
    ['FontFormat','FontSize'],
    ['TextColor','BGColor'],
    ['FitWindow','ShowBlocks','-','Insertar_Html']
];

6. Conclusión
Este plugin es muy sencillo pero muy útil para aquellos proyectos en los que el usuario del FCKEditor no tiene conocimientos de HTML pero quiere incluir código de otras webs como pueden ser VIMEO, YouTube, Google Maps, Facebook. Cada día es más normal enlazar HTML en nuestras páginas y este plugin nos facilita la tarea.

Ejemplo: copio la localización de mi pueblo en google maps en la pantalla del plugin:

Al pulsar sobre Insertar HTML, se inserta el código donde tengo colocado el cursor:



Espero que os haya gustado este artículo. En breve más...



6 comentarios:

Anónimo dijo...

HOLA MIRA HE SEGUIFDO LOS PASOS COMO INDICAS PARA AGREGAR EL PLUGING PERO NO ME MUESTRA NADA Q PUEDE SER???

Anónimo dijo...

HOLA ESTA MUY EXELENTU TU PLUGIN, DIME PODRIAS GENERAR LO SIGUIENTE, COMO SABRAS EL FCKEDITOR PUEDE AGREGAR IMAGNES PERO ESO DE SUBIR EL SERVIDOR ES MUY BIEN PERO SERIA MEJOR SI SE PUDIERA EMBEBER LA IMAGEN PODRIAS PUBLICXAR ALGO ASI

Anónimo dijo...

Hola
Gracias por el plugin, sería genial que me funcionase.
El botón aparece y se abre la ventana al clicarle, pero al dale al botón de Insertar, no hace nada...
Alguan idea de por qué?
Dónde va la parte de código php donde se declara la clase puglinHtml?
Agradecería si alguien pudiese ayudarme.
Gracias y un saludo

Manuel Cardenas Thorlund dijo...

Buenas,
la parte de código php va en el fichero insertarHtml.php al que se llama al pulsar sobre el botón. Para que funcione correctamente tienes que tener el cursor posicionado en el sitio en el que quieras que se introduzca el código HTML.

Ten en cuenta que los ficheros que tienen que estar dentro de la carpeta del plugin son:

- fckplugin.js: definición del plugin para el fckeditor
- insertarHtml.php: pantalla que se muestra al pulsar el botón con el código asociado
- insertarHtml.png: miniatura para el botón.

Espero que te sirva de ayuda

Anónimo dijo...

Gracias Manuel por tu respuesta y rapidez!
Sí, el código php lo tengo dentro de insertarHtml.php. He probado a ponerlo al principio, al final, antes del javascript, después... por probar!. Pero nada. Es como si se recargase la ventana de Insertar Html, se borra el código que he metido en el textarea y se mantiene abierta. Y en el FCK no se carga ningún código. Y sí le posiciono el cursor en el texto...
Es una faena que no consiga hacerlo funcionar del todo, una vez visto que se puede hacer...
Gracias y un saludo

Anónimo dijo...

Hola!

Ya me funciona, pero he modificado el código y lo hago directamente con javascript, pasando de la clase php:

'...
function SaveHtml() {
var html=document.forms.formu.txtHtml.value;
oEditor.FCK.InsertHtml(html);
window.parent.Cancel();
}
...'

cambiando el botón:

'... type="button" name="btnInsertar" value="Insert HTML" onclick="SaveHtml();" ...'

En Firefox funciona a la perfección y en IE salta un warning diciendo que 'window.opener.FCK es nulo o no es un objeto' pero después sí funciona. Intentaré quitarlo.

Un saludo