String nach x Zeichen abschneiden – Snippet

Diese Funktion kann jedoch noch zu Problemen führen, wenn auch noch HTML Tags im $string vorkommen. Um dieses Problem zu beheben, ist es wahrscheinlich am Einfachsten, alle HTML Tags via Regex zu entfernen.

Diese Funktion kann für einen speziellen Teaser oder ähnliches verwendet werden.

<?php
/**
* Diese Funktion schneidet einen String nach bestimmten
* Anzahl an Zeichen ab. Dabei wird jedoch erst beim Wort
* ende abgeschnitten.
*
* @param string $string – Zu beschneidender String
* @param int $pos – Wo soll der String abgeschnitten werden
*
* @return string $string – abgeschnittener String
*/
function cutStr($string,$pos)
{
if ( $pos

Einen Dank an Tom.

Drupal und Google Pageranking

In den letzten paar Wochen ist rapsli.ch vom Pageranking 3 auf Pageranking 4 aufgestiegen. Dadurch ist eine bessere Platzierung in Google möglich.

Page Rank Check

 Ich muss sagen, dass Google allgemein gerne Drupal Seiten besucht. Ich bin leider keine SEO (Search Engine Optimization) Guru, aber ein paar Sachen, die ich herausgefunden habe:

  • Clean URLs verwenden!
  • Path Auto und dann irgend etwas schlaues einstellen
  • Hohes internes Linking (durch diverse Blöcke erreichbar, z.B. Similar, Recent Comments usw.)
  • Externe Links
  • Sitemap hatte ich mal installiert, weiss aber nicht wieviel das hilft.

Ich bin nach wie vor der Meinung, dass das beste SEO Zeit und Inhalt ist. Wie sagt man so schön: "Von nichts kommt nichts" und das ist wohl auch beim Bloggen und auf Google so. Falls sich jemand mehr mit Google beschäftigen will gibt es noch ein praktisches Webmastertool. Hat noch interessante Statistiken, ich bin jedoch der Meinung, dass zuerst auf jede Seite ein vernünftiger Inhalt muss!

 

Debuggen mit PHPEclipse

So. Der Debugger unter PHPEclipse läuft und ich bin extrem begeistert! Wirklich extrem. Nachdem ich gestern noch ein wenig Probleme bekundet habe, läuft er jetzt ;)

PDT vs. PHPEclipse

Das ist nicht das gleiche! PDT wird von Zend entwickelt, während PHPEclipse von der Community entwickelt wird. Daher sollte man auch vermeiden, PDT und PHPEclipse nebeneinander laufen zu lassen, da dies anscheinend zu Problemen führen kann. Einfach PDT weglassen.

Debugger

Unter PHPEclipse hat man die Wahl zwischen xDebug und DBG. Mit PDT hat man die Möglichkeit mit zend Debug zu debuggen. Da ich mich für die PHPEclipse Version entschieden habe, habe ich DBG genommen.

Eine genaue Anleitung, bezüglich den Einstellunge hat Schnittmenge als Kommentar bereits gepostet (Link).

PHP Eclipse installieren

Einfach unter Help -> Software update -> Find and install -> new Software

Dann folgende neuen Remote Sites:

Wichtig! xDebug nicht installieren! könnte zu problemen führen.

Damit sind eigentlich die wichtigsten Sachen vorhanden. Jetzt kann man nach dieser Anleitung vorgehen und dann sollte es wunderbar klappen.

Probleme:

Mein Problem war, dass ich:

  1. Die ganze Zeit versuchte habe den Zend Debugger zum Laufen zu bringen und dabei PHPEclipse und PDT installiert habe, obwohl beide für das gleiche sind -> das hat wohl dann zu Problemen geführt.
  2. Als ich das endlich kapiert habe (danke an ed_mann aus #phpeclipse), hatte ich jedoch noch eine alte PHPEclipse Version und aus irgend welchen Gründen hat die nicht richtig funktioniert.

Fazit:

Ich konnte nur schnell mal testweise debuggen, aber ich bin echt begeistert von der Geschwindigkeit. Mit dem Zend Studio hat das wahrscheinlich jedes mal mind. 10 Sekunden gedauert, bis ich mal an einem Break Point angekommen bin. Jetzt mit PHPEcipse und DBG geht es 2 Sekunden.

Wie bereits gesagt, im Juni werde ich wohl wieder ein bisschen entwickeln und da wird dann der Debugger auch auf Herz und Niere getestet :) …. Vielleicht ändert sich meine Meinung ja noch, aber ich denke mal wohl kaum.

-> 4 Sterne für PHPEclipse (den fünften muss es sich erst noch im Langzeittest verdienen)

Eclipse als PHP IDE für Drupal

Gestern beim Drupaltalk hat jemand auf die Eclipse IDE hingewiesen. Ich arbeite eigentlich seit rund 5 Jahren mit Eclipse, jedoch für die Java Entwicklung. Ich habe dann auch vor ca. 3 Jahren mal das PHP Plugin für Eclipse angeschaut und war ziemlich enttäuscht. Es wollte einfach nicht wirklich so, wie ich mir das vorgestellt habe. So habe ich mich dann wieder abgewandt und diverse andere verwendet.

Heute habe ich es mal wieder versucht und ich muss sagen, ich bin begeistert :) . Jetzt ohne Witz. Ich habe kürzlich Open Komod probiert und war auch hier enttäuscht, da keine Funktionen aufgelistet werden, welche die aktuelle Datei enthält. Komod war also innerhalb von 3 Tagen wieder weg vom Fenster.

