Mrz
03

Screencasts für CakePHP

Vorgestern hatte ich mich im IRC mit David unterhalten über diverse Anfängerprobleme. Leider bin ich erst recht spät daraufgekommen, dass es für CakePHP einige Screencasts gibt, die einen schnellen Einstieg ermöglichen.
Hier die Liste der verfügbaren Screencasts. Ich musste übrigens die Quicktime Filmchen doppelt anklicken, da die sonst nicht losgelaufen sind.

Zusätzlich habe ich bei David Golding noch weitere Screencasts zu Cake gefunden, die das Angebot sicherlich gut ergänzen.

Hab ich was vergessen oder übersehen? Dann bitte in den Kommentaren nachtragen, dann kann ich es ergänzen.

Mrz
02

Buchreview: Webentwicklung mit CakePHP

Bei der ersten CakeBar hatten Sebastian und ich das Vergnügen auch die beiden Autoren, Dirk Ammelburger und Robert Scherer von dem Buch Webentwicklung mit CakePHP (Affiliate Link) am Stammtisch zu haben. Das Buch kam als erstes deutsches Buch über CakePHP heraus und war auch das Erkennungszeichen am Stammtisch. Es war ziemlich spannend zu hören, wie sich das Buch entwickelt hat. Teile wie das Kapitel über ACL entstand in enger Zusammenarbeit mit Nate Abele, der ACL implementiert hat. Das Buch gibt einen guten Einstieg in CakePHP, hilft über viele Anfangshürden und beschreibt ziemlich alle Bestandteile des CakePHP Frameworks. Es wurde zwar kritisiert, dass kleine Fehler im Buch sind, aber das wird durch das von den beiden Autoren geführte Errata zum Buch ausgeglichen und sicherlich auch in den Folgeauflagen behoben. Da ich gerade dabei war und nach Büchern über JQuery in der Google Buchsuche gestöbert habe - leider nichts mit Vorschau gefunden - bin ich aber zufällig wieder über das Cake-Buch gestolpert und dachte, dass es sicherlich für den einen oder anderen Sinn macht, mal einen Blick in das Buch zu werfen, bevor man es sich zulegt. Ich selbst nutze das Buch als Nachschlagwerk und hab es immer in der Nähe meines Schreibtisches.

PS: haben die Münchner mal wieder Lust auf einen Stammtisch?

Mrz
01

Buchtipps für jQuery

Heut nur ganz kurz. Frank Helmschrott @helmi hat in seinem Blog sich ein paar Bücher zu jQuery angeschaut. Das ergänzt die Infos zu jQuery und CakePHP von gestern ganz gut.

  • Learning Jquery 1.3
  • Jquery in Action

Wem Bücher lesen gerade nicht so zusagt, der kann auch mal bei YouTube vorbeischauen und sich dort ein paar jQuery Tutorials antun. Zum Teil sind die Tutorials aber noch sehr rudimentär, aber wer grad damit anfängt, findet vielleicht den einen oder anderen Tipp.

Feb
28

CakePHP und jQuery. Tutorials und Tipps

Die letzten Tage hab ich ja schon mal nachgefragt, wie es denn mit Tipps für CakePHP und jQuery ausschaut. Jetzt hab ich mir mal eine Liste von Links zusammengesucht, die ich mir für den ersten Überblick mal herausgesucht habe. Vielleicht kann ja der eine oder andere mit der Liste etwas anfangen:

  1. JQuery autocomplete in CakePHP ” nuts and bolts of cakephp
  2. JQuery in the CakePHP world (part 1 - the basics) ” nuts and bolts of cakephp
  3. JQuery in the CakePHP world (part 2 - is client side code all that great?) ” nuts and bolts of cakephp
  4. jQuery Helper | The Bakery, Everything CakePHP : Articles
  5. Easy AJAX Pagination Using JQuery (Articles) | The Bakery, Everything CakePHP
  6. Felix Geisendörfer - Jquery and CakePHP by Mark Story, Cake Development Corporation
  7. AJAX failure catchall callback with jQuery and cakePHP : AJAX failure callback with jQuery
  8. Setting up TinyMCE with jQuery and CakePHP 1.2 | Late Night PC
  9. Ajax-Login mit jQuery und CakePHP | Hackthenet-Blog
  10. Edit in place with JQuery and CakePHP - cakebaker
  11. Cake PHP useful tips: List, JQuery & CakePHP
  12. Tutorial - CakePHP Ajax “Quick Save” with jQuery: CakePHP, jQuery
  13. With jQuery & CakePHP to World Domination
  14. jMaps - The jQuery Map Framework - Digital Spaghetti
  15. JQuery UI and CakePHP - Stack Overflow
  16. Ajax File Uploading with Cake and jQuery (ergänzt)
  17. jQuery example overview
  18. PQuery - PHP and JQuery | NGCoders - Next Generation Coders
  19. miPHP :: Blog :: Cakephp Helper For Jquery Validation Plugin

