Yii Framework Forum: Come Si Colora Il Campo Di Una Colonna In Cgridview? - Yii Framework Forum

Jump to content

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

Come Si Colora Il Campo Di Una Colonna In Cgridview? Rate Topic: -----

#1 User is offline   Giancarlo 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 242
  • Joined: 20-December 11
  • Location:Turin, Italy

Posted 12 October 2012 - 08:43 AM

Ho la solita griglia zii.widgets.grid.CGridView in una view
<?php $this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'approvvigionamento-automatico-parti-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'columns'=>array(
		'ID',

		array(
			'name' => 'IN_VIAGGIO',
//			'htmlOptions'=>array('style'=>'text-align: center'),
//			'htmlOptions'=>array('style'=>'text-align: center; color: red; text-decoration: none;'),
			'htmlOptions'=>array('style'=>$data->colore_giorni_viaggio),

			'type' => 'raw',
			'value' => 'CHtml::label($data->giorni_attesa_viaggio,false)'
		),
	),
)); ?>



Se scrivo
'htmlOptions'=>array('style'=>'text-align: center; color: red; text-decoration: none;'),

tutti i campi della colonna IN_VIAGGIO si colorano di rosso, ma se voglio colorare solo quelli superiori al numero 3, ad esempio, come dovrei fare?

Ho ipotizzato di scrivere nel modello una funzione del genere:
public function getColore_giorni_viaggio()
	{
		if($this->GG_VIAGGIO > 3) {
			return 'text-align: center; color: red; text-decoration: none;';
		} else {
			return 'text-align: center';
		}
	}



ma dato che Yii si lamenta

Undefined variable: data


Eccomi qui a chiedere aiuto

Posted Image Non preoccuparti, è dentro il monitor!

Sapevi che cercando su google yii + "la funzione su cui stai impazzendo", trovi quasi sempre dei buoni indizi in italiano, per risolvere i tuoi problemi, senza perdere tempo a postare?
0

#2 User is offline   Giancarlo 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 242
  • Joined: 20-December 11
  • Location:Turin, Italy

Posted 12 October 2012 - 09:50 AM

Mi ero dimenticato di aggiungere che avevo trovato un post che spiegava come si fa:
http://www.yiiframew...r-in-cgridview/

ma non l'ho capito
Posted Image Non preoccuparti, è dentro il monitor!

Sapevi che cercando su google yii + "la funzione su cui stai impazzendo", trovi quasi sempre dei buoni indizi in italiano, per risolvere i tuoi problemi, senza perdere tempo a postare?
0

#3 User is offline   Nicola 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 160
  • Joined: 13-March 11
  • Location:Italy

Posted 12 October 2012 - 11:04 AM

Questa cosa servirà a breve anche a me.
A quanto pare con rowCssClassExpression puoi specificare una funzione php che viene eseguita per ogni riga.

Avendo a disposizione $row, $data e $this puoi fare le tue valutazioni e ritornare il nome della classe che ti serve.
My company: DigiSin
0

#4 User is offline   Giancarlo 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 242
  • Joined: 20-December 11
  • Location:Turin, Italy

Posted 12 October 2012 - 12:35 PM

Ho passato le ultime 2 ore a cercare uno spezzone di codice funzionante, ma ancora nulla.
Tu hai per caso una mini funzione di esempio e sai anche dove inserirla? (model, view, controller)
Posted Image Non preoccuparti, è dentro il monitor!

Sapevi che cercando su google yii + "la funzione su cui stai impazzendo", trovi quasi sempre dei buoni indizi in italiano, per risolvere i tuoi problemi, senza perdere tempo a postare?
0

#5 User is offline   realtebo 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 535
  • Joined: 03-October 12
  • Location:Ferrara

Posted 14 October 2012 - 09:45 AM

secondo me se provi a fare $model->getColore_giorni_viaggio è più probabile che vada.

Ho anche notato facendo una function in model chiamata getColore ed usandola per il value che
- eseguendo 'return $this->ore' (la mia colonna si chiama 'ore') la colonna ore si popola correttamente

