In una specie di carrello per e-commerce, c’è un tasto ‘acquista’.
Questo, tramite ajax, esegue una action la quale dà una modal in risposta. Il problema non è visualizzare la modal, quanto il fatto che dentro alla modal c’è una dropdown che deve scatenare un evento ‘change’ javascript.
Il problema è che, anche pubblicando il js come assets e quindi registrando il file, il tutto dentro al metodo init(), il file javascript ovviamente non viene caricato dal browser, questo accade perchè la modal è creata da un renderPartial e non da un render, perchè, ovviamente, non devo dare fuori una pagina ma solo un frammento html.
Dato che questa modal verrà reciclata in parecchie pagine, in moduli diversi, vorrei che vosse un widget.
Mi è venuta in mente come unica possibilità di mettere il javascript in un widget a parte e farlo caricare dalla pagina madre, quella che esegue la chiamata ajax. In questo modo il js del widget è precaricato, mentre la modal può essere generata e caricata dinamicamente.
Dato che questa modal verrà reciclata in parecchie pagine, in moduli diversi, vorrei che vosse un widget.
niente di più semplice l’ossatura base di un widget stesso:
<?php
class MioWidget extends CWidget
{
/**
* Initializes the widget.
*/
public function init()
{
parent::init();
}
/**
* Runs the widget.
*/
public function run()
{
// o registri un js esistente
Yii::app()->clientScript->registerScriptFile('percorso/al/file/js/'.$filename, $position);
// o lo sputi nel codice direttamente
$script = <<<script
function miaFunzione() { }
SCRIPT;
// e poi output js
$cs->registerScript(....);
}
}