En symfony podemos utilizar fácilmente TinyMCE en un textarea gracias al plugin sfFormExtraPlugin. Una vez instalado el plugin con
symfony plugin:install sfFormExtraPlugin
debemos recordar bajar también el paquete de TinyMCE y descomprimirlo en web/js. En mi caso, lo he dejado en web/js/tiny_mce, por lo que, a continuación, he modificado el archivo view.yml de mi aplicación, específicamente la línea
javascript: [ tiny_mce/tiny_mce.js ]
para cargar TinyMCE en todas mis páginas. Si no quisiera cargarlo en todas, modificaríamos el view.yml del módulo en particular donde lo queremos utilizar. Debemos recordar, así mismo, modificar el settings.yml de nuestra aplicación para indicar dónde se encuentra:
rich_text_js_dir: js/tiny_mce
Para utilizar el textarea con TinyMCE, sólo debemos declarar el widget correspondiente de la siguiente forma:
$this->widgetSchema['entradilla'] = new sfWidgetFormTextareaTinyMCE(
array(
'config' => sfConfig::get('app_tiny_mce_simple')
));
Lo que he hecho, en este caso, es llamar a sfWidgetFormTextareaTinyMCE con la configuración almacenada en el app.yml de nuestra aplicación, donde me he definido la variable global app_tiny_mce_simple, que contiene lo siguiente:
tiny_mce_simple: |
width: "550px",
height: "200px",
language: "es",
relative_urls: false,
convert_urls: false,
plugins: "preview, paste, advlink, fullscreen",
theme_advanced_buttons1: "bold, italic, underline, separator, justifyleft, justifycenter, justifyright, justifyfull, separator, outdent, indent, separator, pastetext, pasteword, separator, link, bullist, numlist, separator, undo, redo, selectall, separator, preview, code, fullscreen",
theme_advanced_buttons2: "",
theme_advanced_buttons3: "",
plugin_preview_width: "500",
plugin_preview_height: "600",
fullscreen_new_window: true,
theme_advanced_resize_horizontal: false,
paste_auto_cleanup_on_paste: true,
Como véis, lo íºnico que hemos hecho ha sido pasar los parámetros de configuración a TinyMCE.
El problema viene cuando queremos utilizar dos textareas con TinyMCE en el mismo formulario. De momento, en la versión 1.2.4 de Symfony, hay un pequeño “bug” (si podemos llegar a llamarlo así), ya que al usar dos TinyMCE se pierden los ids. La solución es muy sencilla: añadir a la configuración de TinyMCE los parámetros elements con el id y mode con “exact”, como en este ejemplo:
$this->widgetSchema['entradilla'] = new sfWidgetFormTextareaTinyMCE(
array(
'config' => sfConfig::get('app_tiny_mce_simple'). ' elements: "noticia_entradilla", mode: "exact"'
));
Ya podemos utilizar todos los textareas que queramos con TinyMCE, sólo tenemos que recordar cambiar “elements” por el id correspondiente.