Wenn man das debug_kit Plugin benutzt und dann ThemeView benutzen will gibt es ein kleines Problem: Das debug_kit kommt mit einem eigenem View und überschreibt somit die im AppController definierte Eigenschaft.

Wer also Themes aktivieren will muss sich dem debug_kit entledigen. Hat ein wenig gedauert bis ich den Grund gefunden habe, aber ein wenig manuelles Debugging in “beforeRender” brachte Licht ins Dunkel. Hoffe ich kann mit der Info einigen ein paar Kopfschmerzen ersparen ;-)

—– English —–
If you are using the debug_kit plugin and you want to enable themes in your CakePHP application you will run into a problem. debug_kit comes with a own view and overwrites whatever $view you’ve setup in your controllers. So if you wonder why ThemeView is not working, just delete the debug_kit and it will work. I haven’t looked at the debug_kit code yet, but i guess there is no workaround to this.

Tutorials:
theming-with-cakephp
theming-your-cakephp-apps-v12
Themes Section/cookbook

—–

UPDATE: Ich habe Mark, den Autor des Plugins, darüber informiert und er schrieb mir heute zurück, dass es doch gemeinsam kompatibel sein sollte.

“[...]From the tests I did as long as $view is set in the controller before your action ie. in your beforeFilter() you should be fine.[...]“

Ich musste eine Menge Papierkram erledigen und wie das halt so laut Murphy ist wenn man sich dazu entschliesst: Tinte geht alle.

Also was macht man? Man geht zu seinem Elektromarkt seines Vertauens und wandert zum Druckerzubehör. Die Preise waren deftig. Ist aber nichts neues, denn sonst gäbe es in der Wirtschaft keinen Platz für Patronen-Nachfüller - Steh ich aber nicht drauf.

Hab mir als für mein Modell die Patronen zusammengesucht und kam auf rund 40 Euro. Auf dem Weg zur Kasse sah ich dann ein Angebot eines Druckers für 35 Euro mit Patronen inklusive. Hmm…

Also was macht man wenn nun die Patronen leer sind? Richtig! Einen neuen Drucker kaufen, den alten aus den Fenster werfen und Geld sparen. Die haben echt alle eine Macke…

Na mir soll’s egal sein.

Ich hab meinen Hoster gewechselt und bin jetzt auf Media Temple. Ich muss sagen das die Seite sich gefühlt schneller aufbaut als zuvor und die Features von MT wirklich super sind.

Vor allem interessiert mich aber noch der MySQL GridContainer. Für Web-Anwendungen sicherlich nicht schlecht. Der ganze Umzug verlief eigentlich reibungslos. CakePHP und Zend Framework hab ich direkt als PHP Include angelegt und die Apps kommen super damit klar. Backup Cron Job, SSL, Mails als IMAP und POP, alles kein Thema. Am besten find ich dass ich volle Kontrolle über die DNS Zone Files habe. Dafür habe ich bisher zahlen müssen.

Kurzum: Ich kann es wirklich empfehlen und der Service ist super. Zur Zeit warte ich noch auf eine Bestätigung für einen kostenlosen Ruby-on-Rails GridContainer, der mir ohne zu Fragen angeboten wurde. Falls ihr auch etwas mehr Power braucht und mit dem Gedanken spielt zu wechseln oder euch MT anspricht nutz meinen Link. Dann hab ich auch noch was davon. ;)

Wow.. genau das hab ich bei TM immer vermisst!

  • SCM Status-icons für Git und SVN alla TortoiseSVN
  • Automatische Sortierung der Ordner und Dateien
  • Farbige Markierungen für Ordner und Dateien
  • Projektstatus merken und wiederherstellen

Klingt fast zu schön um wahr zu sein, und dennoch muss man nur auf Ciarán Walsh’s Blog und sich das super kleine Plugin downloaden. :)

Yeah.. OpenSource!