Nicht alles nur CakePHP, aber auf jeden Fall jQuery. Wenn ihr noch weitere Links und Tipps habt, dann einfach in die Kommentare und ich werde das Ganze dann weiter ergänzen.

Feb
25

Shellprogrammierung mit CakePHP

Wer bei CakePHP einsteigt fängt möglicherweise mit der Generierung über die Cake Console an. CakePHP verfügt nämlich über einige Befehle, die ganze Anwendungen erzeugen können. Scaffolding, Bake und die Console sind die Stichworte und vieles davon kann im Handbuch nachgelesen werden. Lohnt auf jeden Fall.
Für eine aktuelle Anwendung habe ich ebenfalls mit Shell-Scripten gearbeitet. Allerdings setzt es voraus, dass man die Möglichkeit hat, Cronjobs aufzusetzen. Ist also mit einfacheren Webspace-Angeboten meist nicht zu realisieren. Wenn man aber die Möglichkeit hat, lohnt es auf jeden Fall darüber nachzudenken, welche Aufgaben einer Anwendung im Hintergrund ablaufen könnten. Bei Anwendunge beispielsweise könnte der Versand der Benachrichtungsmail auch kurze Zeit später erfolgen. Somit kann die Webanwendung im Vordergrund von dieser Aufgabe entlastet werden.
In Cake Shellanwendungen hat man Zugriff auf Models und kann also prima Daten aus der Datenbank auslesen und somit die Emails für den Versand entsprechend versenden, wenn die Markierungen in der Datenbank sind.

class NotificationShell extends Shell
{
    var $User = null;
 
     function main() {
            $this->User = ClassRegistry::init('User');
            $data = $this->User->find('all');
            // $data verarbeiten
     }
}

Genauso einfach wie man Models instanzieren kann, lassen sich auch Komponenten laden und benutzen, wie beispielsweise die TwitterComponent.

        if (is_null($this->Twitter)) {
            App::import('Component', 'Twitter');
            $this->Twitter = new TwitterComponent();
 
            $this->Twitter->username = 'twittername';
            $this->Twitter->password = 'meinPasswort';
       }

Cake Shellscripte werden dann einfach über den cake Befehl in der Form

     cake notification

aufgerufen. Das Shell-Script wird in APP/vendors/shells angelegt und bekommt den gleichen Namen wie die Shell. Also im obigen Beispiel wird die NotificationShell in der Datei notification.php angelegt.

Feb
24

CakePHP und jQuery

Heute mal eine Frage an die jQuery-Nutzer. Bisher habe ich in allen Projekten immer Prototype genutzt, da es unter anderem ja auch von CakePHP unterstützt wird. Allerdings will ich mir in Zukunft jQuery genauer anschauen und suche nun ein paar Tipps, wie man damit am Besten einsteigen kann.
Am liebsten wären mir eigentlich gute Beispiele für den Einsatz von jQuery in Cake Anwendungen um von Best-Practice Beispielen zu lernen. Da ich Javascript nicht im HTML-Code programmieren will, was ich auch mit Prototype schon vermeide, aber über den Ajax-Helper derzeit ja nicht untersützt wird, wären also Beispiele interessant, die es entsprechend einsetzen.

Any tipps ?

Feb
23

NoseRub installieren und testen

NoseRub bietet ein dezentralisiertes Social Network, mit dem man den eigenen LifeStream selbst hosten kann. Da NoseRub auf CakePHP basiert, steht es schon länger bei mir auf der Todo-Liste, es endlich zu installieren. Gestern abend gelang es mir auch die erste Version ans Laufen zu bringen. NoseRub wird derzeit noch aktiv entwickelt und stellt wie so oft in diesem Bereich Beta-Software dar. Die kurze Installationsanleitung bietet zwar Anhaltspunkte, aber die CakePHP-Kenntnisse kann man ganz gut brauchen, um schnell voran zu kommen.

