Yii Framework Forum: Ajouter image - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Ajouter image Rate Topic: -----

#1 User is offline   freeyii 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 79
  • Joined: 14-April 11

Posted 21 April 2011 - 05:34 PM

Salut,

J'ai un table sociétés qui contient des champs suivant : id, nom, description, logo

Dans la page d'ajouter nouveau société je veux que le champ Logo doit être une sélection d'un image en local à Upload sur le serveur.

Je veux savoir si possible avec cette méthode d'ajouter le chemin de l'image logo sur la table société ou il faut créer nouveau table logo pour ajouter dedans les images et aussi créer ( controller logo, model...) ?

Merci
0

#2 User is offline   Benn 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 16-January 11
  • Location:Paris

Posted 22 April 2011 - 04:14 AM

Bonjour,
Il est tout à fait possible d'ajouter le chemin de l'image sur la table société.
Si tu veux pouvoir ajouter plusieurs images par société, il serait plus judicieux de passer par une table logo, mais pour un seul logo par entreprise, c'est plus pratique de renseigner le champ dans la table société.
Tu peux regarder ici :
http://www.yiiframew...-using-a-model/
0

#3 User is offline   freeyii 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 79
  • Joined: 14-April 11

Posted 22 April 2011 - 06:06 AM

Merci Benn, mais vraiment je n'arrive pas á bon résultat

voici le code dans le model société :

public function rules() 	{ 		 		return array( 			array('Nom', 'required'), 			array('Nom', 'length', 'max'=>75),                         array('Logo', 'file', 'types'=>'jpg, gif, png'), 			 		); 	}


voici le code de controller :

public function actionCreate() 	{                         $this->layout="main"; 		$model=new Societes;  		if(isset($_POST['Societes'])) 		{ 			$model->attributes=$_POST['Societes'];                         $model->Logo=CUploadedFile::getInstance($model,'Logo');			if($model->save())                                 [color="#FF0000"]$model->Logo->saveAs('path/images');[/color] 				$this->redirect(array('view','id'=>$model->Id)); 		}  		$this->render('create',array( 			'model'=>$model, 		)); 	}

0

#4 User is offline   Benn 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 16-January 11
  • Location:Paris

Posted 22 April 2011 - 06:21 AM

Pourrais tu me dire ce que tu obtiens comme résultat?
Je peux d'ores et déjà te conseiller de ne pas utiliser de majuscules au début des noms d'attributs mais seulement pour les noms de classes. ("Logo" devrait donc être "logo").
Je pense que le problème peut venir de
$model->Logo=CUploadedFile::getInstance($model,'Logo');
...
$model->Logo->saveAs('path/images'); 

qui devrait être
$model->logo=CUploadedFile::getInstance($model,'logo');
...
$model->logo->saveAs('path/images'); 


(et pareil partout où tu as Logo (dans le _form.php par exemple)
0

#5 User is offline   freeyii 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 79
  • Joined: 14-April 11

Posted 22 April 2011 - 06:39 AM

View PostBenn, on 22 April 2011 - 06:21 AM, said:

Pourrais tu me dire ce que tu obtiens comme résultat?
Je peux d'ores et déjà te conseiller de ne pas utiliser de majuscules au début des noms d'attributs mais seulement pour les noms de classes. ("Logo" devrait donc être "logo").
Je pense que le problème peut venir de
$model->Logo=CUploadedFile::getInstance($model,'Logo');
...
$model->Logo->saveAs('path/images'); 

qui devrait être
$model->logo=CUploadedFile::getInstance($model,'logo');
...
$model->logo->saveAs('path/images'); 


(et pareil partout où tu as Logo (dans le _form.php par exemple)


J'ai fait ça mais ce ne marche pas, toujours le bouton de "Ajouter" ne renvoi aucun postback , c'est a dire quand je clique sur "ajouter" pour ajouter nouveau société ce ne marche plus cette bouton il ne renvoi aucun donnée !! mais quand je vais annuler le code de logo tout ce fonctionne bien je peux ajouter des nouveau société

Merci...
0

#6 User is offline   Benn 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 16-January 11
  • Location:Paris

Posted 22 April 2011 - 06:47 AM

As tu bien spécifié l'enctype dans ton _form.php?
<?php echo CHtml::form('','post',array('enctype'=>'multipart/form-data')); ?>

As tu bien ajouté l'attribut
public $logo;
dans ton modele Societes.php?
0

#7 User is offline   freeyii 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 79
  • Joined: 14-April 11

Posted 22 April 2011 - 09:56 AM

voila c que j'ai fait dans le view :

<?php echo CHtml::form('','post',array('enctype'=>'multipart/form-data')); ?>

<?php echo CHtml::activeFileField($model, 'Logo'); ?>

<?php echo CHtml::endForm(); ?>


le type de logo dans la table : Logo c'est un(Varchar)

Mais dommage c marche pas.

Je crains que le code dans le controller qui est pas bon :

if(isset($_POST['Societes']))
		{
			$model->attributes=$_POST['Societes'];
                        $model->logo=CUploadedFile::getInstance($model,'Logo');
			if($model->save())
                                $model->logo->saveAs('path/images');
				$this->redirect(array('view','id'=>$model->Id));
		}

		$this->render('create',array(
			'model'=>$model,
		));


voici l'ajout qui peut ne fonctionne pas correct :

$model->logo=CUploadedFile::getInstance($model,'Logo');

0

#8 User is offline   Benn 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 16-January 11
  • Location:Paris

Posted 24 April 2011 - 06:43 PM

Voici ce que ça devrait donner :
Code SQL pour la table :
CREATE TABLE IF NOT EXISTS `tbl_societes` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `nom` varchar(30) NOT NULL,
  `description` varchar(100) NOT NULL,
  `logo` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


_form.php:
<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
  'htmlOptions'=>array('enctype' => 'multipart/form-data'),
	'id'=>'societes-form',
	'enableAjaxValidation'=>false,
)); ?>

	<p class="note">Fields with <span class="required">*</span> are required.</p>

	<?php echo $form->errorSummary($model); ?>

	<div class="row">
		<?php echo $form->labelEx($model,'nom'); ?>
		<?php echo $form->textField($model,'nom',array('size'=>30,'maxlength'=>30)); ?>
		<?php echo $form->error($model,'nom'); ?>
	</div>

	<div class="row">
		<?php echo $form->labelEx($model,'description'); ?>
		<?php echo $form->textField($model,'description',array('size'=>60,'maxlength'=>100)); ?>
		<?php echo $form->error($model,'description'); ?>
	</div>

	<div class="row">
		<?php echo $form->labelEx($model,'logo'); ?>
		<?php echo $form->fileField($model,'logo'); ?>
		<?php echo $form->error($model,'logo'); ?>
	</div>

	<div class="row buttons">
		<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
	</div>

