Widget Fai Da Te: Come Pubblicare Gli Stili ?

Sto realizzando per la prima volta un widget ‘in casa’, questo perchè è un ‘pezzo di pagina’ con javascript, animazioni e tante altre cose, e quindi sta bene ‘isolato’, e poi deve essere riusabile.

Dato che farà largo uso di stili e simili, mi sarei fatto il suo css. solo che le views dei widget vanno messe nella cartella views (come sottocartella rispetto a dove si trova il php del widget stesso)

… ma i css ? dove vanno messi e, come li pubblico i suoi css?

Quando fai delle estensioni, devi mettere js e css all’interno della cartella assets dell’estensione. Ci pensa Yii a pubblicare tutto quanto.

Io ho creato una cartella per l’estensione dentro a extension e poi per usarla scrirvo sempliemente

$this->widget("ext.<nome_azienda>.<nome_classe_widget>");

e funziona. Quindi css e js vengono pubblicati da soli?

no, devi aggiungere la tua cartella assets all’assets manager e poi includere gli stili




 $assets = Yii::app()->getAssetManager()->publish(dirname(__FILE__) . '/assets');

        $cs = Yii::app()->clientScript;

        $cs->registerCssFile($assets . '/css/blabla.css');

ah, oh, lo faccio a mano nel metodo init del widget, così sembra all’utilizzatore del widget che yii lo faccia da solo … ok, ok…

Il concetto di "da solo" ed "a mano" sono strani. Non dovremmo mai caricare una risorsa dal suo percorso relativo al widget. Dovremmo sempre fare come dice emafer.

si, si, mi spiego malissimo ma ho capito …

E che dire delle stringhe da tradurre ? Ho notato che il comando messages non aggiorna i file di localizzazione con le stringhe presenti nel widget, anche se queste fanno uso di Yii::t …

… come faccio ?

MI RISPONDO DA SOLO, vedi http://www.yiiframework.com/doc/api/1.1/CPhpMessageSource

Rispondi anche a noi però =).

beh, ho copiato la risposta sotto la scritta MI RISPONDO DA SOLO, lol !

La risposta è che bisogna creare una cartella messages sotto a quella dove si trova il widget.

Qui ci saranno le cartelle it, en, etc…

Per la nomenclatura del file, bisogna indicare come solito una categoria di messaggi.

L’unica cosa diversa dal solito è che quando si usa Yii::t bisogna chiamarlo in questa forma


Yii::t('<nome_widget>.<nome_categoria>','<stringa da tradurre>');

dove ovviamente i minore e maggiore ‘<…>’ sono solo per indicare che sono dei segnaposti