- modificandola in
if ( $this->ore > 30 )
  return "1";
else
  return "0";



la colonna ore contiene solo zeri, mentre quasi tutti, tranne uno, hanno più di 30 ore segnate . (però la chiamata $model->getColore va)


La seconda prova che ho fatto è di eseguire un bel print_r ("ORE: " . $this->ore) dentro al metodo getColore e ... sorpresa ... ho scoperto che viene eseguito una unica volta, PRIMA dell'inizio dell'echo della tabella, quindi prima del parsing delle singole righe... difatit $this->ore non è valorizzato

Confermate ?
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#6 User is offline   Giancarlo 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 242
  • Joined: 20-December 11
  • Location:Turin, Italy

Posted 14 October 2012 - 11:19 AM

Confermo, perché usi $model->getColore.

Invece per quello che serve a noi 2, e cioè lavorare sul singolo record bisogna usare $data.
Teoricamente $data->getColore o qualcosa del genere.
Purtroppo non ho ancora trovato uno spezzone di codice funzionante.
Posted Image Non preoccuparti, è dentro il monitor!

Sapevi che cercando su google yii + "la funzione su cui stai impazzendo", trovi quasi sempre dei buoni indizi in italiano, per risolvere i tuoi problemi, senza perdere tempo a postare?
0

#7 User is offline   realtebo 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 535
  • Joined: 03-October 12
  • Location:Ferrara

Posted 14 October 2012 - 12:35 PM

si, scusa hai ragione ! La mia poca esperienza ti ha fatto perdere tempo.

Effettivamente sto cercando anche io un sistema per intervenire a livello di parsing della singola riga, perchè servirà anche a me presto o tardi. Continueremo a provare e cercare !
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#8 User is offline   realtebo 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 535
  • Joined: 03-October 12
  • Location:Ferrara

Posted 14 October 2012 - 12:59 PM

http://www.yiiframew...ions-attribute/

scusami se non provo il codice, ma è domenica .... e poi ha senso: personalizzi la colonna con una classe che estende CDataColumn, e li hai accesso a '$data'.

:)
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
1

#9 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 15 October 2012 - 02:45 AM

Come dice realtebo, usa rocCssClassExpression:

                array(
                        'name' => 'IN_VIAGGIO',
                        'rowCssClassExpression'=>'$data->colore',

                        'type' => 'raw',
                        'value' => 'CHtml::label($data->giorni_attesa_viaggio,false)'
                ),


Le expression le devi passare come stinghe, verrano valutate con eval e $data sara' valida, se la scrivi senza apici php prova a valutarla mentre costruisce l'array, e data non e' impostata.

Una volta impostata la classe devi ovviamente scrivere il css per cambiare il colore.
0

#10 User is offline   realtebo 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 535
  • Joined: 03-October 12
  • Location:Ferrara

Posted 15 October 2012 - 03:26 AM

scusami zaccaria, ma il colore deve dipendere dal valore della colonna del singolo record...

come può ottenere questo?
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#11 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 15 October 2012 - 07:32 AM

Se hai un certo numero di colori (limitato) fai una funzione del tipo:

public function getClassForColor()
{
  if (lala)
    return 'lala';
  if (lulu)
   return 'lulu'
}

e la usi nel 'rowCssClassExpression'=>'$data->classForColor'; devi impostare una classe per la colonna (myTdClass) poi nel css setti i colori:

table.myDatagridClass tr.lala td.myTdClass
{
   color:red;
}

0

#12 User is offline   realtebo 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 535
  • Joined: 03-October 12
  • Location:Ferrara

Posted 15 October 2012 - 07:37 AM

il problema è che 'lala ' è il valore della cella stessa. è possibile passare nel 'rowCssClassExpression' il valore di $data->attributo ?
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#13 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 15 October 2012 - 07:49 AM

nel rowCssExpression passi una funzione da chiamare sul model:

'rowCssClassExpression'=>'$data->colore',


Questa funzione sara' chiamata per ogni riga e dara' una classe a tutta la riga.

La funzione viene chiamata sul model, per cui puoi usare tutti gli attributi del model.
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