Ho fatto un widget =)

Si si lo so che è un esempio becero semplice e fin troppo stupido ma guardate qui:

Ho creato un widget di esempio!!!

Sono andato dentro alla cartella delle extensions, quindi ho creato /protected/extensions/esempio/

e dentro il file Esempio.php: /protected/extensions/esempio/Esempio.php

Dentro al file php ho scritto questa roba




<?php


class Esempio extends CWidget {


    public function init() {


        Yii::app()->getClientScript()->registerScript(__CLASS__ . '#', "alert('Esempio');");

    }


}



Poi sono andato in una view ed ho richiamato il widget:




<?php $this->widget('ext.esempio.Esempio'); ?>

Funziona!!!

Volevo gioire con voi di questa piccola conquista: non avevo ancora esteso yii se non con extensions di altri

Bravo… il primo dei molti che verano… :D

Ho in mente un paio di widget molto interessanti, solo che usano delle librerie javascript. Appena verifico come includere dei file .js faccio subito subito un paio di estensioni =).

Per vedere come si fa, e per avere qualche nuova idea… butta un occhio ai core widget di Yii…

li trovi nel folder "framework/web/widgets"

Sto guardando in questo momento. Però ho un problema: ho creato questo widget, sono riuscito ad importare nella pagina i suoi .js, i suoi css… Ma non mi è chiaro come posso fare a passare dei parametri: mi aspettavo di poter fare una cosa come questa:




<?php

            $this->widget('ext.my.widget', array(

                'valore' => 1234

            ));

?>



Al widget non puoi passare dei parametri come ad un metodo… pero puoi settare i suoi property…

Nel tuo essempio… "valore" dovrebbe essere un "public valore;" nell tuo widget…

Molto bene: ho fatto un widget!!! A breve lo pubblico nella directory di yii! E’ molto molto molto utile, vedrai!

http://www.yiiframework.com/extension/lyiightbox/

Sei veloce :)

Se ci spendi anchora un po di tempo ad analizare i widget di Yii… troverai anche come publicare automaticamente le imagini ;)

Una nota… nella prima riga hai un errore…

scrive: To user this extension

dovrebber stare: To use this extension

Se e possibile sarebber piu facile ad altri utenti se il link per github sia "live"…

Ho corretto il "to user" in "to use" ed anche il link. Adesso vediamo che cosa mi dicono.

Rimane anchora il fatto che si devono manualmente copiare le imagini…

Per questo puoi usare il metodo publish() - http://www.yiiframew#publish-detail

E come posso fare a rinominare una cartella con publish?

Mmmm adesso che ci penso… perchè far rinominare la cartella??? Non ha senso: correggo subito il widget e lo ripubblico corretto.

Scusami ancora, ma … devo creare una nuova classe che estende CAssetManager?

Ed ora ho una marea di widget che mi sono venuti in mente. Ma non parto con il secondo fino a che questo non è stabile e commentato da qualcuno.

pe run idea dai un occhiata al codice di CGridView… li si publica un folder intero con le imagini… ;)

La libreria LightBox utilizza delle immagini, devo necessariamente copiarle fuori dalla cartella assets perché i loro percorsi sono scritti in file css o in file javascript. Per questo nella guida suggerisco di copiare la cartella lightbox2images/ dentro images/. Guardando il CGridView ho trovato questo:


Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('zii.widgets.assets')).'/gridview';

. Vuoi dire che posso fare la stessa cosa, e copiare i files che mi servono dentro la cartella zii di yii? Quindi devo modificare i files css del mio widget in modo che puntino a quella cartella? Mi sembra molto contorto :-\. Non sarebbe più semplice copiare dei files dal mio widget ad un’altra cartella del mio sito web?

CGridView a i suoi dati nella cartela zii…

il tuo widget ha i suoi dati nella sua cartella… quando chiami il metodo publish() gli dai il path della tua cartela… e questo metodo copiera tutto il contenuto della tua cartella nel asstess del applicazione…

Nella tua cartella puoi avere i CSS a i JS files che si riferiscono alle imagini contenute li… usi i relativi path…

guarda come e fatto il CSS del CGridView…

Mi serve ancora un piccolo aiutino:

Come posso fare ad includere un file javascript con dei parametri, ad esempio

<script src="myscript.js?folder=/my/site/assets/230948728" />

Dentro al codice javascript mi servono delle variabili che posso conoscere solo al momento della creazione del widget. Vorrei passare al file .js il percorso dell’asset. Ma non riesco ad ottenere questo valore. Provo da ore ma nulla =(.

E dove si trova sto JS file… se lo metti nel folder dove si trovano anche le imagini ho pure un subfolder… alora puoi usare i path relativi

Per esempio nel tuo widget puoi avere la strutura dei folder simile a questa

mywidget

– assets

------ js

------ css

------ imagini

In questo caso publish() ti copia questa strutura e dal JS file puo otenere le imagini con ‘../imagini/’

Nel essempio di CGridView il JS file e le imagini sono assieme nello stesso folder…