Ciao a tutti!
Ho un po' di confusione relativamente alle differenze tra widget e module.
Ho creato un widget attorno a un flash che scatta foto con la webcam (il codice originale è http://code.google.com/p/jpegcam/ ; l'intenzione è impacchettare una extension e pubblicarla). Come potete immaginare il flash chiama un'url per salvare il jpg, una specie di ajax insomma, e attualmente c'è un controller+action che fa il lavoro, però il controller è quello relativo alla view che include il widget.
Volendo impacchettare il tutto come una extension, dovrei fare un module o un widget? A me sembra più sensato il module, perchè mi permetterebbe di includere anche il relativo controller e action per il salvataggio della foto, ma in tal caso come farei a renderizzare la webcam in una view esterna al modulo? Insomma la stessa funzionalità dovrebbe essere disponibile in qualsiasi controller (User, Profile, MySuperPhotoGallery..)
Page 1 of 1
Modulo o widget?!
#2
Posted 02 June 2011 - 01:05 AM
La soluzione e' di fare una action apposta, che poi includerai nel controller.
Crea una classe che estende CAction, e implementa il metodo run.
Nel controller puoi includere l'action cosi':
E' lo stesso lavoro che puoi osservare nel siteController per CCacptchaAction.
Crea una classe che estende CAction, e implementa il metodo run.
Nel controller puoi includere l'action cosi':
public function actions() { return array( // главная 'flashLoad' => array( 'class' => 'application.extension.flaskLoader.loadAction', ), ); }
E' lo stesso lavoro che puoi osservare nel siteController per CCacptchaAction.
#3
Posted 02 June 2011 - 05:49 PM
Ok, grazie mille Zaccaria! ci sono quasi.. ho seguito How to use a widget as an action provider e sono riuscito ad agganciare il controller del client code alla CAction del widget (in altre parole sono riuscito a riprodurre il risultato del tutorial)
Ora si tratta di passare un parametro alla CAction, nello specifico devo dirgli dove salvare la foto scattata.
Un primo esperimento semi-riuscito è chiamare la action così: //localhost/miosito/miocontroller/jpegcam.saveJpg?id=27
ed effettivamente nella CAction riesco a catturare l'id così:
Ma non è quello che mi serve: non posso passare il full_path dell'immagine da salvare nell'url.. ve l'immaginate che belle url injections si potrebbero fare?
L'url deve rimanere come quella indicata sopra, nel controller Miocontroller devo poter decidere dove salvare e poi passare il nome del file alla CAction. (è anche da escludere che la costruzione del full_path si faccia nella CAction perchè è un widget che si deve poter riutilizzare in ogni applicazione)
Ho letto http://www.yiiframew...dpost__p__97673 , che sembra rifarsi a http://www.yiiframew...th-caction/#hh4 ma non mi funziona
.
Ora si tratta di passare un parametro alla CAction, nello specifico devo dirgli dove salvare la foto scattata.
Un primo esperimento semi-riuscito è chiamare la action così: //localhost/miosito/miocontroller/jpegcam.saveJpg?id=27
ed effettivamente nella CAction riesco a catturare l'id così:
class saveJpg extends CAction{ public function run($id=null){ echo $id; } }
Ma non è quello che mi serve: non posso passare il full_path dell'immagine da salvare nell'url.. ve l'immaginate che belle url injections si potrebbero fare?
L'url deve rimanere come quella indicata sopra, nel controller Miocontroller devo poter decidere dove salvare e poi passare il nome del file alla CAction. (è anche da escludere che la costruzione del full_path si faccia nella CAction perchè è un widget che si deve poter riutilizzare in ogni applicazione)
Ho letto http://www.yiiframew...dpost__p__97673 , che sembra rifarsi a http://www.yiiframew...th-caction/#hh4 ma non mi funziona

Extension yii-jpegcam: embed a webcam and take photos
#4
Posted 03 June 2011 - 12:53 AM
Ma l'id che gli passi che cos'e'? Il model a cui e' associata l'immagine?
Se e' il model, allora e' fatta: carica il model e crea un metodo nel model per generare il full_path a partire dall'id.
In sostanza, deve essere il model a sapere dove salvare le immagini, non l'action che le salva.
Se e' il model, allora e' fatta: carica il model e crea un metodo nel model per generare il full_path a partire dall'id.
In sostanza, deve essere il model a sapere dove salvare le immagini, non l'action che le salva.
#5
Posted 05 June 2011 - 09:43 PM
Ok, risolto il problema senza coinvolgere il modulo. Vedi il commento in "Code reuse with CAction"
Dal controller alla CAction i parametri si passano così:
dove 'property1' e 'property2' sono public properties della CAction.
Dal controller alla CAction i parametri si passano così:
public function actions() { return array( 'providerName.'=>array( 'class'=>'path.to.ProviderClass', 'action1'=>array( 'property1'=>'value1', ), 'action2'=>array( 'property2'=>'value2', ), ), ) }
dove 'property1' e 'property2' sono public properties della CAction.
Extension yii-jpegcam: embed a webcam and take photos
#6
Posted 10 June 2011 - 12:36 PM
Fatto! come promesso (qui) l'extension è pronta!
yii-jpegcam
Yii extension to embed a webcam and take photos
yii-jpegcam
Yii extension to embed a webcam and take photos
Extension yii-jpegcam: embed a webcam and take photos
Share this topic:
Page 1 of 1