Eclipse bietet das alles. Mit Eclipse habe ich bereits Erfahrung und kenne mich relativ gut aus (ich habe es sogar mal geschafft, C++ mit Eclipse zu entwickeln). Ich fühle mich einfach wohl und ich weiss, wo die Sachen sind. Daher finde ich es echt genial.

Einziger Wehrmutstropfen: Der Remote Debugger will noch nicht so recht. Laufen tut er zwar und ich habe eigentlich alle nötigen Sachen, aber es fehlt einfach noch das Pünktchen auf dem i. Also, wenn der jetzt auch noch schneller läuft, als ich mir das vom Zend gewöhnt bin, dann amen.

Hier noch meine Ressourcen:

Ich musste bei mir noch eine kleine Änderung anbringen in der php.ini Datei:


[Zend]
;zend_extension_ts = "C:xamppphpzendOptimizerlibZendExtensionManager.dll"
zend_extension_manager.optimizer_ts = "C:xamppphpzendOptimizerlibOptimizer"
zend_optimizer.enable_loader = 0
zend_optimizer.optimization_level=15
;zend_optimizer.license_path =
; Local Variables:
; tab-width: 4
; End:

Die erste Zeile musste ich auskommentieren, sonst ist es einfach nicht gelaufen. Mal schauen, wie wir dem Eclipse noch den Debugger beibringen.

Fazit:

Wer bereits an Eclipse gewöhnt ist, sollte auf jeden Fall umsteigen! Ich finde die Geschwindigkeit ist echt nicht schlecht und das auf einem Oldi-Computer (Dell Inspiron, 1.7 GHz -> nix mit Core Duo oder so, 1.2 GB RAM).

Leider bin ich im Moment noch gerade in den Prüfungen und für richtiges Testen hat es noch nicht gereicht :( … aber im Juni wird wieder entwickelt :)

Demographische Verteilung von Drupal

Soben hat Dries auf seiner Seite eine nette Statistik veröffentlicht. Es ist recht ernüchternd ;) , aber eigentlich nicht anders zu erwarten. Die Statistik zeigt die Mitglieder, welche auf Drupal.org registriert sind nach Land auf (diese Angabe ist optional).

Rund 1/3 der Mitglieder auf Drupal.org kommen aus USA. War ja auch nicht anders zu erwarten. Danach flacht es massiv ab. Die Schweiz kommt dann gerade mal auf Rang 33. Immerhin eine Verbesserung ist zu sehen.

Immerhin haben wir uns von Platz 41 um 10 Plätze nach vorne gekämpft. In absoluten Zahlen, sind es für die Schweiz 1180 Mitglieder und für die USA 74840. Wenn man das jetzt noch auf die Pro Kopf Bevölkerung ausrechnet:

  Mitglieder auf drupal.org Einwohner Drupalianer/Einwohner
