Yii Framework Forum: Problème Cgridview - Yii Framework Forum

Jump to content

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

Problème Cgridview Rate Topic: -----

#1 User is offline   biowan 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 21-September 12

Posted 21 September 2012 - 09:02 AM

Bonjour,

Je débute Yii depuis quelques jours seulement et je tourne en ronde pour résoudre un problème de CGridView donc je peux vous dire qu'il y a beaucoup de questions là dessus, dont j'ai essayé les solutions proposées et ça fonctionne chez les autres, mais pas chez moi. Je me demande si la version y est pour qqch, 1.1.12.

J'ai des tables course et person. Chaque cours a une personne de contact.

J'ai peux sans problème lister le nom du contact dans le grid. Mais les filtres et les tris ne fonctionnent pas très bien sur l'en-tête des colonnes et ça ne retourne les errors :
Error 500: <h1>PHP Error [8]</h1>
<p>Trying to get property of non-object (/var/www/yii/framework/base/CComponent.php(607) : eval()'d code:1)</p>
<pre>#0 /var/www/yii/framework/base/CComponent.php(607) : eval()'d code(1): CWebApplication->handleError()


Je vous montre les codes essentiels :
Dans le fichier Model de Course.
  public function rules()
  {
    return array(
      //... d'autres array
      array('contact, firstname, lastname', 'safe'),
      array('contact, firstname, lastname', 'safe', 'on'=>'search'),
    );
  }

  public function relations()
  {
    return array(
      'contact' => array(self::BELONGS_TO, 'Person', 'id_contact'),
    );
  }

  public function search()
  {
    $criteria=new CDbCriteria;

    // ... d'autres criteria

    $criteria->together = true ;
    $criteria->compare('id',$this->id,true);
    $criteria->with=array('contact');
    $criteria->compare('contact',$this->contact,true);

    return new CActiveDataProvider($this, array(
      'criteria'=>$criteria,
    ));

  }


Et dans l'admin.php
$this->widget('zii.widgets.grid.CGridView', array(
  'id'=>'course-grid',
  'dataProvider'=>$model->search(),
  'filter'=>$model,
  'columns'=>array(

   //... d'autres attribues

    array(
      'name'=>'contact',
      'value'=>'$data->contact->lastname' ,
    ),

    
    array(
      'class'=>'CButtonColumn',
    ),
  ),
));


Bien sûr, j'aimerais pourvoir faire un filtre et un tri avec tous les colonnes. Mais surtout, j'aimerais pourvoir faire un filtre avec "lastname" et "firstname" dans la même colonne. Pour les afficher dans la même colonne, je parviens à le faire, mais toujours avec les mêmes problèmes de filtre et de tri.

    array(
      'name'=>'contact',
      'value'=>'$data->contact->lastname." ".$data->contact->firstname' ,
    ),


Merci d'avance pour votre aide.
0

#2 User is offline   bennouna 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 1,168
  • Joined: 05-January 12
  • Location:Morocco

Posted 21 September 2012 - 09:22 AM

D'abord il vaut mieux déclarer un attribut virtuel dans le modèle Course au lieu d'utiliser "contact":
public $contactName;

Il faudrait aussi l'ajouter dans les attributs safe dans les règles de validation.
Ensuite dans la méthode search() :
$criteria2=new CDbCriteria;
list($nomPartiel, $prenomPartiel) = explode(' ', $this->contactName);
$criteria2->compare('contact.lastname', $nomPartiel, true);
$criteria2->compare('contact.firstname', $prenomPartiel, true, 'OR');
$criteria->mergeWith($criteria2);

Et dans la vue
array(
    'name'=>'contactName',
    'value'=>'$data->contact->lastname." ".$data->contact->firstname',
),

0

#3 User is offline   biowan 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 21-September 12

Posted 21 September 2012 - 10:10 AM

Merci pour ta réponse rapide bennouna.

ça me donne une erreur d'exécution sur la ligne
list($nomPartiel, $prenomPartiel) = explode(' ', $this->contactName);


Undefined offset: 1
0

#4 User is offline   biowan 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 21-September 12

Posted 21 September 2012 - 10:24 AM

Apparemment, c'est le explode qui n'a pas fonctionné.
J'ai essayé d'utiliser 2x le contactName et il n'y a plus d'erreur.

    $criteria2=new CDbCriteria;
    //list($nomPartiel, $prenomPartiel) = explode(' ', $this->contactName);
    $criteria2->compare('contact.lastname', $this->contactName, true);
    $criteria2->compare('contact.firstname', $this->contactName, true, 'OR');
    $criteria->mergeWith($criteria2);


Par contre, le problème de filtre et tri persiste.
0

#5 User is offline   biowan 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 21-September 12

Posted 24 September 2012 - 10:10 AM

Pas d'idée pour le problème du filtre et du tri ?
0

#6 User is offline   grandoom 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 34
  • Joined: 11-July 12

Posted 27 September 2012 - 03:17 AM

View Postbiowan, on 24 September 2012 - 10:10 AM, said:

Pas d'idée pour le problème du filtre et du tri ?



pour compléter la réponse de bennouma
un peu de lecture s'impose
lecture 0
http://www.yiiframew...el-in-cgridview

lecture 1
http://www.yiiframew...s-in-cgridview/

lecture 2
http://www.yiiframew...s-in-cgridview/

bon courage c'est un peu chaud...mais bon avec de la patience ça devrait aller
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