Duda Con Mostrar/descargar Imagen

Saludos comunidad,

Resulta que soy nuevo en YII, y me encuentro entrampado, por lo que pido su gentil colaboración. Resulta que tengo un formulario, que me permite subir una imagen al servidor, y guardar la ruta de la imagen en la base de datos (MySQL), esto lo hago básicamente en el controlador, de la siguiente manera.




public function actionUpdate()

	{

                $model=$this->loadModel($id);

                $rut = $model->rut;

                $ruta = Yii::getPathOfAlias('webroot').'/images/fotocarnet/';

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


		if(isset($_POST['Cliente']))

		{

			$model->attributes=$_POST['Cliente'];

                        

                        //Valida Directorio fotocarnet

                        if(!file_exists(Yii::getPathOfAlias('webroot').'/images/fotocarnet/'))

                            mkdir(Yii::getPathOfAlias('webroot').'/images/fotocarnet/',0777,true);

                        

                        //Valida JPG

                        if($model->fotocopiacarnet->getExtensionName() == "jpg"){

                            $model->fotocopiacarnet->saveAs(Yii::getPathOfAlias('webroot').'/images/fotocarnet/'.$rut.".jpg", 0777); //Guarda imagen en el directorio

                            $model->fotocopiacarnet = $ruta.$rut.".jpg"; //Transforma valor a guardar en la DB

                        }

                        

                        //Valida PNG

                        else if($model->fotocopiacarnet->getExtensionName() == "png"){

                            $model->fotocopiacarnet->saveAs(Yii::getPathOfAlias('webroot').'/images/fotocarnet/'.$rut.".png", 0777); //Guarda imagen en el directorio

                            $model->fotocopiacarnet = $ruta.$rut.".png"; //Transforma valor a guardar en la DB

                        }

                        

                        //Guarda el modelo

                        if($model->save()){

                                $this->redirect(array('view','id'=>$model->idcliente));

                        }

		}


		$this->render('create',array(

			'model'=>$model,

		));

	}



*El actionCreate, es lo mismo

Mi problema es que ahora no sé que hacer con ella, y tengo 2 opciones

  1. Al ver los datos, que el campo "fotocopiacarnet" me muestre la imagen

  2. Al ver los datos, que el campo "fotocopiacarnet" me permita descargar la imagen

(La verdad es que me gustaría aprender a hacer ambas funciones)

si me dirijo al view view.php (que entiendo que es el encargado de mostrar la información) me encuentro con lo siguiente:




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

	'data'=>$model,

	'attributes'=>array(

		'idcliente',

		'rut',

		'dv',

		'nombres',

		'aPaterno',

		'aMaterno',

		'fechanacimiento',

		'telefonofijo',

		'telefonomovil',

		'email',

		'direccion',

		'niveleducacional',

		'fotocopiacarnet',

	),

)); ?>



Que entiendo que es quién muestra los datos según el ID. Pero, de que forma puedo hacer que visualice la imagen o la descargue, y no sólo, me muestre la URL que está en la DB?

De antemano

Gracias

Algo como esto;




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

        'data'=>$model,

        'attributes'=>array(

                'idcliente',

                'rut',

                'dv',

                'nombres',

                'aPaterno',

                'aMaterno',

                'fechanacimiento',

                'telefonofijo',

                'telefonomovil',

                'email',

                'direccion',

                'niveleducacional',

                'fotocopiacarnet',

                array(               // imprime un link (descarga)

                        'label'=>'Descargar imagen',

                        'type'=>'raw',

                        'value'=>CHtml::link('Descripcion de link', 'URL_IMAGEN'),

                ),

                array(               // imprime una imagen

                        'label'=>'ver image',

                        'type'=>'raw',

                        'value'=>CHtml::image('URL_IMAGEN'),

                ),

        ),

)); ?>


	

        



Muchas gracias! me he solucionado el problema, tuve que arreglar un par de cosas, pero ya está todo listo gracias a la ayuda que me has brindado.

A pesar de esto, tengo una duda, y es respecto al type, y mi pregunta es ¿porqué type = raw, no puede ser otra, y si puede ser otra, que opciones de type tengo?

Saludos

Puede ser otras…

En la actualidad, los tipos reconocidos son:

  • raw: el valor del atributo no será cambiado en absoluto.

  • text: el valor del atributo será codificada en HTML cuando es renderizado.

  • ntext: el método formatNtext será llamado para dar formato al valor del atributo, de texto plano a HTML, como por ejemplo los saltos de línea serán convertidos a etiquetas html <br />.

  • html: el valor del atributo será purificado y luego retornado.

  • date: el método formatDate será llamado para dar formato al valor del atributo como una fecha.

  • time: el método formatTime será llamado para dar formato al valor del atributo como un tiempo.

  • datetime: el método FormatDateTime será llamado para dar formato al valor del atributo como fecha y tiempo.

  • boolean: el método formatBoolean será llamado para dar formato al valor del atributo como un booleano.

  • number: el método formatNumber será llamado para dar formato al valor del atributo como un numero.

  • email: el método formatEmail será llamado para dar formato al valor del atributo como un link mailto.

  • image: el método formatImage será llamado para dar formato al valor del atributo como una etiqueta de imagen en el valor del atributo es la URL de la imagen.

  • url: el método formatUrl será llamado para dar formato al valor del atributo como un hipervínculo en el valor del atributo es la URL.

El tipo por defecto es "text"

Muchas gracias por la ayuda, ya he entendido, al menos en grandes rasgos, como hacer esto.

Saludos