Schweiz 1180 7’591’400 0.00016
USA 74840 303’346’630 0.00025

Das relativiert dann das ganze doch wieder ein bisschen. Die Schweiz ist einfach zu klein!

Shop mit Drupal umsetzen – Ubercart

Immer mal wieder taucht die Frage im Drupalcenter auf, ob und wie sich ein Shop mit Drupal umsetzen lässt. Ich bin gerade in der Endphase eines Shopes und möchte hier ein wenig meine Erfahrungen zusammenstellen:

Umsetzung: Als Shopsystem habe ich mich auf Ubercart geeinigt. Es schien mir einfach das einfachere und kompaktere für das Projekt sein. Zahlung ist nur möglich per Überweisung. Mwst-Steuer wird nicht ausgewiesen.

Vorteile:

  • Warenkorb und Checkout Prozess, sind extrem flexibel und leicht zu implementieren. Hat mir sehr gut gefallen.
  • Katalog. Greifft in die bestehende Taxonomy und sieht ganz hübsch aus. Super!
  • Die einzelnen Produkte lassen sich gut mit CCK erweitern. Hat alles wunderbar geklappt.
  • Rechnung lassen sich via Template relativ leicht anpassen.

Nachteile:

  • Dazu gehört vor allem ein Rabatt System. Es gibt zwar ein Modul (Discount) für Ubercart. Dieses ist jedoch leider nicht wirklich gepflegt und ist nicht wirklich für den Einsatz geeignet, da es auch nur teilweise funktioniert.Man hätte theoretisch die Möglichkeit, viel versch. Rabatte zu machen, aber wenn das Modul nicht will, dann klappt das auch nicht. Zudem kann man mit den Rabatten auch keine Views oder so ähnlich erstellen, um diese speziell zu bewerben. Falls nicht wirklich benötigt -> Finger weg!
  • Ich habe gehört, dass es Probleme mit der deutschen Mwst Steuer gibt, habe aber jedoch keine Erfahrung damit gemacht.
  • AGB. Diese musste ich über das Modul “legal” lösen, da anscheinend nichts dafür in Ubercart vorgesehen ist -> nur suboptimal.
  • Deutsche Übersetzung ist eine absolute Katastrophe. So viele Fehler habe ich schon lange nicht mehr gesehen. Nein, das ist wirklich nicht schön. Falls jemand interessiert ist, ich hätte eine einigermassen ok deutsche Übersetzung, welche zumindest das Interface für den Kunden korrekt übersetzt.
  • Lager. Zweite Katastrophe: Will man ein Produkt, welches nicht mehr an Lager ist, automatisch aus dem Verkauf ziehen, so muss man ein zusätzliches Modul installieren und dann den Lagerbestand in zwei verschiedenen Orte aktualisieren. Ich weiss echt nicht, was hier in die Entwickler gefahren ist!

Fazit:

Ich muss sagen, dass ich irgendwie ein kleines bisschen enttäuscht bin, wobei dies wohl zu einem grossen Teil durch das Discount Modul kommt. Ich denke, für einfach Shops ist es sicher gut geeignet. Will man jedoch einen zweiten Amazon und Co. aufbauen, so tut man wohl besser daran ein System zu nehmen, welches dafür ausgelegt ist.

Es lässt sich also extrem schnell was bauen. Aber es gibt ein paar Klippen, welche dann doch nicht ganz so schön gelöst sind. Ich hoffe mal, dass hier noch weiter gearbeitet wird und ein paar Fortschritte gemacht werden.

Nodes ohne Titel

Der Titel ist standardmässig in jedem Node als Pflichtfeld drin. Das ist jedoch nicht immer gewünscht. Manchmal braucht man einfach keinen Titel. Das Bodyfeld kann man leicht wegmachen, indem man einfach das label löscht, nicht so jedoch beim Titel.

