Dez 10

Unter http://voting.vobaweb.de/ kann man für verschiedene Projekte im Kreis Bonn Rhein/Sieg abstimmen, die dann eine stattliche Summe Geld erhalten. Bitte unterstützt doch das Kinder-/Jugendstiftung Hennef Projekt (Projekt 6).

Vielen Dank!

http://voting.vobaweb.de/

Nov 10

Kurze Anleitung, wie man auf Mac OS X eine Versionsverwaltung mit CVS für die Entwicklungsumgebung Eclipse einrichtet:

Voraussetzungen:

  • Eclipse ist installiert
  • XCode (Mac Entwicklungsumgebung) ist ebenfalls installiert => kostenlos unter developer.apple.com => liefert CVS

1. Mac -> Systemeinstellungen -> Freigaben -> Entfernte Anmeldung (Remote Login) aktivieren (aus Sicherheitsgründen kann man später Nutzereinschränkungen hinzufügen)

2. Überlegen, wo das CVS Repository liegen soll und entsprechenden Ordner anlegen, also beispielsweise unter root/CVS.

3. Terminal starten und

cvs -d /CVS init

eingeben. Damit ist das Repository aufgesetzt. Kurz überprüfen, ob im root-Verzeichnis nun unter CVS ein Ordner namens “CVSROOT” existiert.

5. Eclipse starten und unter Window => Show View => Other die folgenden Views auswählen: CVS Repositories (unter CVS) sowie Synchronize und History (unter TEAM).

6. Projekt auswählen, rechtsklick und “Team” => “Share Project” anklicken

7. Nun muss ein neues CVS Repository angelegt werden. Dazu folgende Angaben:
Host: localhost
Repository path: /CVS (wie oben)
User: der Mac-Nutzername, bspw: seb
Password: das Passwort eben
Connection type: extssh
User default port
Fertig!

8. Nun in der Synchronize View auf das kleine Symbol ganz oben rechts klicken “synchronize…”. Im Wizard einfach immer weiter klicken, ohne etwas zu ändern.

9. Über einen Rechtsklick auf die Dateien und “Team” => “Commit” werden die ausgewählten Dateien an das Repository übergeben. Hier kann man auch noch einen Kommentar über die Änderungen hinterlassen.

10. Über Rechtsklick auf eine Datei und “Team” => “Show History” kann man sich nun noch die Änderungshistorie einschließlich der Kommentare in der History-View anschauen.

Fertig. Viel Spaß!
 

Tagged mit:
Sep 30

In einem Wettbewerb wurden Designer dazu aufgerufen, einen Abfallbehälter für zu Hause zu entwerfen. Die Resultate sind unter www.trenntmöbel-berlin.de einzusehen. Mir gefällt http://trenntstadt-berlin.de/index.php/trenntmoebel-detail.html?teilnehmer=6 am Besten. Stimmen Sie doch auch für Ihren Favoriten.

Mai 21

Der Übersichts halber und mit dem Fokus einer kurzen verständlichen Information zusammen getragen.
Wenn welche fehlen, bitte einfach als Kommentar ergänzen!

1. Buchführung ist Bestandteil des externen Rechnungswesens.

2. Hauptzweck der Buchführung ist die Dokumentation. Es werden alle Geschäftsvorfälle, bspw. Einkauf/Verbrauch von Rohstoffen, Zahlung von Gehältern, Verkauf von Erzeugnissen, Aufnahme Kredit, etc. dokumentiert.

3. Ein Geschäftsjahr beginnt am 01.01. eines Jahres und endet am 31.12. des Jahres, sofern kein Rumpfwirtschaftsjahr vorliegt. Ein Rumpfwirtschaftsjahr hat weniger als 12 Monate und wird bspw. durch die Unternehmensgründung oder – schließung hervorgerufen.

Grundbuch/Journal/Prima Nota: Synonme. Enthält chronologisch alle Geschäftsvorfälle, mit Buchungssatz und Belegnummern.

