Named Scopes in CakePHP 1.2
Ein neues Lieblingsfeature von mir!
Wer schon mal mit der AuthComponent zu tun hatte kennt sicherlich den Begriff „scope“, womit man festlegen kann welche Bedienung ein Benutzer erfüllen muss damit er sich einloggen kann. Für all die die es nicht Wissen, hier eine Kurzfassung in Bezug auf das Thema dieses Beitrags: Ein „Scope“ ist eine definierte Eingrenzung von Daten. „Named“ bedeutet, dass wir dieser Eingrenzung einen Namen geben.
(more…)
CakePHP 1.2 Themes + Debug_Kit = Problematic
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.[...]“
Jetzt auf Media Temple
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. ;)
AmazonComponent für CakePHP 1.2
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 ...
-
// some controller ...
-
-
function beforeFilter() {
-
$this->Amazon->setAccessKey( Configure::read('App.APIs.AmazonKey') );
-
$this->Amazon->setAssociateTag( Configure::read('App.APIs.AmazonTag') );
-
}
-
function index() {
-
$items = $this->Amazon->itemSearch('DVD', 'Title', 'Small,Offers');
-
if (!$items) {
-
pr ($this->Amazon->getLastErrors()); // pop some errors
-
} else {
-
$this->set('items', $items);
-
}
-
}
-
function view($asin) {
-
$item = $this->Amazon->itemLookup( $asin );
-
if (!$item) {
-
pr ($this->Amazon->getLastErrors()); // pop some errors
-
} else {
-
$this->set('item', $item);
-
}
-
}
Das wäre das eine... Das andere ist der remote shopping cart.
... kaufen!
-
// some other controller ...
-
function add() {
-
if ($this->data) {
-
'quantity' => $this->data['Cart']['quantity'],
-
'offerId' => $this->data['Cart']['offerId']
-
) // ... could be a larger collection. no prob.
-
));
-
$this->redirect(aa('action', 'view'));
-
}
-
}
-
function edit() {
-
if ($this->data) {
-
$item_id = $this->data['Cart']['cartItemId'];
-
$quantity = $this->data['Cart']['quantity'];
-
$this->Amazon->cartUpdate($item_id, $quantity);
-
$this->redirect(aa('action', 'view'));
-
}
-
}
-
function view() {
-
$this->set('cart', $this->Amazon->cartGet());
-
$this->set('cartHasItems', $this->Amazon->cartHasItems());
-
$this->set('cartIsActive', $this->Amazon->cartIsActive());
-
}
Viel Spass damit!
Neue Lightbox 2 Plugin Version und GitHub
Hallo zusammen. Es ist einige Zeit her dass ich mal was geschrieben habe. Ich werde versuchen nun wieder öfters eine halbe Stunde opfern zu können.
Es gibt nun eine neue Lightbox Version. Da die bisherige 0.7 eigentlich in seiner Grundfunktion immernoch kompatibel ist gab es hier nicht viel zu tun. Daher trägt die aktuelle Version den Titel 0.7a.
Was gibt's neues?
- Settings Seite funktioniert endlich richtig.
- Neuste Lightbox 2 in der Version 2.0.4 enthalten
- Komprimiertes Javascript (nur noch 48kb, dank gzip)
- Nur noch 1 DB Feld wird für die Einstellungen verwendet (statt 8)
- Repository auf GitHub angelegt. Dort gibt's immer die neuste Version.
- Admin Panel hübsch gemacht für WP 2.6+
Die gute alte Projekt Seite (zip)
Die neue Seite auf GitHub
Readme liegt bei, alles andere kennt ihr bestimmt ja. Upgrade: Ich empfehle den Uninstall Button im Adminmenü einmal zu drücken nachdem ihr die neue Version hochgeladen habt. Diese räumt den alten Mist aus der Datenbank. Danach geht ihr einfach nochmal auf die Lightbox Settings Seite und somit wird automatisch neu installiert. :)
Viel Spass!
PHP cheat sheets – Nützliche Helferlein
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.
Javascript Version von strftime() für Prototype
Justin Palmer hat ein Snippet für Prototype gepostet welches das Date Object um strftime() erweitert.
-
Object.extend(Date.prototype, {
-
strftime: function(format) {
-
var day = this.getDay(), month = this.getMonth();
-
var hours = this.getHours(), minutes = this.getMinutes();
-
function pad(num) { return num.toPaddedString(2); };
-
-
return format.gsub(/\%([aAbBcdHImMpSwyY])/, function(part) {
-
switch(part[1]) {
-
case 'a': return $w("Sun Mon Tue Wed Thu Fri Sat")[day]; break;
-
case 'A': return $w("Sunday Monday Tuesday Wednesday Thursday Friday Saturday")[day]; break;
-
case 'b': return $w("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec")[month]; break;
-
case 'B': return $w("January February March April May June July August September October November December")[month]; break;
-
case 'c': return this.toString(); break;
-
case 'd': return pad(this.getDate()); break;
-
case 'H': return pad(hours); break;
-
case 'I': return pad((hours + 12) % 12); break;
-
case 'm': return pad(month + 1); break;
-
case 'M': return pad(minutes); break;
-
case 'p': return hours> 12 ? 'PM' : 'AM'; break;
-
case 'S': return pad(this.getSeconds()); break;
-
case 'w': return day; break;
-
case 'y': return pad(this.getFullYear() % 100); break;
-
case 'Y': return this.getFullYear().toString(); break;
-
}
-
}.bind(this));
-
}
-
});
[via Justin Palmer]
Schön gelöst. Weitere ähnliche Schnippsel von ihm gibt es im GitHub.
Emanzipiertes Javascript und das Coming-out der Flash Community
Ich bin grad so durch die Gegend gesurft und fand dabei folgende Slideshow von Chris Heilmann. Diese fand ich so genial das ich sie einfach bloggen musste. Von mir ein persönliches Dankeschön für diesen amüsanten Abriss der letzten Jahre im Javascript-Land.
Zu den ermutigenden Worte an die Flash-Crowd schliess ich mich an: "Ich will" auch haben :-)

