CakePHP: This email was sent using the CAKEPHP framework

Um diesen schönen Satz einmal nicht in einer mit der Email-Component versendeten Email zu erhalten, genügt es, das default-layout für die Emails in der App zu überschreiben. Also einfach eine “default.ctp” Datei innerhalb “app/views/layouts/email/html” bzw. “app/views/layouts/email/text” erzeugen mit dem Inhalt:

echo $content_for_layout

Das war’s auch schon.

Skype Autostart bei Mac

Um Skype aus dem Autostart bei Mac OS X Leopard und Snow Leopard zu entfernen (oder auch hinzuzufügen) kann man folgende Vorgehensweise wählen:

1. Apfel-Symbol klicken (oben links in der Ecke)
2. Systemeinstellungen
3. Benutzer
4. Den Reiter Anmeldeobjekte auswählen (ggf. muss das Passwort eingegeben werden, um Änderungen durchführen zu dürfen)
5. Skype über den Klick auf “-” bzw. auf “+” entfernen bzw. hinzufügen.

Fertig! :-)

CakePHP: Validierung ohne zu Speichern

Es kann vorkommen, da möchte man die Nutzereingaben in einem Formular zunächst nur validieren, bevor sie in der Datenbank gespeichert werden. Dies kann zum Beispiel bei einem Bestellvorgang sein, bei dem die eingegebenen Nutzerangaben noch einmal zur Übersicht dem Nutzer angezeigt werden soll und erst nach dieser Prüfung gesichert werden sollen.
Dafür stellt CakePHP die Methode ‘validates()‘ des Models bereit.

In der CakePHP-Dokumentation steht genau dieser Anwendungsfall beschrieben, jedoch überliest man auf die schnelle ggf. eine wichtige Stelle: Vor der Validierung müssen die Daten auf jeden Fall dem Model übergeben werden.

$this->Modelname->set($this->data);
if($this->Modelname->validates()) { #Alles ok, Überprüfungsseite anzeigen
#....
} else { #Daten validieren nicht
#...
}

CakePHP: dateFormat und timeFormat

Mit Hilfe des Form-Helpers lassen sich bequem Eingabefelder für Datums- oder Zeitangaben erstellen. Der Form-Helper erkennt aus der Datenbank heraus, was für ein Input-Feld er generieren muss. Um die Anordnung der entstehenden Select-Felder an das deutsche Format anzupassen, kann dem ‘options’-Array einmal der Schlüssel “dateFormat” für Datumsangaben und der Schlüssel “timeFormat” für Zeitangaben übergeben werden.

Um ein Datum in das deutsche Format zu bringen genügt als Wert die Angabe “DMY”. Bei “timeFormat” gibt man “24″ für die deutsche 24-Stunden Darstellung an.

		echo $form->input('tag', array('label' => 'Tag:', 'dateFormat' => 'DMY'));
		echo $form->input('von', array('label' => 'von:', 'timeFormat' => 24));

CakePHP: Fat Models innerhalb von Plugins…

… oder auch: Wieso wirft CakePHP ständig den SQL Error: 1064 und nimmt als SQL Query meinen Methodennamen?

Folgender Hintergrund: Wir befinden uns innerhalb eines Plugins (‘app/plugins/pluginname/’). Innerhalb des Plugins exisiteren die Controller, die Models und die Views. Die Models erben vom PluginnameAppModel, dieses wiederrum erbt vom AppModel.

Macht man das Model zu einem “Fat Model”, also ergänzt eigene Methoden und ruft diese Methoden innerhalb des dazugehörigen Controllers auf, so erscheint der SQL Error Code 1064.

Die Lösung zum Problem ist recht simpel und einleuchtend, man kommt nur nicht so schnell drauf ;-) . Innerhalb des Controllers muss man mit dem $uses-Attribut das zu nutzende Model bestimmen. Nur reicht es nicht aus, den Modelnamen in das Array zu schreiben, sondern das dazugehörige Plugin eben auch, getrennt durch einen Punkt.

var $uses = array('Pluginname.Model1', 'Pluginname.Model2');

CakePHP 1.3.4: Datenvalidierung und eine Warnung

Eventuell kommt die folgende Warnung bei einer Datenvalidierung im Model:

Warning (2): preg_match() [function.preg-match]: Empty regular expression [CORE/cake/libs/model/model.php, line 2596]

Die Warnung trat auf, als zwar der ‘rule’-Schlüssel im Validierungsarray angegeben wurde, er jedoch nur auf ‘false’ stand. Sobald eine Regel angegeben wird, tritt diese Warnung nicht mehr auf.
Es muss also immer eine Regel angegeben werden!

var $validate = array(
						'name' => array(
									'rule' => 'notEmpty',
									'required' => true,
									'message' => 'Bitte gib Deinen Nachnamen ein.'),
						'vorname' => array(
									'rule' => 'notEmpty',
									'required' => true,
									'message' => 'Bitte gib Deinen Vornamen ein.'),
						'email' => array(
									'rule' => array('email', true),
									'message' => 'Bitte gib Deine eMail-Adresse ein.'));

CakePHP: $displayField funktioniert nicht innerhalb von Plugins?!