Hauptbuch: Beinhaltet alle Konten des Unternehmens. Hier finden die Buchungen statt.

Nebenbücher: Ergänzen das Hauptbuch um Zusatzinformation.

Debitor: Schuldner, bzw. Kunde, mit dem man in einer Kreditbeziehung steht.

Kreditor: Gläubiger, bzw. Lieferant, mit dem man in einer Kreditbeziehung steht.

Inventar: Verzeichnis, in dem Vermögen und Schulden erfasst werden. Bildet die Grundlage für einen Jahresabschluss.

Inventur: Zählen, Messen, Wiegen, Prüfen von Belegen oder Verträgen der Vermögensteile

Beleg-/Buchinventur: Prüfen von Belegen oder Verträgen (also eine spezielle Art der Inventur)

Bilanzstichtag: Tag der Aufstellung der Bilanz, grundsätzlich der 31.12. eines Jahres

Stichtagsinventur: Art der Inventur, wenn Sie an einem bestimmten Tag statfindet (häufig am Bilanzstichtag)

Reinvermögen: Fremdkapital von der Summe der Vermögensteile (Anlage- und Umlaufvermögen) abziehen. Entspricht dem Eigenkapital in der Bilanz

Anlagevermögen: Gegenstände, die dem Unternehmen dauerhaft dienen sollen, bspw. Grundstücke, Maschinen, Geschäftsausttatung

Umlaufvermögen: Gegenstände, die dem Unternehmen nicht dauerhaft dienen sollen, also Verbrauch oder Verkauf, bspw. Rohstoffe, Betriebsstoffe, Erzeugnisse, Forderungen, Bankguthaben

Rückstellungen:Verbindlichkeiten in der Bilanz, von denen man nicht genau weiß, ob sie überhaupt bestehen und in welcher Höhe. Die Wahrscheinlichkeit ist jedoch sehr hoch, dass diese Verbindlichkeiten eintreten.

Rücklagen: Gehören zum Eigenkapital

Bilanz: Gegenüberstellung von Vermögen (Mittelverwendung, Aktiva genannt) und Kapital (Mittelherkunft, Passiva genannt). Auf beiden Seiten der Bilanz muss sich dieselbe Summe ergeben (Bilanzsumme). Muss zu Beginn und zum Schluss eines jeden Geschäftjahres erstellt werden.

Fremdkapital: Schulden + passiver Rechnungsabgrenzungsposten

Schulden: Rückstellungen + Verbindlichkeiten

Bilanzverlängerung: Bilanzsumme nimmt zu

Bilanzverkürzung: Bilanzsumme nimmt ab

Bestandskonten: Sind die Konten der Bilanz (also Aktivkonten für die Aktivseite und Passivkonten für die Passivseite)

Lastschrift: Buchungen auf der SOLL-Seite von Bestandskonten

Gutschrift: Buchungen auf der HABEN-Seite von Bestandskonten

Schlussbestand: auch Endbestand oder Saldo genannt, setzt sich aus Anfangsbestand + Zugänge – Abgänge zusammen

Bilanzidentität/Bilanzzusammenhang: Schlussbilanz ist die Eröffnungsbilanz des folgenden Geschäftsjahrs

erfolgsneutrale Geschäftsvorfälle: Geschäftsvorfälle, die das Eigenkapital unberührt lassen

Erfolg: Ertrag – Aufwand, wobei Ertrag einen Mehrung des Eigenkapitals darstellt und Aufwand das Eigenkapital mindert.

Eigenkapitalkonto: passives Bestandskonto

Aufwands- und Ertragskonten: Unterkonten des Eigenkapitalkonto

Erfolgskonto: synonym für Ertragskonto

Vorsteuer: Eingangsumsatzsteuer, die beim Einkauf anfällt.

