Kategorie: Uncategorized

  • Ein paar nützliche Form Funktionen

    Die Form API von Drupal ist sehr mächtig und relativ komplex. In einem meiner ersten Module für Drupal habe ich die Formulare noch von Hand in HTML geschrieben, bis ich mir mal die Form API angeschaut habe… seither hat sich mein Drupal Leben schon ein wenig vereinfacht.

    Die standard Funktionen werden sicher allen bekannt sein. Ich möchte hier ein paar andere Hooks vorstellen:

    Die Ausgangslage:
    Ich wollte ein Formular machen, welches beim initialen Aufruf lediglich einen Knopf "Vorschau" zur Verfügung stellt. Klickt man auf den Knopf, so wird das Formular überprüft und dann nochmals dargestellt, jetzt jedoch mit dem Knopf "Abschicken". Das initiale Formular dazu sieht wie folgt aus (lediglich ein Auszug):

    'submit',
    '#value' => t('Preview'),
    );
    $form['simple_buy_role']['was_validated'] = array(
    '#type' => 'hidden',
    '#default_value' => 'false',
    );

    $form['#pre_render'] = array ('_simple_buy_role_render_after_validating'); //Funktion nach #theme, #validation Funktion
    ?>

    Das Hidden Feld wird später noch verwendet. Der pre_render Wert ist ein Verweis auf einen Eintrag im Menu -> Eine Funktion welche aufgerufen wird bevor das Formular gerendert wird, jedoch nachdem das Formular validiert wurde.

    Das Formular wird also abgeschickt, geht durch form_validate() und FALLS alles io ist, wird ein Aufruf an _simple_buy_role_render_after_validating() gemacht:

    Hier werden jetzt also noch einfach ein paar Änderungen gemacht. Das Feld ist validiert und kann jetzt auf true gesetzt werden. Hier wird dann auch der Knopf für von "Vorschau" auf "Absenden" geändert. Wird jetzt das Formular abgeschickt, wird das in der validate_funktion überprüft und es werden die restlichen validate Funktionen ausgelassen -> das Formular wird abgeschickt.

    Links

  • Tools für die Drupal Entwicklung – Firebug

    Es sei an dieser Stelle schon mal angemerkt, dass der Internet Explorer für die Entwicklung von Webseiten vollkommen ungeeignet ist. Es gibt zwei Gründe dafür: Zahlreiche Bugs, in der CSS Darstellung machen es dem Entwickler schwer. Ein weiterer Punkt ist die mangelnde Unterstützung von guten Tools. Es gibt zwar für den IE mitlerweile auch einen Pseudo Firebug (IE Developer oder so ähnlich), aber leider reicht der Firebug nicht das Wasser. Daher für jeden Entwickler ein muss. Firefox (oder ein passendes Derivat wie zum Beispiel flock)

    Firebug Übersicht

    Der Firebug ist eine ziemlich ausgewachsene Debugging Umgebung für Firefox und Co. Dazu gehören:

    • Javascript Debugger (welcher ein schrittweises durchlaufen des Codes erlaubt!)
    • interaktiver HTML Explorer
    • DOM Explorer
    • CSS Explorer
    • Netzwerkverindungsexplorer -> Dieser erlaubt einem die Ladezeiten von Grafiken, Scripts und AJAX Requests zu überwachen/debuggen.

    Drupal Einsatz

    Der Firebug unterstützt sowohl den Themer als auch den Modul Entwickler:

    Themer: Besoners die CSS Ansicht ist extrem hilfreich. So kann ein Tag irgendwo im Source Code selektiert werden, worauf man eine Übersicht bekommt, was für CSS Befehle dahinter sind und ob diese unter Umständen von anderen Selektoren überschrieben werden. Im Weiteren ist sofort ersichtlich, wo (Zeile und Datei) sich der entsprechende Selektor befindet. Um das ganze noch abzurunden, können änderungen Probehalber gerade direkt im Firebug gemacht werden, so dass das Resultat direkt ersichtlich ist (natürlich muss es später noch in der richtigen Datei machen, aber bei Try & Error kann das doch einiges an Zeit ersparen). Falls ein Themer seine Ladezeiten optimieren will, so ist die "Net Ansicht" recht hilfreich. Diese gibt gute Übersicht, wie lange die entsprechende Teil der Seite zum Laden brauchen.

    Entwickler: Für den Entwickler kommen neben dem CSS Inspektor vor allem die "Console", "HTML", "Script" und "Net" in Betracht, aber das sollte eigentlich jeder Entwickler kennen.

    Fazit

    Wie bereits oft erwähnt ist die Firebug Extension unterlässlich. Kleiner Tipp noch: Wird Firebug nicht verwendet kann dieser auch deaktiviert werden, ansonsten wird jede Seite von Firebug analysiert, was natürlich ein kleines Bisschen Rechenzeit in Anspruch nimmt. Einfach einen rechtslick auf das Firebug Symbol in der Ecke und rechts und dann auf "disable Firebug" klicken… Einfach dann nicht vergessen wieder einzuschalten.

    Screenshots

    Screenshot 1: Zeigt die Grundübersicht von Firebug mit den diversen Fenstern. Screenshot 2: Die Net Ansicht. Gibt Auskunft über die Ladezeiten von Einzelteilen der Seite. Hier kann eine weitere Feinauswahl vorgenommen werden: Nur Bilder, nur Scripte oder nur AJAX Requests. Screenshot 3: Die Scriptansicht. Mit einem Klick in den linken Rand, lassen sich Haltepunkte definieren. Wird die Seite jetzt nochmals neu geladen, so wird das Javascript an diesem Punkt angehalten. Über die Buttons (Play, Step Over, Step inside und Step return) kann jetzt das Script Zeile für Zeile durchgegangen werden. Auf der rechten Seite werden dann jeweils die Werte der entsprechenden Variablen angezeigt. -> Extrem nützlich für jeden Javascriptentwickler (ich würde soweit gehen und sagen, dass es ohne gar nicht geht 😉

  • Tools für Drupal Entwicklung – TopStyle Lite

    CSS besteht eigentlich lediglich aus Text. Somit kann man CSS Dateien auch gut mit einem normalen Texteditor wie zum Beispiel Notepad++ editiert werden. Es gibt jedoch Editoren, welche speziell für CSS ausgelegt sind und den Entwickler durch Autocompletion unterstützen, was die Arbeit massiv vereinfacht. Als treuer Freund und Begleiter hat sich bei mir TopStyle 3 Lite etabliert.

    Vorteile:

    • Autocompletion
    • Syntax Highlighting mit Fehlermarkierung
    • Übersicht über alle verwendeten Selektoren
    • Integration in Dreamweaver, Homesite und Frontpage (nicht ausprobiert)

    Nachteile

    • Beim Speichern geht die Undofunktion nicht mehr
    • Nur eine Datei pro Editor

    Die lite Version ist gratis und kann ich sehr empfehlen. Wer weitere Features braucht (Projektexplorer, diverse Vorschauen HTMLTidy Integration) sollte die Pro Version in Betracht ziehen. Der Preis von 80$ scheint mir jedoch zu teuer.

     

  • Tools für PHP Entwicklung – Notepad++

    Ein Open Source Texteditor für Windows, der schon ein paar Jahre auf dem Buckel hat und hoffentlich keinem Entwickler fremd ist. Sehr leichtgewichtig und einfach zu bedienen. Notepad++ hat unter anderem die folgenden nützlichen Funktionen:

    • Texthighlighting für HTML, PHP, XML, Javascript, Perl und noch einige andere
    • Für HTML werden öffnende Tags automatisch geschlossen
    • Verschiedene Formate darstellen: UTF-8, ANSI, UCS-2 Big Endian
    • Tabs, damit mehrere Dokumente gleichzeitig bearbeitet werden können
    • TextFX Funktionen (noch nicht benutzt)
    • Markos aufzeichnen (noch nicht benutzt)
    • Suchen und ersetzen
    • Wahrscheinlich gibt es noch mehr Funktionen, aber das sind gerade so die Gängisten, welche ich gefunden habe.

    Wozu ist Notepad++ nützlich?

    • Schnell etwas kleines ändern, ohne eine vollständige IDE zu öffnen
    • Arbeit mit Multilingualtexten, da hier charset varieren kann.
    • Ein guter Ersatz für das Windows Notepad, dessen Gebrauch man verbieten sollte.

    Wozu sollte es nicht verwendet werden, bzw. hier gibt es bessere Tools

    • Grosse integrierte Projekte (hier wäre wohl Zend Studio oder PHPEclips besser geeignet.
    • Es ist kein WYSIWYG Editor

    Nettes kleines Tool, welches eigentlich nicht fehlen darf. Ein ähnliches Programm ist auch TextPad. Ich persönlich bevorzuge jedoch mein gutes Notepad++

    Links

  • Charset

    Bereits letzte Woche habe ich mich mit charset herumgeschlagen. Die Schlacht war leider noch nicht zuende. Probleme mit dem charset treten dann auf, wenn ein Text mit regular expressions durchsucht werden wird. Dann kann es nämlich vorkommen, dass diese nicht gefunden werden. Ein vereinfachtes Beispiel, welches nichts mit charset zu tun hat, zeigt die Problematik einfach auf:

    Ist ja ganz logisch. Das gleiche gilt jedoch auch für charset. Ich habe noch immer nicht ganz kapiert, wie sich verschiedene charsets miteinander verhalten, aber hier ein paar nützliche Funktionen:

    Drupal ist allgemein in UTF-8, aber es kann halt vorkommen, dass man die Daten aus irgend einem Grund umschreiben muss, es ist keine schöne Sache… Das Problem: Auf dem Bildschirm werden sie richtige dargestellt, aber was drunter liegt sieht man leider nur schlecht.

    Wer sich richtig darin vertiefen will, soll sich mal schoenitzer.de reinziehen.

  • OOP Konzepte in Drupal

    Im ersten Teil dieses Artikels werde ich zuerst ein paar Grundlagen der OOP erläutern. Zum Schluss kommt dann noch die Umsetzung dieses Konzepts mit Drupal

    Wie allgemein bekannt ist, ist Drupal funktional programmiert. Es wurden jedoch möglichkeiten gefunden, um auch gewisse OOP Konzepte einzubauen. Auf eines möchte ich hier eingehen, nachdem es in Drupalcenter als Frage aufgetaucht ist. Ich komme aus einer Java Umgebung (von der Universität her) und habe daher Erfahrung im Umgang mit OOP.

    Ein wichtiger Vorteil von OOP ist die Wiederverwendbarkeit von Klassen. Damit dies jedoch möglich ist, muss jede Klasse eine klare Schnittstelle haben. Z.B. das Objekt Motor: Vereinfacht gesehen hat es zwei Methoden: motor_starten und motor_abstellen. Um den Code jedoch übersichtlicher gestalten zu können werden intern mehr Methoden verwendet:

    Diese beiden Methoden sind unsere Schnittstellen. Intern läuft jedoch mehr ab:

    benzinEinspritzen();
    }

    public function motorStoppen(){
    //implentation
    }

    private function benzinEinspritzen(){
    //implementation
    }

    private function luftEinspritzen(){
    //implementation
    }
    }
    ?>

    benzinEinspritzen und luftEinspritzen ist für den Autofahrer nicht wichtig, er will das nicht manuell regeln müssen, es könnte unter Umständen fatale Folgen haben, falls der Autofahrer selber das Gemisch beeinflussen könnte. Aus den obigen beiden Beispielen können folgende wichtigen Vorteile gewonnen werden:

    • Ein Objekt ist eine Blackbox für den Benutzer und zeigt ihm nur die für ihn notwendigen Methoden, damit der Benutzer das Objekt leicht benutzen kann.
    • Wiederverwendbarkeit ist gewährleistet, denn das interne Verhalten des Motors kann verändert werden -> z.B. einen Dieselmotor. Das ändert jedoch nichts an den öffentlichen Methoden.
    • Dadurch kann eine gewisse Sicherheit gewährleistet werden, denn: Interne Veränderungen haben keine Auswirkungen auf den Objektnutzer. Würde dieser direkt z.B. benzinEinspritzen verändern und jetzt wird auf Diesel umgestellt, so müsste der Benutzer seine Software entsprechend anpassen. Da diese Methode jedoch private ist, können wir das getrost übernehmen und der Objektbenutzer kann nach wie vor den Motorstarten, ohne etwas bei sich verändern zu müssen.

    Im realen Leben trifft man häuftig folgendes an:

    name;
    }

    public function setName(string $str){
    $this->name = $str;
    }

    }
    ?>

    Will man sauber Programmieren, so verbietet man solche Zugriffe:

    name = 'rapsli';
    ?>

    Und benutzt eben die accessors:

    setName('rapsli');
    ?>

    Warum? Die Antwort wurde oben bereits gegeben. Wird nämlich die interne Datenstruktur verändert, z.B. so:

    name['name'];
    }

    public function setName(string $str){
    $this->name['name'] = $str;
    }

    public function setFirstName(string $str){
    $this->name['firstName'] = $str;
    }
    public function getFirstName(){
    return $this->name['firstName'];
    }

    }
    ?>

    Würde man den direkten Zugriff auf Namen erlauben, so gäbe das ein ziemlich grosses Problem. Da wir jedoch in unserem Objekt den Zugriff über die Accessormethoden laufen lassen, stellt dies kein Problem dar:

    • Der Code ist einfach zu warten
    • Erweiterungsfähig

    Jetzt zu Drupal. In Drupal wird genau dieses Konzept verfolgt, es kann jedoch nur über Absprachen funktionieren. Drupal kennt keine Klassen. Wir können jedoch ein Modul als eine Klasse sehen und die darin enthaltenen Funktionen als Methoden dieser Klasse. Die Sichtbarkeit der Methoden wird wie folgt geregelt:

    Plant man ein Modul können die Schnittstellen somit festgelegt werden und umgesetzt werden. Alle anderen Hilfsfunktionen werden dann jeweils mit dem _ versehen. Wenn ich jetzt also ein Modul programmiere und greife dabei auf z.B. das Taxonomy Modul zu, dann weiss ich genau, dass ich nur die Funktionen verwenden darf, welche KEINEN Unterstrich haben, denn dann kann ich mir sicher sein, dass diese auch bei einer Umstellung des Modules nach wie vor funktionieren. Das gleiche sollte auch mit den eigenen Modulen gemacht werden.

    Wer sich ernsthaft mit OOP auseinander setzen will, sollte sich zuerst mit den grundlegenden Konzepten vertraut machen:

    • Klassen vs. Objekte
    • Vererbung
    • Polymorphie
    • Datenkapselung

    Zudem könnte es hilfreich sein, OOP ein wenig mit Java zu programmieren, da Java sehr strikt ist bezüglich OOP. Und sonst einfach ein bisschen googeln

    Update 22.12.2007: In der Drupal API gibt es einen Ausführlichen Text punkt Drupal und OOP.

  • Inspiration gesucht – Wie kreativ ist Programmieren?

    Heuten haben mich zwei Posts bezüglich dem Thema Arbeitsplatz nachdenklich gestimmt:

    1. Boagworld – Bargain basement -> Das Foto von Marcus in seinem Chaos.
    2. Smashing Magazine – Creative Workplaces

    Die Beispiele von Smashing Magazine sind natürlich übertrieben inspirierend (zumindest in meinen Breitengraden weit über dem Standard), doch sonst wäre der Titel nicht gerechtfertigt. Stellt sich trotzdem die Frage: Müssen lediglich Designer in einer kreativen Umgeben arbeiten oder sollten das auch andere "weniger kreative Leute" tun? Wirft die Frage auf ob Programmierer auch kreative Leute sind? Wahrscheinlich könnte ich eine ganze Abhandlung darüber schreiben, diese Wissenschaftlich begründen und dann zum Schluss kommen, dass Programmieren sehr wohl kreativ ist (eine kleine Abhandlung hier – Ist Programmieren kreativ).

    Wie ist es mit Projektmanagern, Marketing Managern, SEO Expert und Teamleader?

    die Fähigkeit eines Individuums oder einer Gruppe, in phantasievoller und gestaltender Weise zu denken und zu handeln.

    (http://wirtschaftslexikon.gabler.de/Archiv/82522/kreativitaet-v7.html)

    Solange man nicht gerade WC putzt, Zeitungen sammelt, Fenster putzt, Papier kopiert oder sonstige Rutinearbeit ist wohl überall Kreativität gefragt, erst recht, wenn man ein bisschen besser als der Durchschnitt sein will.

    Somit ist Aufräumen sicher ein guter Start, ein bisschen Musik, gutes Licht und ein paar inspirierende Bilder… aber hey Marcus, falls dich dein Chaos inspiriert und zu kreativen Ergüssen beflügelt, soll das auch zählen.

    Deine Meinung? Kann auch Chaos inspirierend sein?