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!
new Effect.Transfer :)
Ich gebe zu das ich mir diesen Effekt nicht selber ausgedacht habe. Ich habe ihn in der jQuery Interface Bibliothek gefunden und fand ihn super. Da ich mich aber nich dazu hinreissen lassen kann den Schreibstil von jQuery zu behalten, bleibe ich in meinem aktuellen Projekt bei Prototype und Script.aculo.us. Nun wollte ich den Effekt aber nicht missen und habe ihn daher mit Hilfe der SAUS nachempfunden.
Habe ihn in Opera9, IE 6 und 7, sowie Firefox ausgiebig getestet und er funktioniert so schön und schnell wie ich es mir gewünscht habe. Der Effekt ist, dass ein Objekt von A nach B kopiert wird und unterwegs auf die Grösse des Ziels transformiert wird. Mögliche Anwendungen ist z.b. für das Füllen eines Warenkorbs oder ähnliches. Funktioniert mit Inline und Block Elementen. Der Code ist unter 2K und tut das was er soll.
new Effect.Transfer('quelle', 'ziel', {duration: 1, transferer: 'css-klasse'});
jQuery Ajax Star Rating
Für ein aktuelles Projekt brauchte ich so eine hübsche Sternchenbewertung. Meine Wahl fiel auf Komodo Medias CSS Lösung, da diese einfach in den meisten Browsern funktioniert und kein Javascript benötigt. Aber mit Javascript ist eben nun mal alles viel schöner und da das Projekt mit jQuery produziert wird, stiess ich auf ein Plugin das ähnlich aussah, aber eben dynamisch generiert wurde. Tolle Idee! Leider nicht so tolle Browserunterstützung. Im IE6 verschwanden die Grafiken. Schade.
Ich habe daher auf Basis des Skripts mein geliebtes Komodo-system eingebaut und die Funktion noch ein wenig erweitert und zum Teil verbessert. Es ist möglich unendlich viele Sterne mit der Komodo Methode zu haben (anstatt nur 5 mit statischen CSS Klassen). Mein Plugin rechnet die nötigen Werte selber aus.
Natürlich sind die sehr nützlichen Optionen des Vorgängers geblieben. Man kann festlegen wieviele Sterne, wieviele vorausgewählt sein sollen und an welche Adresse das Ergebnis des Klicks gesandt werden. Ich habe allerdings eine Callback Funktion eingebaut die das ebenfalls dynamisch erstellte Ergebnis-Element mit dem HTML der XHR Response füllt. Click->POST->Result.
Ich habe eine Demo-Seite erstellt wo man das 5K grosse, beziehungsweise 2K gepackte Skript samt CSS und Beispiel runterladen kann.
http://www.m3nt0r.de/devel/raterDemo/
Prototype Ticker – The 08/15 Way ;)
Ich mag Prototype. :)
-
var Ticker = Class.create();
-
Ticker.prototype = {
-
messages: new Array(),
-
counter: 0, interval: 0,
-
target: null, source: null,
-
initialize: function(target, source, options)
-
{
-
this.target = $(target);
-
this.source = $(source);
-
this.options = Object.extend({
-
updateRate: 2,
-
duration: 0.5,
-
beforeStart:function(){
-
this.counter++;
-
}.bind(this)
-
}, options || {});
-
-
Element.cleanWhitespace(this.source);
-
$A($(this.source).childNodes).each(function(sel) {
-
this.messages.push(sel.innerHTML.strip());
-
}.bind(this));
-
-
this.start();
-
},
-
start: function()
-
{
-
this.interval = new PeriodicalExecuter(function() {
-
this.target.update(' ').appendChild(Builder.node('span',{style:'opacity:0'}, this.messages[this.counter]));
-
new Effect.Appear(this.target.lastChild, this.options);
-
if(this.counter == this.messages.length){ this.counter = 0;}
-
}.bind(this), this.options.updateRate);
-
},
-
stop: function()
-
{
-
this.interval.stop();
-
}
-
};
Benutzung:
var ticker = new Ticker('ziel', 'quelle', {duration:0.3, updateRate: 3});
Abhängigkeiten:
Prototype.js 1.5.0 und Builder.js, sowie Effects.js von Scriptaculous
Ticker Demo
Download ticker.js
27.02 - fixed IE bug.
Prototype 1.5.0 Docs im CHM Format
Da nun die Version 1.5.0 finale von Prototype draussen ist, lohnte es sich für mich dessen neue und komplette Dokumentation nun auch in eine CHM zu verbannen.
Ich habe seit gestern Abend bis heute Nachmittag daran gesessen und jeden einzelnen Schnipsel der Doku in mein eigenes Format kopiert und formatiert. Das war eine heiden Arbeit, aber glaubt mir wenn ich sage das es sich gelohnt hat!
Endlich eine saubere und vollständige Doku als CHM.
Ich werde mich bemühen diese immer aktuell zu halten und hoffe das euch meine Version gefällt.
script.aculo.us 1.7 is final!
Ich hab's doch kommen sehen! Heute morgen ging prototype 1.5.0 final und so ganz nebenbei wurde soeben script.aculo.us 1.7 veröffentlicht. Sauber Jungs!
PHP-Klasse zur Technorati API
Gestern habe ich die Amazon Klasse geschrieben und aus gegebenen Anlass dachte ich mir das eine Technorati Klasse her müsste. Sie folgt dem gleichen Prinzip und liefert die XML Dokumente ohne viel drumherum. Wie auch bei der Amazon Klasse gibt es hier wieder eine ausführliche Online Dokumentation. Alle verfügbaren API Querys sind enthalten. Bloginfo, Browse, Member und Search, sowie das jedes Query alle verfügbaren Parameter beinhaltet.
Beispiele:
-
require('technorati.class.php');
-
-
// Alle Informationen zum Blog
-
$techno = new Technorati_Bloginfo();
-
$xmlDocument = $techno->bloginfo('http://www.m3nt0r.de/blog/');
-
-
// Suche nach Linkkosmos für eine Adresse.
-
$techno = new Technorati_Search();
-
$xmlDocument = $techno->cosmos('http://www.m3nt0r.de/blog/');
-
-
// Alle Informationen zu einem Mitglied.
-
$techno = new Technorati_Member();
-
$xmlDocument = $techno->getinfo('m3nt0r');
Download, Source und Docs
~GetDEF(technorati.com)~
Amazon E-Commerce Service PHP Klasse
Heute habe ich mal eine Klasse für den ECS Dienst von Amazon geschrieben. Ich kam auf die Idee, nachdem ich für mein selbstgemachtes Framework keine vernünftige Klasse finden konnte. Es gibt zwar Services_Amazon von PEAR, aber die hat einfach zuviele Abhängikeiten für diesen einen Zweck. Die Klasse ist offen für alle Dienste und vorbereitet für die Bezahldienste wie Alexa und Mechanical Turk, etc. Ihr könnt Sie also nach belieben erweitern. Ich habe eine ausführliche Dokumentation hinterlegt und dem Archiv hinzugefügt. Leider gibt es noch keine coding-guideline und eigentlich hätte ich Alexa und die Amazon-Bezahldienste selber implementiert, nur habe ich keine Kreditkarte und einen Developer-Key hab ich auch nich gefunden. Wie auch immer. Das ECS ist zu 80% abgedeckt. Ich habe nicht bei allen Funktionen alle möglichen Variablen eingefügt, da die meisten nur in sehr speziellen Fällen Sinn machen.
(more...)

