2012-06-20 9 views
6

Sto creando un widget per un'applicazione Yii. La vista principale del layout registra tutti i file di script comuni come jQuery e jQueryUI. Nel mio widget voglio usare un plugin jQueryUI che si basa su jQueryUI già caricato.Cambia l'ordine dei file di script registrati in yii

So che posso specificare in quale punto della pagina è incluso lo script, ma sembra un po 'incostante semplicemente includerlo alla "fine" - cosa succede se ho un altro script che devo caricare dopo quel plugin ? Come posso assicurarmi che siano caricati nell'ordine giusto? Qualcuno ha qualche idea?

+0

È possibile specificare la posizione. Vedere la documentazione per [registerScript] (http://www.yiiframework.com/doc/api/1.1/CClientScript/#registerScript-detail) e/o [registerScriptFile] (http://www.yiiframework.com/doc/ api/1.1/CClientScript/# registerScriptFile-detail) – adamors

+0

Grazie per il pensiero ma ne ero consapevole. Puoi specificare uno dei tre posti - POS_BEGIN, POS_END e POS_READY - che non aiuta se ho bisogno di caricare tutti i miei plug-in in POS_BEGIN, ma alcuni provengono dal layout principale e altri dai widget. – Hippyjim

+0

Vedo, hai provato a sfogliare la fonte dei widget zii? – adamors

risposta

11

È possibile utilizzare la funzione di dipendenza in Yii script packages. Stavo avendo similar problem before.

Per esempio si hanno dei pacchetti di script config come qui di seguito,

'clientScript' => array(
    'packages' => array(
    'package1' => array(
      'basePath' => 'path.to.package1', 
      'js' => array(
       'package1.js', 
     ), 
      'css' => array(
       'package1.css' 
     ), 
    ), 
    'package2' => array(
      'basePath' => 'path.to.package2', 
      'js' => array(
       'package2.js', 
     ), 
      'css' => array(
       'package2.css' 
     ), 
      'depends' => array(
       'package1', 
     ) 
    ), 
    'package3' => array(
      'basePath' => 'path.to.package3', 
      'js' => array(
       'package3.js', 
     ), 
      'css' => array(
       'package3.css' 
     ), 
      'depends' => array(
       'package2', 
     ) 
    ), 
    ) 
) 

Nel esempio sopra riportato, package2 richiede (dipende) package1 e package3 richiede package2. Diciamo che nel tuo caso, un widget utilizza package2 e l'altro script utilizza package3. Anche se non si esegue il rendering del widget, se si utilizza Yii::app()->clientScript->registerPackage('package3');, verrà automaticamente installato il package2 che quindi installeràprima dello package2 (o non verrà installato se lo script package1 è già richiesto da alcuni script in precedenza).

+0

+1, sembra buono, perché non ci ho pensato! –

+0

Grandi cose, grazie Petra, è esattamente ciò di cui avevo bisogno. – Hippyjim