Zahllast: Verrechnung der Vorsteuer mit der Ausgangsumsatzsteuer. Sie entsteht, wenn Umsatzsteuer die Vorsteuer übersteigt.

Vorsteuerüberhang: Wenn Vorsteuer > Umsatzsteuer

Bilanzierungsfähigkeit: Eignung eines Sachverhalts, dem Grunde nach in die Bilanz aufgenommen werden zu können.

Aktivierungfähigeit: Wenn sich ein Sachverhalt der Aktivseite der Bilanz zuordnen lässt.

Passivierungsfähigkeit: Wenn ein Sachverhalt der Passiviseite der Bilanz zuzuordnen ist.

Vermögensgegenstand: körperliche und nicht körperliche Gegenstände (Sachen und Rechte) und wirtschaftliche Vorteile bzw. Werte

abstrakte Verkersfähigkeit: Vermögengsgegenstand, der einzeln veräußerbar und übertragbar ist, aber ein potentetieller Nachfrager muss nicht tatsächlich vorhanden sein <=> im Gegensatz zur konkreten Verkehrsfähigkeit

 

Tagged mit:
Apr 17

Frühjahrsputz: Ab sofort werde ich alles rund um CakePHP auf http://ooyoo.de/cakephpdoku/ veröffentlichen. Dieser Blog hier dient dann nur noch für alles Andere ;-)

Der erste Beitrag in dem neuen Blog beschäftigt sich mit einem Standard bei CakePHP: Authentisierung

 

Mrz 31

Die RewriteRules bei CakePHP sind so eingestellt, dass man an Ordner im root-Verzeichnis nicht dran kommt. Möchte man bspw. einen bestimmten Ordern von der RewriteRule ausschließen, muss folgende Regel in die .htaccess dazugeschrieben werden (im root-Verzeichnis von CakePHP):

RewriteRule ^Ordnername – [L,NC]

wobei – ausdrückt, dass nichts passieren soll
L steht für Last Rule
und NC für no-case, so dass Groß-/Kleinschreibung ignoriert wird (ordnername wird also auch erreicht)

Alles was nun mit “Ordnername” beginnt, betrifft diese Regel.

Tagged mit:
Mrz 27

Um ein Fenster zu verkleinern drückt man einfach: Apfeltaste + M.

Alle Tastaturkürzel für Mac kann man beim Apple Support finden unter http://support.apple.com/kb/HT1343?viewlocale=de_DE&locale=de_DE

Tagged mit:
Jan 21

Online bis zu 10 Bild oder Office Dateien in eine PDF Datei zu konvertieren erledigt für einen unkmpliziert und schnell http://file2pdf.u4u.cc/.

Top!

Tagged mit:
Jan 17

Fast einen Monat ist es her seit dem letzten Post. Nur ein kleiner Tipp und auch kein besonders aufwändiger für multiple Validierungsfeldern pro Eingabefeld. Die Überprüfung eines Eingabefeld für eine deutsche Bankleitzahl könnte beispielsweise so im Model implementiert werden:

var $validate = array(
'blz' => array(
									'minLength' => array(
										'rule' => array('minLength', 8),
										'message' => 'Bitte geben Sie eine gültige Bankleitzahl eines deutschen Bankinstituts ein.'),
									'maxLength' => array(
										'rule' => array('maxLength', 8),
										'message' => 'Bitte geben Sie eine gültige Bankleitzahl eines deutschen Bankinstituts ein.'),
									'numeric' => array(
									'rule' => 'numeric',
									'required' => true,
									'message' => 'Bitte geben Sie nur Zahlen als Bankleitzahl ein.'))
)
Tagged mit:
Dez 19

Um ein Favicon Icon einzubinden, einfach die ‘favicon.ico’ Datei in das app/webroot Verzeichnis ablegen und dann im Layout die folgende Zeile im Head-Bereich einfügen:

echo $html->meta('icon');

Frohe Weihnachten und ein gesegnetes Fest!

