2012-12-29 14 views
9

Attualmente, ho una grande applicazione CakePHP con un layout e molte viste. Nel layout, carico i file Javascript nella testa che sono necessari per la maggior parte delle visualizzazioni. Nelle viste, io carico o file Javascript aggiuntivi (ad esempio, carico un file di libreria che è necessario solo lì), o aggiungo qualche codice Javascript che è rilevante solo per questa vista in un tag script, ad esempio se ho bisogno di un clic handler.Carica file Javascript in CakePHP Layout in "bottom"

Poiché è noto che il caricamento dei file Javascript nella testina HTML ha bloccato il caricamento della pagina, volevo metterli in fondo prima di chiudere il tag del corpo. Ma se lo faccio, il Javascript nelle mie viste che carica il contenuto si interrompe perché non sa dei miei file Javascript caricati. Comprendo che il codice Javascript nelle viste caricate viene eseguito prima che i miei file vengano caricati. Ma come posso impedirlo?

Attualmente sto usando il Helper HTML nel Layout (e altrove) per caricare i miei file JS in questo modo:

<?php echo $this->Html->script('//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'); ?> 

e io uso il JS Helper per "uscita" JS alla fine del la pagina con

<?php echo $this->Js->writeBuffer(); ?> 

c'è un modo posso aggiungere il mio codice JS nelle viste, in modo che sia eseguito quando chiamo WriteBuffer? Può aiutarmi?

risposta

12

Questo è quello che faccio nel mio punto di vista:

echo $this->Html->script('filename', array('inline' => false)); 

e questo è quello che faccio in fondo mio layout:

echo $this->fetch('script'); 
+0

Penso che questa sia una buona soluzione e penso che funzioni, se metto tutto il mio codice inline nelle viste nei file Javascript. Grazie per il tuo consiglio! – akohout

17

Dal CakePHP versione 2.1 è possibile utilizzare blocchi di script:

// in your view 
$this->Html->script('filename', array('block' => 'scriptBottom')); 

// in your layout 
echo $this->fetch('scriptBottom'); 

Questo approccio consente di mantenere echo $this->fetch('script') nel <head> del layout nel caso in cui hai bisogno di script in alto.

+0

Grazie per la risposta. In effetti, ho già trovato la tua risposta da qualche parte nel web e l'ho integrata, ma sicuramente vale la pena essere menzionata qui poiché completa la risposta. – akohout

Problemi correlati