Yii Framework Forum: Formulario Para Varias Instancias Del Mismo Modelo - Yii Framework Forum

Jump to content

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

Formulario Para Varias Instancias Del Mismo Modelo Rate Topic: -----

#1 User is offline   k9999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 50
  • Joined: 31-October 13

Posted 02 December 2013 - 11:03 PM

Hola a todos mi problema es el siguiente necesito poder manejar varias instancias de un modelo en un mismo formulario por ejemplo con estos campos

<div class="row" id="entrada" style="float:left; width:50%;">
        <?php echo $form->labelEx($modelCasoPrueba,'nombre_archivo_entrada',array('label'=>'Archivo de entrada')); ?>
        <?php echo $form->fileField($modelCasoPrueba,'nombre_archivo_entrada',array('size'=>60,'maxlength'=>256,"class"=>"lolcat","title"=>"Debe indicar la ubicacion del archivo de entrada")); ?>
        <?php echo $form->error($modelCasoPrueba,'nombre_archivo_entrada'); ?>

    </div>
<div class="row" id="entrada" style="float:left; width:50%;">
        <?php echo $form->labelEx($modelCasoPrueba,'nombre_archivo_entrada',array('label'=>'Archivo de entrada')); ?>
        <?php echo $form->fileField($modelCasoPrueba,'nombre_archivo_entrada',array('size'=>60,'maxlength'=>256,"class"=>"lolcat","title"=>"Debe indicar la ubicacion del archivo de entrada")); ?>
        <?php echo $form->error($modelCasoPrueba,'nombre_archivo_entrada'); ?>

    </div>


Se puede ver a ambos div tiene los mismos campos fileField y q referencian al mismo atributo de modelo asi q kisiera q en el mismo formulario se guarde esta informacion en dos modelos q se instancien al mismo tiempo
un pekeño ejemplo xfa xfa xfa
0

#2 User is offline   rahif 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 178
  • Joined: 11-July 13

Posted 04 December 2013 - 12:15 PM

Buff,.. y tiene que ser con el tipo fileField?
Este tipo es especial y para subir múltiples ficheros yo utilizo extensiones.
Lo de clonar campos de formulario va bien con los demás controles el de tipo file no se maneja igual.

Esto es por seguridad, tú no puedes poner un valor en el campo de un file, lo hace exclusivamente el navegador a través del usuario. Se hace para que nadie coloque la cadena de un archivo por javascript ni por HTML y se coja un archivo sin que el usuario se de cuenta, tiene que ser obligatoriamente el usuario con el navegador el que seleccione el fichero.
0

#3 User is offline   k9999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 50
  • Joined: 31-October 13

Posted 04 December 2013 - 09:51 PM

No hay otro remedio q el utilizar extensiones? ayyy q mal xq ya solo eso me faltaba tienes alguna otra idea? y sino tendre q hacerlo obligadamente con extensiones pero no los entiendo bien.
0

#4 User is offline   rahif 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 178
  • Joined: 11-July 13

Posted 05 December 2013 - 01:58 AM

Uno muy simple es el utilizado en la aplicacion Playground, enlace
Te resumo aquí lo que hace.
en protected/config/main.php
'params'=>array(
	// this is used in contact page
	'adminEmail'=>'webmaster@example.com',
	'uploadDir'=>'uploads/',
),

uploadDir es el directorio donde subirás los ficheros, esta a nivel de la carpeta protected y el navegador tiene que poder escribir, La barra / al final del nombre de directorio es requerida.
Crea en site/controller las siguientes acciones: (o en el controlador que quieras)
/**
 * Uploads files submitted via CMultiFileUpload widget
 * Deletes all old files before uploading new files
 */
public function actionUpload()	{
	if(isset($_FILES['files']))	{
		// delete old files
		foreach($this->findFiles() as $filename)
			unlink(Yii::app()->params['uploadDir'].$filename);

		//upload new files
		foreach($_FILES['files']['name'] as $key=>$filename)
			move_uploaded_file($_FILES['files']['tmp_name'][$key],Yii::app()->params['uploadDir'].$filename);
	}
	$this->redirect(array('site/files'));
}	
/**
 * @return array filename
 */
public function findFiles() {
	return array_diff(scandir(Yii::app()->params['uploadDir']), array('.', '..'));
}

Agrega un enlace en la barra de menus para poder ir a la vista correspondiente donde estará el formulario.
Y agrega la vista:
<?php $this->pageTitle=Yii::app()->name . ' - Multiple file upload';?>

<h2>Multiple file upload</h2>

<?php echo CHtml::form($this->createUrl('upload'),'post',array('enctype'=>'multipart/form-data')); 

$this->widget('CMultiFileUpload',array(
	'name'=>'files',
	'accept'=>'jpg|png',
	'max'=>3,
	//'denied'=>'', message that is displayed when a file type is not allowed
	//'duplicate'=>'', message that is displayed when a file appears twice
	'htmlOptions'=>array('size'=>25),
)); ?>
<br />
<?php echo CHtml::submitButton('Upload'); 
echo 'NB! Access restricted by IP';
echo CHtml::endForm(); ?>

<ul>
<?php foreach($this->findFiles() as $filename): ?>
	<li><?php echo CHtml::link($filename, Yii::app()->baseUrl.'/'.Yii::app()->params['uploadDir'].$filename, array('rel'=>'external'));?></li>
<?php endforeach; ?>
</ul>
<br />

<a target="_blank" href="http://www.fyneworks.com/jquery/multiple-file-upload/">http://www.fyneworks.com/jquery/multiple-file-upload/</a>


Yo solo he copiado el ejemplo de playground, quitando traducciones pero el resto esta igual.
Este ejemplo es muy básico y archivos con nombres iguales no puede haber porque se borra el anterior y se sube el nuevo, aquí tendrías que hacer cambios quiza carpetas por secciones, modificar el nombre , guardar en BBDD nombre archivo y donde esta ... Pero la parte de validar número de ficheros a subir, tipo de fichero y tamaño lo puede hacer el widget.
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