Tagged mit:
Dez 19

In der Dokumentation der Email-Component von CakePHP (Link) steht zu Headern leider nicht viel.
Man kann den Header jedoch anpassen, indem man das headers Attribut entsprechend setzt, beispielsweise für Bulk-Emails (Precedence: bulk):

$this->Email->headers = array('Precedence' => 'bulk');
Tagged mit:
Dez 19

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.

Tagged mit:
Nov 26

Viedeo Streams von Videoportalen lassen sich wirklich gut und sehr einfach über die Website http://www.video2mp3.net konvertieren.

Nov 21

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! :-)

Tagged mit:
Nov 14

Einen Zurück-Button kann man beispielsweise in Verbindung mit Javascript ganz einfach in einer View realisieren.

 echo $form->button('Zurück', array('onclick' => "javascript:history.back();"));

Wer einen eleganteren Weg kennt, darf gerne kommentieren ;)

Tagged mit:
Nov 13

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
#...
}
Tagged mit:
Nov 06

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));
Tagged mit:
Okt 31

Einfach, schnell und kostenlos können beispielsweise Youtube-Videos (flv oder mp4) bei zamzar.com in von vielen Programmen lesbare Videodateien umgewandelt werden.

Tagged mit:
Okt 24

… 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');
Tagged mit:
Okt 23

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.'));
Tagged mit:
Okt 23

geht mit Alt + 7 = |

Tagged mit:
Okt 08

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 ;-)

Tagged mit:
Okt 07

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!

Tagged mit:
Okt 04

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.

Tagged mit:
Sep 28

…leider hatte ich in letzter Zeit viel zu tun…
…bald gehts weiter mit dem bloggen…

Sep 03

Damit das Default-Layout bei einem AJAX-basierten Aufruf nicht automatisch eingebunden wird, reicht es auch, die ‘RequestHandler’ Komponente des Frameworks dem Controller (bspw. auch dem PagesController) hinzuzufügen:

var $components = array('RequestHandler');
Tagged mit:
Sep 03

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);
}
Tagged mit:
Aug 28

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)

Tagged mit:
Aug 23

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

Tagged mit:
Aug 15

Falls mir jemand den Fehler erklären möchte, ich freue mich über jede Antwort!
Die Lösung zumindest liefert das einbinden des ‘ConnectionsManagers‘ in den Controller, in dem auch eine sanitize-Methode zum Einsatz kommt.

App::Import('ConnectionManager');

Diese Zeile muss vor Beginn der Deklaration der Klasse stehen, ganz genauso wie auch der Import der Sanitize-Klasse.
Ich habe keine Ahnung, wieso CakePHP (1.2.6) den ConnectionManager nicht direkt im Core ordentlich mit eingebunden hat.

Also Feuer frei für Kommentare!!!

Tagged mit:
Aug 15

Wer in das Verlangen kommt, die Email-Component von CakePHP nutzen zu wollen, sollte sich stets eines Schusselfehlers bewußt sein. Die Email-Component bindet man wie gewöhnlich über

$components = array('Email');

in den jeweiligen Controller ein. Wer jedoch bei ‘$components’ das ‘s’ vergisst (Schusselfehler) erhält die im Titel dargestellte Fehlermeldung.

Tagged mit:
Aug 14

Vermutlich kommt das Problem seltener vor, aber nichts destotrotz verdeutlicht es ganz anschaulich die Funktionsweise der ‘redirect‘-Methode.
Angenommen man befindet sich innerhalb eines Controllers in einem Plugin und möchte nach der Ausführung einer Methode auf eine statische Seite umleiten (redirecten), dann übergibt man dieser Methode mehrere Parameter in der folgenden Form:

$this->redirect(array('controller' => 'pages', 'action'=>'display','ueberuns/kontakt', 'plugin' => null));

