Problema y pequeña duda con CDetailView

Les dejo una imagen que habla por si sola.

A ese campo, Página Web, lo completo con una función que si el campo es nulo, coloca ‘No posee’ y sino un link a la web (que también queda afuera de la tabla en el mismo lugar).

Además necesito saber como puedo agregar de alguna forma algo como:


...array(

    'name'=>'loquesea',

    'value'=>$data->MiFuncion;

   ),

...

donde esa función me de una simple lista de items separados por <li> y </li>.

Espero sus respuestas.

Muchas gracias.

¿Código de ejemplo?

En view.php:




$this->widget('zii.widgets.CDetailView', array(

	'data'=>$model,

	'attributes'=>array(

		'direccion',

		'telefono',

		'mail',

		array(

		'name'=>'web',

		'value'=>$model->PaginaWeb,

		),

		array(

		'name'=>'idZona', 

		'value'=>$model->idZona0->nombre,

		),

		array(

		'name'=>'idTipo', 

		'value'=>$model->idTipo0->nombre,

		),

	),

)); 



En el modelo:




	public function getPaginaWeb(){

		if($this->web=='')

			echo 'No Posee';

		else

			echo CHtml::link(CHtml::encode($this->web), $this->web);			

	}



Hola, ¿Ya lo resolviste?

El problema es que en tu función no estas regresando el valor, aquí te pongo un ejemplo que se me ocurrió hacer para resolver tu problema :)

Vista:





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

				'data' => $model,

				'attributes' => array(

				

                                    array(

                                        'name'=>'Nombre Completo ',

                                        'value'=>$model->NOMBRE.' '.$model->APATERNO.' '.$model->AMATERNO,

                                        ),

                                        'LOGIN',

                                   [b] array(

                                        'name'=>'Activo ',

                                         'value'=>valor($model->ACTIVO),

                                        ),[/b]

				'itemTemplate' => "

                                    <tr class=\"{class}\"><td style=\"width: 120px\"><b>{label}</b></td><td>{value}</td></tr>\n",

				'htmlOptions' => array(

				

				),

			)); ?>




Metodo:




  function valor($activado){

                       if($activado=="S")

                       {

                          return "Si";

                        }

                    else

                        {

                        return "No";

                        }

                   }






Para probarla puse la función en la misma vista (solamente) recuerda que en el modelo se le tienen que otorgar permisos :D … espero que te sirva, saludos.

<_< no se puso en negritas el codigo.

Gracias Iza, puse return en lugar de echo y el ‘No posee’ lo muestra genial, el problema sigue siendo con el link!

Si uso la siguiente función en el modelo:




	public function getPaginaWeb(){

		if($this->web=='')

			return 'No Posee';

		else

			return CHtml::link(CHtml::encode($this->web), $this->web);			

	}



en la tabla veo:

Página web ------ <a href="http://www.loquesea.com">http://www.loquesea.com</a>

Ayudas?

Para el link tienes que especificar que el atributo es de tipo "raw", entonces quedaría de esta forma:




  array(

        'name'=>'Activo ',

        'value'=>valor($model->ACTIVO),

        'type'=>'raw',

       ),



Y la función quedaria así:





 function valor($activado){

                       if($activado=="S")

                       {

                          return "Si";

                        }

                    else

                        {

                        return CHtml::link(CHtml::encode("Mi Link"), array('ejemplo/view'));

                        }

                   }




:)

Funcionó con ‘type’=>‘raw’!!

Muchas gracias!

Por nada ;)