Eine View ohne das Layout rendern mit Ajax.Update

8 views
Skip to first unread message

Kristof Dreier

unread,
Jun 27, 2007, 1:22:27 PM6/27/07
to CakePHP-de für deutsche CakePHP Entwickler
Hallo,

Über einen Ajax.Update-Aufruf möchte ich gerne den Inhalt eines divs
ändern.

Ajax.Update('mydiv', '/controller/action');

Das Problem an der Sache ist, dass das mydiv dann mit dem ganzen
Layout gefüllt wird und nicht nur mit der View von der Action. Gibt es
da eine Möglichkeit in der Action die gerenderte View zurückzugeben,
ohne dass er mir das komplette Layout mitrendert? Ich hoffe es ist
verstanden worden, was ich meine.

Vielen Dank schonmal :-)

Grüße
Kris

Jones

unread,
Jun 27, 2007, 1:37:28 PM6/27/07
to CakePHP-de für deutsche CakePHP Entwickler
Schreibe folgendes in die action:

$this->RequestHandler->setAjax($this);

Wenn der Aufruf dann per Ajax erfolgt, erhälst du die Seite ohne
Layout, sonst mit. Oder um es gleich für alle actions zu machen,
kannst du es auch gleich in beforeFilter schreibern.

Jones

unread,
Jun 27, 2007, 1:38:40 PM6/27/07
to CakePHP-de für deutsche CakePHP Entwickler
Hab noch was vergessen: Du musst noch die RequestHandler-Component
einbinden.

Kristof Dreier

unread,
Jun 27, 2007, 2:15:23 PM6/27/07
to CakePHP-de für deutsche CakePHP Entwickler
Super, funktioniert.

Dank dir für die schnelle Antwort :)

Timo Derstappen

unread,
Jun 27, 2007, 4:19:21 PM6/27/07
to cakep...@googlegroups.com
Über den RequestHandler kannst Du im Controller herausfinden, ob das
Request per Ajax abgesetzt wurde.

Im Controller die Komponente einbinden:
var $components = array('RequestHandler');

dann kannst du in den Methoden z.B. nur ein Element rendern
function index() {
$this->set('data', $this->Model->findAll());
if ($this->RequestHandler->isAjax()) {
$this->render('../elements/mydiv');
exit;
}
}

Der RequestHandler setzt dann automatisch dein Layout auf 'ajax' und
rendert nicht das default Layout um den Content.

Grüße,
Timo


--
Timo Derstappen

http://teemow.com
mailto:tee...@gmail.com

J. Eckert

unread,
Jun 29, 2007, 3:05:04 AM6/29/07
to CakePHP-de für deutsche CakePHP Entwickler
> $this->RequestHandler->setAjax($this);

Problem: Die Funktion gibts in 1.2. nicht mehr!
Also ist es vermutlich besser entsprechend abzufragen ob über Ajax
Requested wird und dann das Layout zu setzen. Sonst bist du mit dem
Code nicht aufwärtskompatibel.

z.B.

function beforeFilter {
if ($this->RequestHandler->isAjax()) {
$this->layout = 'ajax';
}
}

Timo Derstappen

unread,
Jun 29, 2007, 4:16:19 AM6/29/07
to cakep...@googlegroups.com
Stimmt ich hab Blödsinn erzählt, mein AppController setzt mir
automatisch das Layout auf ajax und nicht Cake selbst :)

Reply all
Reply to author
Forward
0 new messages