Abhilfe schafft hier das Modul Automatic Nodetitles. Wenn man es installiert hat, hat man bei den Nodetypes drei Optionen:

  • Modul nicht verwenden, Titel von Hand hinschreiben
  • Titel automatisch setzen, wenn kein Titel von Hand geschrieben wurd
  • Titelfeld ganz ausblenden und alles automatisch machen.

Ist das Tokemodul installiert, so lassen sich Regeln für den Titel erstellen. Echt geniales kleines Ding!

 

Nike setzt auf Drupal

Nike setzt für die Olympischen Spiele auf Drupal. Soeben habe ich auf Dries Blog gelesen, dass ihr Homepage für Peking in Drupal umgesetzt ist. Der Beweis dafür ist hier.

Das coole dran ist, dass die Seite in extrem vielen Sprachen übersetzt ist und darunter auch weniger westliche, welche man ohne fundierte Kenntnisse kaum übersetzen kann ;) . Ein Proof of Concept also, dass Drupal 6 und das i18n Modul stark verbessert wurden.

Scheint als hält Drupal wirklich Einzug und ist auf dem Weg an die CMS Weltherrschaft ;)

 

Ein paar Gedanken über die Performance von Drupal

Auf Drupalcenter gab es eine ziemlich hitzige/witzige Diskussion bezüglich der Performance von Drupal. Ich kann mir einfach nicht verkneifen diesen hier zu posten, da doch sehr informativ und auf den Punkt gebracht.

Ich habe bisher leider noch keine Erfahrung mit hochperformanten System, bin jedoch an der Entwicklung eines solchen…

Alexander (22.5.08):

Das Problem mit Drupals Performance liegt mehr in den Reports begründet, die in der Regel (wie auch hier) nicht qantifiziert werden. Damit kann man dann aber in einem deterministischen System nichts anfangen und so wird "Performance" von etwas absolutem, weil messbaren, zu etwas rein subjektivem.

Dazu gibts auch andernorts Beispiele:
Als Windows XP auf den Markt kam, dachten alle es würde schneller starten. Warum? Weil der Dsktop früher angezeigt wird und das Laden diverser Software und Komponenten erst dananch stattfindet. Das Ergebnis ist, dass das System gefühlt schneller startet, man aber wenigstens ebenso lange warten muss, ehe man wirklich damit arbeiten kann. So wurde Performance zu einem Thema, zu dem jeder meinte etwas fachlich fundiert beitragen zu können.

Ähnliche Probleme kenne ich aus meiner Zeit als Java-Entwickler. Client-Anwendungen in Java gelten als langsam, weil das User Interface Swing oft als sehr langsam empfunden wird, nicht reagiert, hakt, … Das Problem ist nicht, dass Java oder Swing langsam sind, sondern weil die Entwickler der Software nich verstanden hatten / nicht umzusetzen wussten, dass das User Interface im Event Dispatcher Thread läuft und das zeitaufwändige Vorgänge in der Software da rausgehalten werden müssen (mittels Threads), um die Signalverarbeitung nicht zum Stocken zu bringen.

Zurück zu Drupal:
Eine Drupal-Website ist, wie jede Webanwendung, eine mittlerweile recht komplexe Angelegenheit. Wir haben die Datenhaltungsebene, umgesetzt über eine realtionale Datenbank und wir haben eine Dateiebene, auf der wir die Programmdateien des CMS, Konfigurationsdateien und allerlei statische Dateien (HTML-Snippets, Template-Dateien, CSS-Dateien, Bilder, Media-Dateien, …). Für die Abarbeitung eines HTTP Requests auf das CMS wird der gesamte benötigte Code auf Dateiebene eingelesen, wird der Code geparst und ausgeführt, werden Abfragen an die Datenbank gemacht und wird Output generiert. Typischerweise finden sich in diesem Output noch reichlich Anweisungen an den Webbrowser zusätzliche Ressourcen zu laden, wie CSS-Dateien, Bilder die im CSS verwendet werden, Bilder die im HTML-Teil verwendet werden, Flash-Dateien, Media-Dateien, JavaScript-Dateien, … Dazu kommen dann vielleicht noch JS-Spielereien, die erstmal geladen sein müssen und dann nochmal den Code umbauen oder Daten nachladen.

