Willkommen und hereinspaziert in die Welt von CakePHP
Aufgrund der geringen Informationsdichte über CakePHP im großen deutschen World Wide Web entwickelte sich dieses Forum rasant an einem kommunikativen Abend in Bremen. Natürlich nicht von Heut auf Morgen, aber recht zügig.
Erheblich viele Programmierer suchen nach Tipps und Tricks für die Entwicklung mit CakePHP. Egal ob es Probleme bei der Installation oder der Konfiguration sind, oder Unklarheit in Sachen Model, View, Controller. Neben DIEVOLUTION gibt es nicht viele Informationen aus der deutschen CakePHP-Szene.
Ihr werdet sicherlich die ein oder andere nette Information dort finden. Wenn es dann mal angelaufen ist. Als erstes deutsches CakePHP Forum wird das sicher nicht so leicht, aber warten wir ab…
Also bitte: Support für die CakePHP Forum-Crew
In meinem Artikel Inhalte mit jQuery und AJAX aktualisieren beschreibe ich eine von wahrscheinlich vielen Varianten, den Inhalt eines Div-Layers per AJAX-Request zu tauschen. Dabei benutze ich das Javascript-Framework jQuery.
Toni schrieb mir in den Kommentaren, das es bei langsameren Server zu Unsynchronität der verschiedenen Vorgänge kommt, was wohl an dem setTimeout in Kombination mit dem Fade-Out-Effekt liegt. Hier ein neues Snippet in dem das Problem gefixt sein sollte. Toni greift einfach auf die Callback-Funktion des FadeOut-Effekts zurück und braucht somit den setTimeout nicht mehr.
1 2 3 4 5 | ... <a href="javascript:void(0);" id="id_des_href">Inhalt aktualisieren</a> <div id="container">Mein Inhalt</div> ... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $(document).ready(function(){ $('#id_des_href').click(function(){ $('#container').fadeOut(500, function(){ change('test.html') } ); }); function change(loc){ $.ajax({ url: loc, type: 'POST', success: function( neueDaten ) { $('#container').html( neueDaten ); }, complete: function(){ $('#container').fadeIn(500); } }); } }); |
Zur Erklärung:
In Zeile 3-5 setzen wir das OnClick-Event des a-Tags mit der Id id_des_href. Bei Klick auf den Link wird dann der Div-Layer mit der Id container (innerhalb von 500ms) ausgeblendet und anschließen die Javascript-Funktion change() aufgerufen.
In Zeile 7-18 wird die Funktion change() definiert. Beim Aufrufen der Funktion übergibt man eine Datei als Parameter, welche dann für den AJAX-Request benutzt wird. Konnte die Datei aufgerufen und geladen werden, wird der Inhalt des Div-Layers mit der Id container mit dem Inhalt der Datei (loc) ausgetauscht. (Zeile 12) Der Container ist in diesem Moment ausgeblendet, so bekommt man von dem Wechseln nichts mit. Ist der AJAX-Request beendet (complete) dann wird der Div-Layer mit der Id container wieder eingeblendet.
Seit der Erscheinung des FormHelper 1.2 in CakePHP ist sicher schon einigen aufgefallen, dass die neuen Funktionen (wie zum Beispiel das Div-Wrapping oder die automatische Erstellung von Labels zu dem Input-Field) beim Password-Field nicht vorhanden sind.
Die Funktion $form->password erscheint somit auf den ersten Blick veraltet. Da man aber in der Drupal API keinen Verweis auf $form->input findet, weiss man im ersten Moment nicht weiter. So ging es auch mir, bis ich feststellen musste, dass die Password-Function im FormHelper nicht nur veraltet, sondern von der Input-Funktion ersetzt wurde. Um mit der neuen FormHelper-Version ein Passwot-Feld zu erstellen, muss man nur den Type “password” angeben. Und fertig ist die Suppe…
$form->input("Feldname", array('type' => 'password'));
Weitere Eigenschaften sind zum Beispiel noch “label” und “div” über die sich gleichnamiges steuern lässt.
Wenn man in cakePHP eine Breadcrumb so
1 2 3 | <?php echo $html->getCrumbs(' / ', 'Start') ?> |
benutzt, wird man schnell feststellen, dass die Breadcrumb nur Angezeigt wird, wenn man sich auf einer Unterseite befindet auf welcher über
1 2 3 | <?php $html->addCrumb('Title', '/link') ?> |
ein Breadcrumb-Element hinzugefügt wurde. Das ist schade, denn vielleicht möchte man ja auch schon auf der Home-Seite die Breadcrumb angezeigt bekommen. Um diesem Wunsch nachzukommen, kann man den Code in der Layout-Datei wie folgt abändern.
1 2 3 | <?php echo ($html->_crumbs) ? $html->getCrumbs(' / ', 'Start') : $html->link('Start','/'); ?> |
Falls irgendwer eine andere Möglichkeit kennt – ich bin noch neu in der Bäckerei – dann würde ich mich sehr darüber freuen, diese auch kennen zu lernen.
UPDATE 28.02.2008 // Überarbeitete Version (Danke Toni)
Möchte man einen bestimmten Bereich auf seiner Seite per AJAX aktualisieren, so ist das mit Hilfe von jQuery leicht gemacht. Einfach einen AJAX-Aufruf über $.ajax starten und in der success-Funktion die aktuellen Daten per jQuery mit den alten austauschen. Read the rest of this entry »
Ich habe mir schon öfters mal nen Web-Server auf meinem System installiert, aber irgendwie hat es mich immer genervt zwei Web-Server installiert zu haben. Deshalb habe mich dazu entschlossen, den von Mac OS X Tiger mitgelieferten Web-Server (Apache) zu benutzen. Allerdings bietet dieser nur PHP4 und leider auch kein MySQL. Wir müssen also erstmal ein paar Aktualisierungen vornehmen. Read the rest of this entry »