Es existiert eine $belongsTo-Beziehung, angenommen zwischen einem Impressum und einem Buch. Das Impressum-Model wurde also entsprechend mit dem $belongsTo-Attribut beschrieben. Nun soll ein neues Impressum eines Buches angelegt werden und dafür soll bpsw. nicht der Buchname aus dem Buch-Model, sondern die ISBN-Nummer als Referenz herangezogen werden. Also bekommt das Buch-Model das Model-Attribut $displayField = ‘isbn’. Das scheint aber nicht zu funktionieren. Wenn jemand weiß warum nicht, dann bitte kommentieren! Ich freue mich auf antworten! Bis dahin kann man das natürlich umgehen, indem man das $displayField-Atribut unmittelbar vor dem Aufruf im Controller zur Laufzeit setzen lässt:

#innerhalb des impressum controller
$this->Impressum->Buch->displayField = 'isbn';
$this->set('buch',$this->Impressum->Buch->find('list');

Das Ganze findet innerhalb eines Plugins statt. Nennen wir das Plugin “Bibliothek”…Muss man hier etwas beachten?

Das erdachte Szenario möge man mir verzeihen. Es geht hier nur ums Prinzip ;-)

 

Die Lösung ist gefunden!

Näheres dazu und ergänzt um virtuelle Felder im Blog “CakePHPDoku”

Apple’s Trackpad

Die Trackpad Systemeinstellung ist auch bei Mac OS X 10.6.4 nicht per se vorhanden. Es kann also sein, dass diese Einstellung fehlt. Deshalb das Trackpad einschalten und mittels der Bluetooth-Einstellung das Trackpad finden lassen. Anschließend den Mac nach Systemupdates suchen lassen. Dann sollte er das Trackpad-Update finden, installieren, neu starten und die Trackpad Systemeinstellung sollte vorhanden sein!

Anbauversuche

Mal ein ganz anderes Thema als CakePHP: Informationen über die ersten Anbauversuche mit Kresse, Thai-Basilikum und Koriander.

Für den Anbau von Koriander kann man ganz normale Koriandersamen (das Gewürz, welches man evtl. sowieso zu Hause hat) nehmen. Nach Aussage eines Thailänders kann man es auch problemlos im Freien auf dem Balkon anbauen. Das wird nun ausprobiert. Näheres dazu später.

Die Samen des Thai-Basilikum auf die feuchte Erde legen und leicht andrücken. Nicht mit Erde überschütten, da die Samen Lichtkeimer sind. Täglich mit Wasser bestäuben. Das Thai-Basilikum sehr hell aufstellen, am besten bei 15 – 25 Grad Celcius.

Mit Kresse wird der gleiche Versuch wie bei dem Thai-Basilikum unternommen. Ebenfalls in der Wohnung, sehr hell aufgestellt.

[UPDATE 10.10.2010]
Die Kresse macht es einem echt leicht. Bereits nach zwei Tagen keimten die ersten Samen und nach 6 Tagen ist der Topf bereits gut mit ca. 4 cm hoher Kresse gefüllt.
Das Thai-Basilikum brauchte etwas länger. Nach 4 Tagen konnte man ganz kleine Keimlinge entdecken. Nach 6 Tagen sind im ganzen Topf kleine 2mm hohe Blätter zu erkennen.
Der Koriander ist im Freien (ca. 15Grad am Tag, ca. 10 Grad in der Nacht) nach 5 Tagen noch nicht aufgegangen. Er wurde nun also auch nach drinnen verfrachtet. Und siehe da, erste Keimlinge sind zu erkennen.

CakePHP: Ajax Layout

Werden Links oder Formulare mittels des AJAX-Helpers erstellt, um die Daten ansynchron zu laden und in einem DIV-Bereich anzuzeigen, wird in diesem DIV ggf. das Default-Layout genutzt. So kommt es dann zum Effekt der “Seite in der Seite”. Um das zu vermeiden, muss das Layout bspw. in der Methode (Action) entsprechend gesetzt werden. Möglich ist ein eigenes AJAX-Layout zu entwerfen oder aber gar kein Layout zu nutzen:

function TuDingeUndZeigeSieDannImDivAn () {
   $this->layout = '';
   $ergebnis = $this->tuWas();
   $this->set('view',$ergebnis);
}

CakePHP: Monatsnamen auf Deutsch (Teil 2)

In Ergänzung zu meinem Blogpost “CakePHP: Monatsnamen auf Deutsch” kann man die erstelle ‘locale’ Datei natürlich auch nutzen, um die Monatsnamen in Views auf Deutsch anzeigen zu lassen.

Dazu muss die ‘__()’ – Funktion, wie bei der Internationalisierung üblich, genutzt werden. Letzendlich sieht das Ganze dann so aus:


__(date('F',strtotime($controllerKlasse['Klasse']['datum'])),true)

wobei date(‘F’) den ausgeschriebenen Monatsnamen ausgibt. (siehe dazu auch die date() Dokumentation auf php.net)

Mal was anderes: Freiheits- und Verantwortungskultur

Auch so kann eine Unternehmenskultur aussehen…
Natürlich muss jede Unternehmung für sich selbst prüfen, ob das funktionieren kann, aber dem Einen oder Andren kann diese Präsentation sicherlich den Horizont erweitern. Wissensmanagement…es geht nicht (nur) um IT, sondern um Kultur und Einstellung!

Hier ist die Präsentation auf Slidehare.net