IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Gérer l'enregistrement de Thumbnails (miniatures) dans l'admin generator [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut Gérer l'enregistrement de Thumbnails (miniatures) dans l'admin generator
    Bonjour à tous,

    Je suis actuellement en train de créer le panneau d'administration d'un site web, avec l'admin-generator de symfony 1.2.x.

    J'ai notamment un panneau pour les "personnes" qui enregistre un bon nombre de données personnelles, ainsi qu'une photo.

    Pour gérer l'upload de fichier de ce champ, j'ai modifié le formulaire associé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    class PersonneForm extends BasePersonneForm
    {
      public function configure()
      {
      	$years = range(1920, date("Y"));
      	$this->widgetSchema['date_naissance']->setOption('years', array_combine($years, $years));
     
      	$this->validatorSchema['url_photo'] = new sfValidatorFile(array(
      		'required'   => false,
      		'path'       => sfConfig::get('sf_upload_dir').'/photos',
      		'mime_types' => 'web_images',
    	));
     
      	$this->widgetSchema['url_photo'] = new sfWidgetFormInputFileEditable(array(
          'label'     => 'Upload photo',
          'file_src'  => '/uploads/photos/'.$this->getObject()->getUrlPhoto(),
      	  'with_delete' => true,
          'is_image'  => true,
          'edit_mode' => !$this->isNew(),
          'template'  => '<div>%file% <br />%input%<br />%delete% %delete_label%</div>'
        ));
     
        $this->validatorSchema['url_photo_delete'] = new sfValidatorPass();
     
      }
    }
    Le problème est que j'ai testé ce formulaire avec une image prise au hasard dans mes dossiers : cela à entrainé un affichage sur un écran entier de l'image.

    Vu que les autres pages utilisant ces photos d'identité n'ont besoin que d'une version "petit format" de ces photos, je me suis dit qu'il fallait que j'enregistre une version miniature de celle ci.

    Quelqu'un a t-il une idée de comment faire cela ?

    PS : J'essaie d'utiliser le sfThumbnailPlugin.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Par défaut
    Bonjour,

    Pour ma part je devais également créer à partir d'une image que l'utilisateur incorporait via l'admin, une image en miniature !

    J'ai utilisé sfThumbnailPlugin et ça marche très bien !
    Si tu as des soucis, n'hésite pas, j'ai réussi à la mettre en place!

    Bon courage !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut
    Merci de ta réponse cacahuete85
    Ce que je voudrais savoir en fait, c'est comment le mettre en place.
    Faut-il redéfinir les actions Update et autres ?
    A quel moment peut-on, en fait, faire des actions comme celles-ci pendant la validation du formulaire ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Par défaut
    Je te renvoie sur un tutoriel qui m'a beaucoup aidé !
    En route vers le tuto ... =)
    Je pense que ce sera plus simple pour toi !
    Si vraiment tu ne comprend pas, n'hésite pas à poser tes questions ici !
    Bon courage

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut
    Merci pour le lien.
    J'ai essayé mais j'ai des problèmes.

    Tout d'abord, Symfony 1.2 est bien différent de Symfony 1.0 pour l'admin generator et les formulaires. Ainsi, le "admin_input_file_tag" ne fonctionne pas du tout sous 1.2.x

    Ensuite, lorsque j'essaie d'appeler la méthode parent::setUrlPhoto() (équivalent de setFilePath()), le navigateur semble arrêter l'execution du code et j'ai une page blanche.

    Voici mon code dans Personne.class.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    //SETTER : Thumbnail maker
    	public function setUrlPhoto($newVal)
    	{
    		sfContext::getInstance()->getLogger()->info('TEST - '.$newVal);
     		parent::setUrlPhoto($newVal);
     
     		$this->generateThumbnail($newVal);
    	}
     
    	public function generateThumbnail($newVal)
    	{
     		parent::setUrlPhoto($newVal);
     		$uploadDir = sfConfig::get('sf_upload_dir');
     		$thumbnail = new sfThumbnail(150, 150);
     		$thumbnail->loadFile($uploadDir.'/'.$this->getUrlPhoto());
     		sfContext::getInstance()->getLogger()->info('THUMBPATH - '.$uploadDir.'/thumbnail/'.$this->getUrlPhoto());
     		$thumbnail->save($uploadDir.'/thumbnail/'.$this->getUrlPhoto(), 'image/png');
    	}
    En regardant les logs que je me suis créés, je remarque que la ligne : "TEST - ..." est répétée au moins une dizaine de fois.

    Comme je le disais plus haut, j'utilise Symfony 1.2 et il faut modifier le formulaire associé à une classe pour qu'il s'adapte dans le panneau d'admin. Ainsi, j'ai ce code ci dans PersonneForm.class.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    class PersonneForm extends BasePersonneForm
    {
      public function configure()
      {
      	$years = range(1920, date("Y"));
      	$this->widgetSchema['date_naissance']->setOption('years', array_combine($years, $years));
     
      	$this->validatorSchema['url_photo'] = new sfValidatorFile(array(
      		'required'   => false,
      		'path'       => sfConfig::get('sf_upload_dir').'/photos',
      		'mime_types' => 'web_images',
    	));
     
      	$this->widgetSchema['url_photo'] = new sfWidgetFormInputFileEditable(array(
          'label'     => 'Upload photo',
          'file_src'  => '/uploads/photos/'.$this->getObject()->getUrlPhoto(),
      	  'with_delete' => true,
          'is_image'  => true,
          'edit_mode' => !$this->isNew(),
          'template'  => '<div>%file% <br />%input%<br />%delete% %delete_label%</div>'
        ));
     
        $this->validatorSchema['url_photo_delete'] = new sfValidatorPass();
     
      }
    }
    Peut être y a t-il un conflit entre redéfinition du set et validator de fichier ?
    Je ne sais pas mais en tout cas, je ne peux pas appeler parent::setUrlPhoto() dans ma classe Personne sans que ça arrête l'execution

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Par défaut
    Bonjour,

    Alors j'ai regardé ce que tu as fait par rapport à moi et visiblement nous avons la "même chose" , euh par contre moi j'ai fait :
    //dans lib/model/boutique.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    class Boutique extends BaseBoutique
    {
        public function __toString()
        {
            return $this->getNom();
        }
        public function setLogo($v)
        {
            parent::setLogo($v); // Il faut surement que tu le mettes avant !! 
            $this->generateThumbnail($v);
        }
        public function generateThumbnail($v)
        {
            parent::setLogo($v);
            $imageDir = sfConfig::get('sf_web_dir');
            $thumbnail = new sfThumbnail(150, 150, true, true,  75, 'sfImageMagickAdapter', array('method' => 'shave_all'));
            $thumbnail->loadFile($imageDir.'/images/boutique/'.$this->getLogo());
            $thumbnail->save($imageDir.'/images/boutique_min150x150/'.$this->getLogo(), 'image/jpg');
     
            $thumbnail2 = new sfThumbnail(250, 160, true, true,  75, 'sfImageMagickAdapter', array('method' => 'shave_all'));
            $thumbnail2->loadFile($imageDir.'/images/boutique/'.$this->getLogo());
            $thumbnail2->save($imageDir.'/images/boutique_min600x200/'.$this->getLogo(), 'image/jpg');
     
            $thumbnail3 = new sfThumbnail(1000, 500, true, true,  75, 'sfImageMagickAdapter', array('method' => 'shave_all'));
            $thumbnail3->loadFile($imageDir.'/images/boutique/'.$this->getLogo());
            $thumbnail3->save($imageDir.'/images/boutique_min1000x500/'.$this->getLogo(), 'image/jpg');
        }
    }
    // Dans lib/form/ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    class BoutiqueForm extends BaseBoutiqueForm
    {
      public function configure()
      {
         $this->widgetSchema['logo'] = new sfWidgetFormInputFileEditable(array(
          'label'     => 'Devanture Boutique',
          'file_src'  => '/images/boutique_min150x150/'.$this->getObject()->getLogo(),
          'is_image'  => true,
          'edit_mode' => !$this->isNew(),
          'template'  => '<div>%file%<br />%input%<br />%delete% %delete_label%</div>',
        ));
        $this->validatorSchema['logo_delete'] = new sfValidatorPass();
     
            // $this->widgetSchema['photo'] = new sfWidgetFormInputFile(array(
              // 'label' => 'Photo du Produit',
            // ));
            $this->validatorSchema['logo'] = new sfValidatorFile(array(
              'required'   => false,
              'path'       => sfConfig::get('sf_web_dir').'/images/boutique/',
              'mime_types' => 'web_images',
            ));
      }
    }
    Peut être que le sens des fonctions est importante !
    Essaie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [1.x] Ajout d'une action Import CSV dans l'admin generator
    Par Nico_F dans le forum Symfony
    Réponses: 1
    Dernier message: 02/05/2011, 15h14
  2. [1.x] retirer une action/lien dans l admin generator
    Par mantex dans le forum Symfony
    Réponses: 4
    Dernier message: 02/02/2011, 10h44
  3. [1.x] changer le formulaire dans l'admin generator
    Par erictomcat dans le forum Symfony
    Réponses: 5
    Dernier message: 26/01/2011, 17h26
  4. [1.x] modifier un champ filter date dans l'admin generator
    Par erictomcat dans le forum Symfony
    Réponses: 23
    Dernier message: 21/10/2010, 16h55
  5. [1.x] Champ de téléchargement dans l'admin generator
    Par qlimamax dans le forum Symfony
    Réponses: 5
    Dernier message: 17/04/2009, 11h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo