Logo: deam.org

Posts Tagged ‘$javascript->codeBlock’

codeBlock und object: JSON mit CakePHP

Wednesday, October 15th, 2008

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: , ,
Posted in PHP/ PHP-Frameworks/ CakePHP | 4 Comments »

Blog :: deam.org is proudly powered by WordPress
Entries (RSS) and Comments (RSS).