2012-12-29 11 views
9

Obecnie mam dużą aplikację CakePHP z układem i dużą ilością widoków. W układzie ładuję pliki JavaScript w nagłówku, które są potrzebne większości widoków. W widokach ja albo ładuję dodatkowe pliki JavaScript (np. Ładuję plik biblioteki, który jest tam potrzebny), albo dodam kod JavaScript, który jest istotny tylko dla tego widoku w znaczniku skryptu, na przykład, gdy potrzebuję kliknięcia treser.Załaduj pliki JavaScript w układzie CakePHP na "dole"

Ponieważ jest to znany fakt, że ładowanie plików JavaScript w blokach głowicy HTML ładowanie strony, chciałem umieścić je na dole przed zamknięciem tagu ciała. Ale jeśli to zrobię, JavaScript w moich widokach, które ładują zawartość, zrywa się, ponieważ nie ma informacji o moich wczytanych plikach JavaScript. Rozumiem, że kod Javascript w wczytanych widokach jest wykonywany przed załadowaniem moich plików. Ale jak mogę temu zapobiec?

obecnie używam Pomocnika HTML w układzie (i wszędzie indziej), aby załadować swoje pliki JS tak:

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

i używam JS Helper do „wyjścia” JS na koniec strona z

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

Czy istnieje sposób mogę dołączyć mój kod JS w poglądach, tak że jest on wykonywany, gdy zgłoszę writeBuffer? Czy to może mi pomóc?

Odpowiedz

12

To, co robię, moim zdaniem:

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

I to jest to, co robię na dnie mojego układ:

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

Myślę, że to dobre rozwiązanie i myślę, że to działa, jeśli wstawię cały mój kod śródliniowy w widokach w plikach JavaScript. Dzięki za radę! – akohout

17

Od CakePHP wersji 2.1 można użyć bloków skryptu:

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

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

Takie podejście pozwala zachować echo $this->fetch('script') w <head> z układu na wypadek, gdybyś potrzebował jakichś skryptów na górze.

+0

Dzięki za odpowiedź. W rzeczywistości znalazłem już twoją odpowiedź gdzieś w sieci i ją zintegrowałem, ale na pewno warto tu wspomnieć, ponieważ kończy ona odpowiedź. – akohout

Powiązane problemy