Der ‘action‘-Schlüssel muss ‘display‘ als Wert haben, da nur diese Methode im pages_controller existiert. Damit der pages_controller weiß, welche statische Seite aufgerufen werden soll, wird als weiterer Parameter die View übergeben (in diesem Fall die View ‘kontakt‘ im Ordner ‘ueberuns‘. Damit das Ganze nicht innerhalb des momentanen Plugins stattfindet, setzen wir den ‘plugin‘-Schlüssel noch null und schon funktioniert der Redirect.

Tagged mit:
Aug 14

Einen funktionierenden Breadcrumb-Helper gibt es in der CakePHP bakery. Kann diesen Helper nur empfehlen. Er funktioniert wunderbar. Eine Ausnahme: Die Auto-Analyse (dritter Parameter = ‘auto’) scheint in statischen Seiten (pages_controller) ab der dritten Ebene nicht zu funktionieren. Ist aber nicht weiter schlimm, denn man kann den Parameter ja manuell setzen.

Hier ist der Link!

Tagged mit:
Aug 01

Um den letzten erfolgreichen Login eines Nutzers in einem Feld ‘lastlogin‘ zu speichern, muss in der login()-Methode des UsersController folgender Code eingefügt werden:

if ($this->Auth->user()) {
 $this->User->id = $this->Auth->user('id');
 $this->User->saveField('lastlogin', date("Y-m-d H:i:s"));
 $this->redirect('/controller/action');
}

Damit das ganze auch aufgerufen wird, muss im app_controller noch das autoRedirect ausgestellt werden. Dies erklärt auch die redirect()-Methode in der oben dargestellten login()-Methode.

Im app_controller muss also noch folgendes stehen (oder im beforeFilter() des UsersController)

$this->Auth->autoRedirect = false;
Tagged mit:
Jul 31

Leider funktioniert die Angabe von

setlocale(LC_TIME,"de_DE"); #oder
setlocale(LC_TIME,"deu"); #oder
setlocale(LC_TIME,"ge");

in der ‘bootstrap.php’ nicht, um deutsche Monatsnamen in Formularfeldern mit Datumsangaben zu erhalten.
Daher der Umweg über die Lokalisierungsdatei:

Verzeichnis “deu” im Ordner “app/locale” anlegen.
Verzeichnis “LC_MESSAGES” im grade erstellen “deu” Ordner anlegen.
Datei “default.po” in diesem Ordner anlegen.

In die ‘default.po’ nun die Übersetzungen in der Form

msgid "January"
msgstr "Januar"

msgid "February"
msgstr "Februar"

...

schreiben. Fertig!

Tagged mit:
Jul 30

Normalerweise wird durch die ‘loginAction‘-Variable der AuthComponent die Action definiert, die bei dem Versuch eine geschützte Seite aufzurufen, angezeigt werden soll.

Wenn ein Plugin in eine CakePHP-Anwendung eingebunden und ebenfalls durch die AuthComponent geschützt werden soll, dann wird der Nutzer auf eine Seite in der Form ‘http://www.domain.de/plugin_name/users/login‘ weitergeleitet. Ist letztendlich auch logisch, denn CakePHP geht davon aus, dass der UsersController Teil des Plugins ist.

Um dies zu umgehen und den “richtigen” UsersController der Hauptanwendung aufzurufen, muss der ‘loginAction‘ der AuthComponent eine weitere Variable, nämlich ‘plugin‘, übergeben werden. D.h. normalerweise in der beforeFilter()-Methode des UsersController oder des AppController muss der Aufruf folgendermaßen lauten:

 $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login', 'plugin' => null);

Anschließend nutzt CakePHP den UserController als globalen UserController.

PS: Eine ähnliche Problematik tritt bei

$html->link();

usw. auf. Auch hier muss der Parameter ‘plugin‘ übergeben werden.

Tagged mit:
Jul 20

Nach der Umstellung auf CakePHP 1.3 kam bei mir der Fehler “Undefined variable: session” im Layout.

Warum auch immer muss man nun den Session-Helper manuell im app_controller hinzufügen.

Tagged mit:
Jul 14

Einen anderen Weg als bislang geht TGP, die nicht die Stärke eines Passworts mit grünen, gelben oder roten Balken anzeigen, sondern die Sekunden, Minuten, Stunden, Tage oder gar Jahre, die mit einer Brute-Force Attacke benötigt werden, um ein Passwort zu lösen:

Hier ist der Link!

Tagged mit:
Jul 04

Das YAML-Framework ermöglicht browserübergreifendes CSS Layout. Die entsprechenden IE Einschränkungen werden, wie so üblich, mit Kommentaren und Bedingungen realisiert. Zu beachten ist, dass die HTML-Kommentare der korrekten HTML-Konvention entsprechen, da sonst Fehler auftreten, wie z.B.

  • Anzeige von <!–[endif]–> im Browserfenster (geringeres Problem)
  • Javascript-Fehler bei CakePHP in Verbindung mit den AJAX-Helpern, Scriptaculous und Protoype. (größeres Problem)

Also immer schön an die Webstandards halten ;-)