Ich habe durch Zufall noch eine alte Amazon Komponente gefunden die ich bisher nicht veröffentlich habe. Da ich mich ja auf GitHub niederlasse, habe ich die mal kurz überarbeitet und meinem cake-bits Repository hinzugefügt.

Link:
http://github.com/m3nt0r/cake-bits/tree/master/components/amazon.php

Gucken, und ...

PHP:
  1. // some controller ...
  2.     var $components = array('Amazon');
  3.  
  4.     function beforeFilter() {
  5.         $this->Amazon->setAccessKey( Configure::read('App.APIs.AmazonKey') );
  6.         $this->Amazon->setAssociateTag( Configure::read('App.APIs.AmazonTag') );
  7.     }
  8.     function index() {
  9.         $items = $this->Amazon->itemSearch('DVD', 'Title', 'Small,Offers');
  10.         if (!$items) {
  11.             pr ($this->Amazon->getLastErrors()); // pop some errors
  12.         } else {
  13.             $this->set('items', $items);
  14.         }
  15.     }
  16.     function view($asin) {
  17.         $item = $this->Amazon->itemLookup( $asin );
  18.         if (!$item) {
  19.             pr ($this->Amazon->getLastErrors()); // pop some errors
  20.         } else {
  21.             $this->set('item', $item);
  22.         }
  23.     }

Das wäre das eine... Das andere ist der remote shopping cart.

... kaufen!

PHP:
  1. // some other controller ...
  2.     function add() {
  3.         if ($this->data) {
  4.             $this->Amazon->cartThem(array(
  5.                 array(
  6.                     'quantity' => $this->data['Cart']['quantity'],
  7.                     'offerId' => $this->data['Cart']['offerId']
  8.                 ) // ... could be a larger collection. no prob.
  9.             ));
  10.             $this->redirect(aa('action', 'view'));
  11.         }
  12.     }
  13.     function edit() {
  14.         if ($this->data) {
  15.             $item_id = $this->data['Cart']['cartItemId'];
  16.             $quantity = $this->data['Cart']['quantity'];
  17.             $this->Amazon->cartUpdate($item_id, $quantity);
  18.             $this->redirect(aa('action', 'view'));
  19.         }
  20.     }
  21.     function view() {
  22.         $this->set('cart', $this->Amazon->cartGet());
  23.         $this->set('cartHasItems', $this->Amazon->cartHasItems());
  24.         $this->set('cartIsActive', $this->Amazon->cartIsActive());
  25.     }

Viel Spass damit!

Ich mag ja Apple, aber heute weiss ich echt nicht was los ist.

Alles fing mit dem 2.0.2 Upgrade an. WLAN war tot. Einmal restored, nach 2 Downgrade Versuchen, und urplötzlich ging es doch mit 2.0.2. Okay.. das hat sich also erledigt.

Heute jedoch fing es an dass ich kein Dienst mehr hatte und mich gewundert habe wo die SMS Nachrichten bleiben.

Ich hab mich nicht weiter drum gekümmert, aber als ich dann in das Einstellungen Menü wollte hängte sich das iPhone auf. Ich konnte auch keinen Reset machen (nur Screenshots, hehe) und mir blieb nichts anderes übrig als es komplett auszuschalten.

Dann wollte ich starten aber kam anschliessend nicht über das Apple-Logo hinaus. Nichts ging mehr.

Also ab in den DFU Mode um das iPhone wiederherzustellen. Gesagt, getan, und irgendwie hab ich mich über das sehr frische Backup von gestern in dem Moment dann auch gefreut.

Nach dem ersten einspielen des Backups wurde ich nochmals aufgefordert ein Backup zu nutzen. Ich hab das natürlich angeklickt ohne weiter nachzudenken. Soll das iPhone ruhig alles restoren was geht..

Tja, und eben genau bei diesem zweiten Vorgang hing sich das iPhone bei 50% auf. Nichts ging mehr und die kleine Warte-Animation war eingefroren. => böse!

Ich hatte das erst nicht bemerkt da so ein Backup-Restore für gewöhnlich immer eine Weile dauert.