Wenn wir nun von einem langsamen Gesamtsystem reden gilt dasgleiche für ein CMS wie auch für eine "normale" Anwendung: Zunächst einmal müssen die Bottlenecks identifiziert werden. Wo also wird im Prozess zwischen dem ersten Request an den Server und dem vollständigen Rendern der Website wieviel Zeit verbraten?

Darin gehen Leitungsgeschwindigkeiten ein, Latenzzeiten für einzelne Aufrufe, Caching auf Dateiebene des Servers beim Einlesen der Dateien, ggf. Caching eines PHP-Moduls um ständige Neuparsen von nicht verändertem Code einzusparen (APC, Zend Cache, …), Caching auf Dateiebene des Servers für die Datenbank, Caching der RDBMS für Abfrgen und Daten, Normierungslevel der Datenbank, Effizienz der Datenbank-Abfragen, Optimierung des PHP-Codes, Wahl der Datenstrukturen durch den Entwickler, Wahl der Algorithemn durch den Entwickler, … die Liste lässt sich noch ne ganze Weile weiterführen.

Was gerne außer Acht gelassen wird, hier im Forum, demonstrieren Aussagen wie, "Ich habe auch andere Drupal-Seiten gesehen die waren total langsam.". Da sage ich: "Okay, ich habe schon viele statische Websites gesehen die auch langsam sind."
Das soll mal verdeutlich, was manche hier gerne tun, nämlich allein auf Basis einer einfachen Beobachtung eine ziemlich heftige Schlussfolgerung zu ziehen, ohne diese auch nur im Ansatz fachlich belegen zu können.

Schnappe ich mir als Laie ein CMS, klatsche alle möglichen Module rein und benutze ein Theme, dessen Entwickler (sollte ich es nicht selbst gewesen sein) vielleicht nicht der cleverste war, klatsche noch Google Maps hier und irgendwelche Web-Preview-JS-Klamotten dort rein und lasse das ganze bei einem Dumping-Hoster laufen, muss ich mich nicht wundern. Und wenn das 1000 Leute machen und ich all deren Websites abgrase liegts dennoch nicht zwingend am System als solchen.

Gerade Shared Hosting hat das Problem, dass die überhaupt für das CMS verfügbare Performance nicht einzuordnen ist. Keiner weiß was für eine Hardware da werkelt, wie das System konfiguriert ist und womit es sonst noch beschäftigt ist, wer da noch drauf gehostet wird und welches Schindluder deren Webanwendungen gerade treiben, wenn ich mal draufschaue. Und da will mir anmaßen die Performance von Drupal zu beurteilen?

Das ist wie Schumi in ein Kettcar setzen und sagen: "So wie der fährt, wird er nie Formel1-Weltmeister!"

Schaut man sich mal an welche Referenz-Websites mittlerweile mit Drupal laufen, ist es schwer vorstellbar, dass Drupal generell Performance-Probleme haben soll. Wir reden da von einer ganzen Reihe von Websites mit zig Millionen Hits. Wenigstens eine Website mit zig Millionen Hits betreiben und hosten wir auch und Performance ist gar kein Problem. Da reden wir noch nicht von Multi-Server Setups, sondern von einer einzelnen Maschine, die sich erst dann mal halbwegs ausgelastet fühlt, wenn sie des Nachts mal alle Daten zusammenrafft und packt, ehe sie sie auf den backup-Server schiebt.

Am Ende ist es wie so oft: Man bekommt, wofür man zahlt.

Wenn also mal wieder wer meint seine Drupal-Site sei langsam, soll er mal mit spezifischen Angaben anrücken, damit man überhaupt mal Anhaltspunkte hat, in welche Richtung man weiterforschen kann.

Aber einfach zu sagen "Drupal ist langsam" ist natürlich einfach.

P.S.:
Man kann mit Benchmarks belegen, dass im Vergleich zu anderen Sprachen Ruby recht langsam ist, was sich wiederum auch auf Ruby on Rails auswirkt. Das hat aber niemanden davon abgehalten performente Lösungen in RoR zu entwickeln.