Tagged mit:
Mai 30

Schöne Stadt. Hat tolle sehenswerte Seiten, aber auch teilweise recht heruntergekommende und langweilige. Die Anreise mit dem Flugzeug ist einfach (evtl. ist ein Flug von Amsterdam billiger als von einem Flughafen aus Deutschland). Vom Flughafen gelangt man in die Innenstadt mit dem sehr schnellen (nur 20 Minuten), aber auch sehr teuren “Flytoget”. Tickets (ca. 21 Euro, one-way) sollten an dem Automaten gelöst werden, da sonst noch eine Bearbeitungsgebühr anfällt.

Nur unwensentlich länger benötigt der “normale” Zug. Der normale Zug fährt nicht so oft wie der “Flytoget”, braucht ca. 10 Minuten länger und kostet ca. 13 Euro. Wer es also nicht eilig hat, sollte diesen Zug nehmen.

Tagged mit:
Mai 30

Wunderschöne Stadt. Ein Ausflug lohnt sich auf jeden Fall. Wenn man ca. 3 Monate vorher bei der Bahn bucht, ergattert man vielleicht auch ein Ticket für nur 19.- Euro (one-way) von Köln nach Amsterdam.

Für die, die mit dem Flugzeug anreisen: Am günstigsten kommt man mit dem Zug in die Innenstadt. Ca. alle 10 – 15 Minuten fährt ein Zug, kostet 3,60 Euro und braucht ungefähr 25 Minuten.

Tagged mit:
Mai 09

…die man als Entwickler kennen sollte:

9 PHP-Functions you need to know

Tagged mit:
Mai 09

Wer plant mit CakePHP eine soziale Netzwerkfunktion zu implementieren, muss ein paar kleine Tricks beachten.
Wir gehen davon aus, dass eine “users”-Tabelle existiert, in der alle Nutzer gespeichert sind. Nun legen wir eine Tabelle an, die sich “users_users” nennt mit den Spalten “id”, “user_id”, “friend_id” und weiteren die Relation beschreibenen Spalten, bpsw. “approved”.

Im Model “user” muss nun die HABTM-Relation eingetragen werden:

var $hasAndBelongsToMany = array(
        'Friend' => array (
            'className' => 'User',
            'join_table' => 'users_users',
            'foreignKey' => 'user_id',
            'associationForeignKey' => 'friend_id'
        )
    );

Im Controller “users_controller” muss in der entsprechenden Methode die durch ein Formular übergebenen Daten mittels des folgenden Befehls speichern:

$this->User->UsersUser->save($this->data);

Dafür müssen natürlich die Daten in $this->data in der richtigen Form vorliegen, so dass das Formular richtig gestaltet sein muss. Wichtig ist, dass bei der Formularerzeugung auf Bezug auf “UsersUser” genommen wird, so dass das Array in $this->data auch data['UsersUser'][..] enthält:

echo $form->create('UsersUser', array('url' => array('controller' => 'Users', 'action' => 'tippgemeinschaft')));

Über die Option “url” übergibt man noch den richtigen Controller, da sonst CakePHP versuchen würde, den Controller “users_users_controller” zu laden.

Tagged mit:
Mai 09

Um das abgespeicherte “datetime”-Feld bspw. bei einer User-Tabelle in einer View in das deutsche Format zu bringen, genügt die folgende Zeile (vorausgesetzt, das “data”-Array ist entsprechend vorhanden:


echo date('d.m.Y',strtotime($this->data['User']['created']));
Tagged mit:
Mai 02

Viele, viele Farbpaletten: Colourlovers

Tagged mit:
Apr 27

Habe diesen beiden Webseiten gefunden:

www.airlinemeals.net

und

www.trnd.com

Ersteres ist ganz lustig und nicht wirklich sinnvoll. Man kann – wie der Name bereits sagt – Fotos des Essens der eigenen Flugreise einstellen. Wer sich also für kommende Flüge schon mal mental auf das Essen einstellen möchte, dem ist hier bestens geholfen. Die Idee find ich aber ganz witzig.

Zweiteres ist auf jeden Fall auch eine gute Idee. Hier kann man sich als Testperson bewerben und wenn man ausgewählt wird, Produkte von renommierten Firmen testen und direkt Feedback geben. Auf der einen Seite ist das ja ganz schön und gut, man will ja schließlich qualitativ hochwertige Produkte kaufen, aber auf der anderen Seite gibt man seine Leistung kostenlos an Firmen weiter. Produkttesting müssten sie so oder so machen, nur diesmal eben kostenlos. Hm…

Tagged mit:
Apr 23

Statische Seiten in CakePHP werden über den Pages_Controller eingebunden. Möchte man diese frei zugänglich machen (d.h. auch erreichbar, obwohl die Auth-Komponente im Einsatz ist), dann muss der Auth-Variablen “allow” die “display”-Action des Pages_Controller übergeben werden.

$this->Auth->allow('display');
Tagged mit:
Apr 22

Bin aus dem CakePHP-Kochbuch nicht ganz schlau geworden, deswegen musste ich es selbst ausprobieren. Hier also der Code, wenn man bestimmte Spalten aufaddieren möchte (SUM) und gleichzeitig eine Bedingung stellt:

$conditions = array('user_id =" => $user_id);
$this->find('first',array('conditions' => $conditions, 'fields'=>array('Model.feld','SUM(Model.feld) as NeuesFeld'))));
Tagged mit:
Apr 22

Ich hatte das Problem, dass plötzlich diese Aussage von CakePHP kam und ich zuerst nicht wußte, woran es lag. Lustigerweise trat das Problem an ganz unterschiedlichen Stellen auf. Hier sind Lösungsmöglichkeiten:

  • Datenbankverbindung überprüfen
  • Cache leeren (app->tmp->cache)
  • View erstellen

Vor Allem bei dem letzten Punkt trat bei mir starke Verwunderung auf, da normalerweise ein “MissingView”-Error geworfen wird. Bei mir fehlte tatsächlich die View für die aufgerufene Action. Danach lief CakePHP wieder einwandfrei.

Der im Titel genannte Error tritt auf, wenn der Debugmodus auf 0 gestellt ist – also im Produktivbetrieb. Im Entwicklungsbetrieb erscheint der “MissingView”-Error.

Tagged mit:
Apr 20

Ein eigenes animiertes “wird geladen” Bild kann man einfach unter http://www.ajaxload.info/ generieren lassen. Und der Vorteil: Die generierten Bilder unterliegen keiner Lizenz und sind somit Free For Use.

Tagged mit:
preload preload preload