Mit $javascript->codeBlock lässt sich recht elegant Javascript-Code einbetten (vor allem interessant, wenn man die ein oder andere Referenzinformation für eine JS-Funktion zur Verfügung stellen will – und das ohne AJAX).
$javascript->codeBlock(“alert(‘hallo’);”, array(‘inline’ => false));
Das ‘inline’ => false ist Gold wert. Hat man in seinem default.ctp schön brav <?php echo $scripts_for_layout ?> in den <head> geschrieben, dann wird der JS-Code nicht mitten in die Seite “geschmiert”, sondern schön in den <head>-Bereich des Dokuments platziert. Sowas sorgt für Ordnung.
$javascript->object($this->viewVars['adressenstatus'], false, ‘adressenstatus = ‘, ‘;’);
Die object-Funktion macht aus einem Array entsprechend JSON – mit allem was dazugehört. In diesem Fall beziehe ich mich auf ein zweidimensionales Array, welches ich sowieso für die Ausgabe eines Popups brauche. Das $this->viewVars['adressenstatus'] wird mit einem Präfix ‘adressenstatus = ‘ und einem Suffix ‘;’ versehen. Und schon habe ich ein schönes Javascript-Objekt. Das sieht dann in etwa so aus:
adressenstatus = {"Mitgliedschaft":{"1":"Plus-Mitgliedschaft","2":"Standard-Mitgliedschaft","3":"Gruppen-Mitgliedschaft"},"sonstiges":{"0":"Neuanmeldung","4":"Interessent","5":"Multiplikator","6":"Referent","7":"ruhende Mitgliedschaft","8":"Presse\/ \u00d6ffentlichkeitsarbeit\n"}};
Jetzt kombiniere ich beides und schwups hängt das ganze im <head>-Bereich meiner Seite:
$javascript->codeBlock($javascript->object($this->viewVars['adressenstatus'], false, 'adressenstatus = ', ';'), array('inline' => false));
Die Funktion $javascript->object werde ich wohl noch recht oft einsetzen. Vor allem auch in Zusammenhang mit AJAX.
Ziel der Übung von oben ist es bei einem onchange-Event eines Popups entsprechende Formularteile ein- oder auszublenden. Hier macht es imho wenig Sinn mit einem XHTTP-Request zu arbeiten, wenn der Datenumfang des Popups klein ist (in diesem Fall ja nur 9 Datensätze). Da liefert man das Objekt für Javascript einmal im <head> und bezieht sich dann entsprechend darauf.
Tags: $javascript->codeBlock, $javascript->object, PHP/ PHP-Frameworks/ CakePHP
Posted in PHP/ PHP-Frameworks/ CakePHP | 4 Comments »