[Résolu] Débutant - Cgridview Et Modification De Données

Bonjour à tous.

Je débute avec Yii et j’essaye de développer quelque chose de propre. Actuellement, j’ai utilisé le gii pour créer le CRUD d’une table, mais je voudrais transformer les données affichées au sein du CGridView (je me base sur l’action “admin”).

Par exemple, une colonne fsize contient le poids (en octets) d’un fichier, je voudrais l’afficher de manière lisible.

Donc, quelques questions se posent à moi :

  • Si j’ai bien compris, je dois créer un nouveau dataprovider qui étendra le principal et permettra de faire les modifications sur les lignes, où doit-il se placer ?

  • Quelles sont les méthodes obligatoires dans cette classe et quels paramètres recevront-elles ?

Merci d’avance.

Bonjour,

Quelque chose m’échappe… La colonne fsize correspond-elle à un champ dans une table de la BDD ?

Si oui, la réponse aux deux questions est "non".

Sinon, à quoi correspond cette colonne exactement ?

A+

Tout à fait.

Et en farfouillant un peu, voici ce que j’ai trouvé et fait:

views/fichier/admin.php


<?php $this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'transfert-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'columns'=>array(

		'Id',

		array(

			'name' => 'DateMAJ',

			'value' => 'date("d/m/Y H:i:s", strtotime($data->DateMAJ))',

		),

		array(

			'name' => 'fsize',

			'value' => array($this, 'humanReadable')

		),

		...



Et dans le fichier controllers/FileController.php:


protected function humanReadable($data, $row)

{

   // ma moulinette

   return $humanValue;

}

Ca me semble fonctionner plutôt bien, mais je pense que je devrais mettre cette fonction à un endroit plus global (elle sera utilisée par d’autres modules), donc je cherche où la placer et comment l’appeler. A moins de faire des accesseurs depuis les controleurs qui en ont besoin ?

Tu peux créer une classe "components/Helper.php".

ensuite tu crées un méthode statique dans cette classe:


static function humanReadable($data, $row)

{

   // ma moulinette

   return $humanValue;

}

Quand tu veux utiliser cette méthode, tu fais:


Helper::humanReadable($data, $row);

J4ai essayé, mais ça ne semble pas passer dans le CGridView quand je fais :


'value' => array($this, 'Helper::humanReadable')

Salut,


'value' => array(Helper, 'humanReadable')

ou quelque chose comme ça (merci de pas répondre juste ‘ça marche pas’). L’array contient la fonction de callback (‘class’,‘fonction’) (donc pas $this)

Merci seb7, je me doutais bien que c’était ma manière d’appeler qui n’allait pas.

La prochaine fois, je lirai la doc avant de poser la question.