Quantcast
Channel: Yii Framework Forum
Viewing all articles
Browse latest Browse all 18717

Uploadify Custom Widget

$
0
0
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.

Viewing all articles
Browse latest Browse all 18717

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>