Bisher läuft alles noch im Standardmodus, sprich ich muss noch die Cronjobs aufsetzen, denn NoseRub holt im Hintergrund die externen (RSS-)Feeds ab und verarbeitet sie in seine Datenbanktabellen. Aber das muss ich mir alles noch näher anschauen. Alleine die umfangreiche routes.php Tabellen brauchen noch eine nähere Inspektion um zu sehen, wo was zu finden ist. Aber dazu bald noch mehr.

NoseRub hat den Vorteil, dass es eigentlich ein Protokol darstellt mit einer Beispielimplementierung, die unter anderem auch auf Identoo.com zu sehen ist. Bisher finde ich aber die Bedienung noch ein wenig verschlungen und was ich vorallem mal austesten möchte, sind neue Views für den LifeStream.

Feb
18

Wie man User-Routes erstellen kann

CakePHP bietet von Haus aus ein sehr flexibles System um URL auf Controller und Action umzusetzen. Viele URLs sehen deshalb etwas so aus:

   http://meinedomain.de/users/view/username

Der Controller ist also users>.
Die Action heißt in dem Fall view.
Der dritte Teil wird dann als Parameter in die Action des Controllers übergeben und kann einfach über

   function view($username)

verarbeitet werden.

In vielen Fällen wäre es aber schöner, wenn die URL einfach so aussehen würde:

   http://meinedomain.de/username

Mit Hilfe der Klasse Routes lässt sich das auch so oder so ähnlich umsetzen. Im einfachsten Fall würde das so aussehen:

   Routes::connect('/*', array('controller'=>'users', 'action'=>'view'));

Allerdings führt das zu dem Problem, dass alle anderen Controller und Actions nicht mehr erkannt werden.
Das kann man recht einfach dadurch lösen, dass man die genutzten Controller vor der oben genannten Route auflistet, was dann in etwa so aussehen würde, wenn man davon ausgeht, dass es noch einen PagesController und einen ProjectsController gibt:

   Routes::connect('/pages/*', array('controller'=>'pages', 'action'=>'display')); // nur display
   Routes::connect('/projects', array('controller'=>'projects')); // alle actions
   Routes::connect('/*', array('controller'=>'users', 'action'=>'view')); // die Usernamen hier zuletzt abfangen.

Vielleicht gibt es dazu ja auch noch eine geschicktere Lösung, aber damit bin ich bisher ganz gut ausgekommen und werde es in Kürze auch auf der Twitter-Anwendung http://21tweets.com einbauen.

Feb
13

Twitter Timeline und Twitter Search-Api-Component

Sehr schöne Anwendung der Javascript Timeline Bibliothek zur Darstellung von CakePHP Nachrichten die auf Twitter erscheinen.

Eine Cake Componente für die Twitter Search API habe ich vorkurzem zusammengeschrieben.

//  Twitter Search API (Json)
//
    App::import('Core', array('HttpSocket'));
    /**
     * Twitter Search
     * Documentation can be found on:
     * http://apiwiki.twitter.com/
     * http://apiwiki.twitter.com/Search+API+Documentation
     */
    class TwitterSearchComponent extends Object {
        var $Http = null;
        var $apiUrl = 'http://search.twitter.com/search.json';
 
        function __construct() {
            $this->Http =& new HttpSocket();
        }
 
        function query($url = null, $rpp = 25)
        {
            if (!empty($url)) {
                $params = array(
                    'q'=>$url,
                    'rpp'=>$rpp
                    );
                $response = $this->Http->get($this->apiUrl, $params);
                if (function_exists('json_deconde')) {
                    return json_decode($response);
                } else if (App::import('Vendor', 'json', array('file'=>'JSON.php'))) {
                    $json = new Services_JSON();
                    return $json->decode($response);
                }
                return false;
            }
        }
    }
Feb
12

a, aa, am, e, h und clearCache

CakePHP bietet in der Datei basics.php einige sehr praktische Funktionen, auf die ein genauer Blick sich lohnt. Auslöser für mich das das Posting von teknoid über die Funktion pr() bzw. debug(), die beide ebenfalls in basics.php zu finden sind.

Die Funktion clearCache() kann ohne Argumente aufgerufen werden und löscht alle Cache-Views, die in CACHE.DS.views enthalten sind. Zusätzlich bietet clearCache die folgenden Parameter, mit denen sich recht individuell Dateien aus dem Cache löschen lassen.

function clearCache($params = null, $type = 'views', $ext = '.php')

Mehr dazu in der Doku.

Oben