Nunja.. musste ich also wieder restoren aber ich werde mir das mit dem Backup klemmen. Das hat keinen Wert und ich glaube es kann damit Zusammenhängen dass ich zuviele Apps auf dem iPhone hatte. Ich habe da heute was drüber gelesen... Wie auch immer

Alles sehr anstrengend, Apple.

Ich will eine OS Version 2.1..
das mit 2.0.x wird wohl nichts mehr ;-)

Übrigens bin ich nun auch auf Jaiku. Das ist ungfähr das selbe wie Twitter, nur schöner.

Ich habe mich einladen lassen und mich so langsam eingelebt. Für alle Besucher gibt es daher nun auf der Startseite dieses Blogs den "Lifestream" auf der rechten Seite wo ihr meine neusten 5 Jaikus verfolgen könnt. Da ich nun auch das richtige Werkzeug besitze (iPhone 3G) werde ich das dort auch wohl entsprechend fortführen können.

Wer ist noch bei Jaiku??
Schreibt euren Benutzername einfach in die comments.

http://m3nt0r.jaiku.com/

Ich mag cheat sheets aka Spickzettel. Ich selbst hab immer einen für Prototype und YUI an der Wand hinter dem Monitor. Manchmal weiss man nicht mehr genau wie die Funktion oder Eigenschaft XY heisst. Man kann natürlich dann kurz in Google nachschlagen, aber viel einfacher ist eine Liste mit allen wichtigen Dingen zur Hand zu haben.

Scott Klarr hat einen Blogeintrag zusammengestellt wo so ziemlich alle wichtigen cheat sheets rund um PHP zum Download bereit stehen.

Mit dabei auch spezielle für Wordpress, Smarty, CakePHP und Drupal.

http://www.scottklarr.com/topic/100/php-cheat-sheets/

Thanks Scott!

Interessant sind auch seine weiteren Sammlungen für CSS, MySQL und XML/XSLT.

Justin Palmer hat ein Snippet für Prototype gepostet welches das Date Object um strftime() erweitert.

JAVASCRIPT:
  1. Object.extend(Date.prototype, {
  2.   strftime: function(format) {
  3.     var day = this.getDay(), month = this.getMonth();
  4.     var hours = this.getHours(), minutes = this.getMinutes();
  5.     function pad(num) { return num.toPaddedString(2); };
  6.  
  7.     return format.gsub(/\%([aAbBcdHImMpSwyY])/, function(part) {
  8.       switch(part[1]) {
  9.         case 'a': return $w("Sun Mon Tue Wed Thu Fri Sat")[day]; break;
  10.         case 'A': return $w("Sunday Monday Tuesday Wednesday Thursday Friday Saturday")[day]; break;
  11.         case 'b': return $w("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec")[month]; break;
  12.         case 'B': return $w("January February March April May June July August September October November December")[month]; break;
  13.         case 'c': return this.toString(); break;
  14.         case 'd': return pad(this.getDate()); break;
  15.         case 'H': return pad(hours); break;
  16.         case 'I': return pad((hours + 12) % 12); break;
  17.         case 'm': return pad(month + 1); break;
  18.         case 'M': return pad(minutes); break;
  19.         case 'p': return hours> 12 ? 'PM' : 'AM'; break;
  20.         case 'S': return pad(this.getSeconds()); break;
  21.         case 'w': return day; break;
  22.         case 'y': return pad(this.getFullYear() % 100); break;
  23.         case 'Y': return this.getFullYear().toString(); break;
  24.       }
  25.     }.bind(this));
  26.   }
  27. });

[via Justin Palmer]

Schön gelöst. Weitere ähnliche Schnippsel von ihm gibt es im GitHub.

Nur zur Erinnerung: Auf die neuste Wordpress Version 2.3.3 aktualisieren!

Wenn ihr grad keine Lust habt die gesamte Installation zu aktualisieren, dann tauscht wenigstens die xmlrpc.php aus.

Diese ist mit das beliebteste Ziel.