Salve a tutti, sono nuovo nel forum e soprattutto nell’ambiente Yii che trovo fantastico.
Il mio problema è il seguente:
Devo permettere all’utente di caricare più immagini relative ad un prodotto, ho creato sia la tabella prodotto,
che la tabella ImmagineProdotto.
Ovviamente ho dovuto utilizzare i tabular input come indicato in questo articolo (http://www.yiiframew…1/en/form.table).
Inoltre, avendo utilizzando uploadify, ho seguito quasi alla lettera il seguente post (http://www.yiiframew…r-a-js-library/) che indica come creare un widget, per mia fortuna prendendo come esempio uploadify.
Il tutto funziona correttamente, i file vengono caricati sul server, l’array post contiene tutto ciò che deve contenere.
C’è solo un problema, quando seleziono un file, l’attributo path(che contiene percorso del file) è totalmente vuoto. Non viene riempito nemmeno con il solo nome del file.
Questo è il codice del widget:
<?php
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Description of MyUploadify
*
* @author boss
*/
class MyUploadify extends CInputWidget {
public $options = array();
public function run() {
$assetsFolder = Yii::app()->assetManager->publish(
Yii::getPathOfAlias('application.components.assets.uploadify')
);
Yii::app()->clientScript->registerCssFile($assetsFolder . '/uploadify.css');
//Yii::app()->clientScript->registerScriptFile($assetsFolder . '/swfobject.js');
Yii::app()->clientScript->registerScriptFile(
$assetsFolder . '/jquery.uploadify-3.1.min.js'
);
Yii::app()->clientScript->registerCoreScript('jquery');
$options= CJavaScript::encode(array_merge(
array(
"swf" => $assetsFolder . "/uploadify.swf",
"uploader" => $assetsFolder . "/uploadify.php",
"removeCompleted" => false,
"multi"=>false,
"auto" => false,
"uploadLimit" => 1,
"maxQueueSize"=> 1,
"buttonCursor" => "hand",
"method" => "post",
"fileObjName" => "productImg",
"buttonText"=> "Seleziona",
"checkExisting"=> $assetsFolder . "/check-exists.php",
),
$this->options
));
if (isset ($this->htmlOptions['id']))
$id = $this->htmlOptions['id'];
else
$id= CHtml::activeId($this->model, $this->attribute);
Yii::app()->clientScript->registerScript($id, "$('#$id').uploadify({$options});");
echo CHtml::activeFileField($this->model, $this->attribute, $this->htmlOptions);
}
}
?>
E questo è invece il frammento di codice nella view:
<?php
for ($i=1; $i<=count($immaginiProdotto);$i++) {
?>
<div class="row">
<?php
$this->widget('MyUploadify', array(
'model' => $immaginiProdotto["$i"],
'attribute'=>"[$i]path",
"htmlOptions"=>array(
'id' => 'Prodotto_immagine_' . $i,
)
));
?>
Questo è invece quello che vedo a video se faccio un vardump dell’array post, anche dopo aver fatto l’upload di tutti e 4 le immagini (per il momento ne sono previste 4, ma potrebbero variare nel tempo)
'ImmagineProdotto' =>
array
1 =>
array
'path' => string '' (length=0)
2 =>
array
'path' => string '' (length=0)
3 =>
array
'path' => string '' (length=0)
4 =>
array
'path' => string '' (length=0)
Infine e scusate davvero tanto la lunghezza del post, questo è quello che viene generato da yii per quello che riguarda il codice html:
<div class="row">
<input id="ytProdotto_immagine_1" type="hidden" value="" name="ImmagineProdotto[1][path]" />
<input id="Prodotto_immagine_1" name="ImmagineProdotto[1][path]" type="file" />
<div class="errorMessage" id="ImmagineProdotto_path_em_" style="display:none"></div>
<a style='color:red;' href='javascript:jQuery("#Prodotto_immagine_1").uploadify("upload")'>Avvia il Caricamento</a>
</div>
Qualcuno sa spiegarmi perchè l’attributo path non viene riempito?? Inoltre perchè in automatico viene inserito il prefisso yt nell’html?
Grazie mille in anticipo e rinnovo le mie scuse per la lunghezza del post.