<?php $this->endWidget(); ?>

</div><!-- form -->


Societes.php:
...
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('nom, description', 'required'),
			array('nom', 'length', 'max'=>30),
			array('description, logo', 'length', 'max'=>100),
      array('logo', 'file', 'types'=>'jpg, gif, png'),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
			array('id, nom, description, logo', 'safe', 'on'=>'search'),
		);
	}
...


SocietesController.php:
...
	public function actionCreate()
	{
		$model=new Societes;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Societes']))
		{
			$model->attributes=$_POST['Societes'];
                        $file=CUploadedFile::getInstance($model,'logo');
                        $extension = $file->getExtensionName();
                        $filename = md5_file($file->tempName);
                        $fullFilename = $filename . '.' . $extension;            
                        $model->logo=$fullFilename;
			if($model->save()) 
                        {			
                          $file->saveAs(Yii::app()->basePath . '/../images/' . $fullFilename);	
			  $this->redirect(array('view','id'=>$model->id));
			}
		}

		$this->render('create',array(
			'model'=>$model,
		));
	}
...

(les logos seront stockés dans un dossier images situé au même niveau que protected, avec un nom correspondant au md5 du fichier uploadé.
0

#9 User is offline   Parcouss 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 18
  • Joined: 12-September 10
  • Location:Toulouse, France

Posted 02 May 2011 - 02:54 PM

Bonjour,

Une autre possibilité (plutôt que d'ajouter des champs / tables sql) est d'utiliser l'extension fileimagearbehavior.

Tu rajoutes un comportement à ton modèle société (un behavior) qui va permetre d'associer une ou plusieurs images à chaque entrée de ta table. De plus, tu peux apliquer des traitements automatique sur les images (redimensionner, etc).
0

#10 User is offline   Lorenzo 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 11-November 11

Posted 05 December 2011 - 04:35 AM

Bonjour tout le monde,

quelqu'un pourrait-il m'aiguiller pour l'update?!

edit:C'est tous bon merci je m'en suis sorti!

This post has been edited by Lorenzo: 05 December 2011 - 08:40 AM

0

#11 User is offline   Benn 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 16-January 11
  • Location:Paris

Posted 05 December 2011 - 05:27 AM

View PostLorenzo, on 05 December 2011 - 04:35 AM, said:

Bonjour tout le monde,

Je sais que ça fait plus d'un an que personne n'a posté mais si quelqu'un peut m'aider :

Il ne reconnait pas la fonction getExtensionName()!

Fatal error: Call to a member function getExtensionName() on a non-object

Une solution ?!


Hello Lorenzo,
Le problème n'est pas qu'il ne reconnait pas la méthode getExtensionName(), mais elle est appelée sur un non objet.
Ca veut dire que si tu as suivi l'exemple ci dessus, ton $file n'existe pas.
Peux tu partager ton code pour qu'on voie ce qui ne va pas?
0

#12 User is offline   Lorenzo 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 11-November 11

Posted 06 December 2011 - 11:38 AM

Salut Benn, enfaite je m'en suis sorti :)!

J'avais juste pas mis les choses dans l'ordre, je veux juste dire que si vous voulez le nom de l'image dans la base de donnée (car pour moi je voulais uploader l'image sur le serveur et pouvoir l'utiliser)
$filename = $file->name;
$model->img=$filename;


Pour que le nom de l'image sois dans img(champ de ma table).

et peut-être que ça peut aider quelqu'un :

Si vous souhaiter que fileField sois facultatif allez dans votre model

public function rules()
	{
...
array('img', 'file', 'allowEmpty'=>true, 'on' => 'insert'),
array('img', 'file', 'allowEmpty'=>true, 'on' => 'update'),
array('img', 'file', 'types'=>'jpg, gif, png,' , 'allowEmpty'=>true),



La 3ieme ligne est très importante! car même si votre champ ne se trouve pas dans requiered, il est obligatoire!

le allowEmpty=>true après les types de fichiers est inévitable pour que le champs sois facultatif!

Voila j'espère que j'ai été claire et que je vais peut-être aider quelqu'un!

Bonne soirée
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users