Navigation

Related Articles

Back to Latest Articles

FCKeditor dans l’admin generator (Symfony 1.2, Doctrine)


Samuel Breton
FCKeditor dans l’admin generator...

Mise en place d’un « éditeur de texte riche » (FCKeditor) dans l’admin generator d’un projet Symfony 1.2 (Doctrine)

Pré-requis :

Intégrer FCK

Créer un nouveau widget pour sfFormExtraPlugin

Créer ce fichier :

/plugin/sfFormExtraPlugin/lib/widget/sfWidgetFormTextareaFCK.class.php

<?php
/**
    * FCK Form widget
    *
    * @package    ***
    * @subpackage lib
    * @author     $LastChangedBy: PoWl $
    * @version    SVN: $Id: sfWidgetFormTextareaFCK.class.php 81 2008-12-08 00:39:59Z PoWl $
    */
 
class sfWidgetFormTextareaFCK extends sfWidgetFormTextarea
{
    /**
        * @param array $options     An array of options
        * @param array $attributes  An array of default HTML attributes
        *
        * @see sfWidgetForm
        */
    protected function configure ($options = array(), $attributes = array())
    {
        $this->addOption ('editor', 'fck');
        $this->addOption ('css', false);
 
        parent::configure ($options, $attributes);
    }
 
    /**
        * @param  string $name        The element name
        * @param  string $value       The value displayed in this widget
        * @param  array  $attributes  An array of HTML attributes to be merged with the default HTML attributes
        * @param  array  $errors      An array of errors for the field
        *
        * @return string An HTML tag string
        *
        * @see sfWidgetForm
        */
    public function render ($name, $value = null, $attributes = array(), $errors = array())
    {
        $editorClass = 'sfRichTextEditorFCK';
        if (!class_exists ($editorClass)) {
            throw new sfConfigurationException (sprintf ('The rich text editor "%s" does not exist.', $editorClass));
        }
 
        $editor = new $editorClass ();
        if (!in_array ('sfRichTextEditor', class_parents ($editor))) {
            throw new sfConfigurationException (sprintf ('The editor "%s" must extend sfRichTextEditor.', $editor));
        }
 
        $attributes = array_merge ($this->attributes, $this->getOptions ());
        $editor->initialize ($name, $value, $attributes);
        return $editor->toHTML ();
    }
}
?>

J’ai fait trois modifications dans le fichier proposé par le site dont je donne le lien plus haut :

  1. Ligne 1 : Attention au cas ou le short tag n’est pas activé
  2. Standardisation du nom de la classe (sfWidgetFormTextareaFCK)
  3. Ligne 49 : Il faut modifier cette ligne pour pouvoir passer des attributs HTML par defaut au widget:
     $attributes = array_merge ($this->attributes, $this->getOptions ());

Utilisation

Modifier le formulaire de Contenu :

/lib/form/doctrine/ContenuForm.class.php

$this->widgetSchema['html'] = new sfWidgetFormTextareaFCK(
  array(),
  array('height'=>'700','width'=>'800'
));
     ...

Configurer l’upload de fichiers

Remplacer le fichier situé dans :

/web/js/fckeditor/editor/filemanager/connectors/php/config.php

Par celui-là :

http://trac.symfony-project.org/attachment/wiki/HowToUseFCKeditor/config.new

    Il y a 2 lignes importantes :

  1. UserFilesPath
    $Config['UserFilesPath'] = DIRECTORY_SEPARATOR . 'userfiles' . DIRECTORY_SEPARATOR ;

    que l’on transforme comme ceci :

    $Config['UserFilesPath'] = /uploads/fck/ ;
  2. UserFilesAbsolutePath
    $Config['UserFilesAbsolutePath'] = $_SERVER[DOCUMENT_ROOT] . $Config['UserFilesPath'] ;

    Qu’il vous faut éventuellement modifier si la racine de votre projet n’est pas la même que celle de votre serveur:

    $Config['UserFilesAbsolutePath'] = $_SERVER[DOCUMENT_ROOT] . /myProject/ . $Config['UserFilesPath'] ;


Sources :

Show Comments (10)

Comments

  • thomas

    pour gagner un peu de place on peut enlever quelques répertoires inutiles dans le fckeditor:
    _samples/ qui sont des exemples d’utilisation
    editor/_sources du codes sources
    editor/filemanager/connectors/ les repertoires des langages que l’on n’utilise pas: tout sauf PHP

    • Article Author
  • Joffrey

    Salut,

    Moi j’ai un problème avec fck, il ne récupère pas le contenu en post et donc ne met pas à jour ma base alors qu’en textarea classique ça fonctionne.
    Une petite idée SVP?

    • Article Author
  • thomas

    @Joffrey

    Bonjour Joffrey,

    le seul problème que je vois, c’est s’il y a une différence entre ton schema et le code suivant:

    $this->widgetSchema[‘html’] = new sfWidgetFormTextareaFCK(
    array(),
    array(‘height’=>’700′,’width’=>’800’
    ));

    Vérifie bien que dans $this->widgetSchema[‘html’] ‘html’ est bien le nom de ton champs ou change $this->widgetSchema[‘tonChamps’]

    • Article Author
  • ba

    Merci pour ces explications !!

    Cette solution permet-elle de configurer un Rich Text FCKeditor directement le fichier generator.yml ?

    J’ai essayé un
    edit:
    fields:
    monchamp: {params: rich=fck}

    mais ça ne fonctionne pas ?

    Merci d’avance

    • Article Author
  • shakir

    comment utiliser cette methode dans le backend (admin generator)??

    • Article Author
  • nico

    Il me dit qu’il ne trouve pas la class sfRichTextEditorFCK :

    The rich text editor « sfRichTextEditorFCK » does not exist.

    En effet je la trouve pas dans mon projet, comment est elle inclue ?

    Merci

    • Article Author
  • nico

    Il me dit qu’il ne trouve pas la class sfRichTextEditorFCK :

    The rich text editor "sfRichTextEditorFCK" does not exist.

    En effet je la trouve pas dans mon projet, comment est elle inclue ?

    Merci

    • Article Author
  • Nicolas

    nico : j’ai exactement le même problème : as-tu trouvé la solution à ton problème ?

    • Article Author
  • Nicolas

    Problème résolu (pour les utilisateurs de symfony 1.4) :
    Dans la version 1.4 de symfony, la classe « sfRichTextEditorFCK » n’existe plus il faut donc la récupérer dans la branch 1.3 et l’inclure dans le projet et embarquer également la classe qu’elle étend.

    A récupérer donc :

    – sfRichTextEditor.class.php (http://trac.symfony-project.org/browser/branches/1.3/lib/helper/sfRichTextEditor.class.php)

    – sfRichTextEditorFCK.class.php (http://trac.symfony-project.org/browser/branches/1.3/lib/helper/sfRichTextEditorFCK.class.php)

    Les deux fichiers dans PROJET/lib/helper et le tour est joué.

    • Article Author
  • nico

    Merci ça marche. Par contre pourquoi ne retrouve t on pas ces fichiers dans la 1.4 ?

    • Article Author

Recevez nos articles