Drupal SEO Module: Pathauto

Es gibt kaum noch Websites welche nicht das mod_rewrite Apache Modul einsetzen, um die URL Struktur der Site zu ändern. Mittlerweile bringen die meisten Content Management Systeme bereits Funktionen mit, um die URLs zu rewriten. Auch Drupal hat eine solche Funktion bereits integriert – Lesbare URLs genannt. Leider ist die Funktion in Drupal nur sehr rudimentär integriert. Durch aktivieren der Funktion werden die URLs lediglich auf eine Ordnerstruktur umgestellt. Die URLs sehen dann beispielsweise so aus : xy.com/node/41, xy.com/user/52 und xy.com/taxonomy/term/2.

Mit dem Pathauto Modul kann man die URLs nicht nur von den Parametern befreien, sondern auch sprechen lassen. Ein Node der vorher unter xy.com/node/41 erreichbar war, ist anschließend zum Beispiel unter xy.com/blog/drupal-seo-module-pathauto erreichbar.


Nach der Installation des Moduls findet man im Administrationsmenü unter Strukturierung den Punkt URL-Aliase. Hier lassen sich für verschiedene Inhaltstypen (Node types) verschiedene URL-Strukturen aufbauen. Hierfür stehen Variablen wie [title] oder [term] zur Verfügung. Durch das flexible Taxonomy Modul kann man so beispielsweise die Menü Struktur der Site auch auf die URL Struktur abbilden.

Damit auch Umlaute in den URLs richtig umgesetzt werden, sollte man ausserdem auch noch das Transliteration Modul installieren. Durch die Aktivierung des Moduls werden ä, ö und ü’s zu ae, oe oder ue umgeschrieben. Nach der Aktivierung des Transliteration Moduls muss man hierfür allerdings noch in den Einstellungen von Pathauto die Option Umcodieren, bevor der Alias erstellt wird aktivieren.

Mithilfe des Bulk-Modus lassen sich für eine ältere Seite für alle Nodes nachträglich die sprechenden URLs erzeugen. Die alten URLs werden automatisch via 301 Redirect auf die sprechenden URLs weitergeleitet. In den Einstellungen lässt sich auch eine Liste mit Stopwords definieren, welche nicht in den URLs auftauchen sollen.

Magento: An error occurred while saving the URL rewrite

Der Fehler entsteht normalerweise, wenn man im Admin Menü unter System -> Index Verwaltung alle Indizes neu aufbauen lässt. Gerade in der Version 1.4.* tritt der Fehler bei zahlreichen Installationen auf. Falls man Magento ohne das Multi-Shop Feature benutzt, sollten folgende Schritte helfen:

  • Cache leeren (/var/cache/ leeren)
  • Sessions löschen (/var/sessions/ leeren)
  • Die .htaccess Datei mit der originalen .htaccess Datei ersetzen

Falls alle diese Schritte nicht helfen, kann man noch versuchen die chmod Rechte des media Verzeichnis auf 777 zu setzen. Wir konnten hierbei allerdings keine Wirkung feststellen.

Magento Multi-Shops

Bei Magento Shops, welche das Multi-Shop Feature nutzen, ist die Sache etwas schwieriger. Hier muss man leider am Core arbeiten, auch wenn davon eigentlich absolut abzuraten ist, da bei jedem Update alle Änderungen wieder verschwinden. Allerdings wird hoffentlich im nächsten Update der Bug bereits beseitigt.

Normalerweise sollte die Datei app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Url.php ab der Zeile 249 normalerweise so ausschauen:

            try {
                $this->_getWriteAdapter()->insert($this->getMainTable(), $rewriteData);
            }
            catch (Exception $e) {
                Mage::throwException(Mage::helper('catalog')->__('An error occurred while saving the URL rewrite.'));
            }

Um den Fehler zu vermeiden, muss man schlicht die Exception auskommentieren.

            try {
                $this->_getWriteAdapter()->insert($this->getMainTable(), $rewriteData);
            }
            catch (Exception $e) {
                //Mage::throwException(Mage::helper('catalog')->__('An error occurred while saving the URL rewrite.'));
            }

Eine schöne Lösung ist das sicherlich nicht, allerdings ist der Fehler bereits dem Magento Team gemeldet und dürfte damit bald der Vergangenheit angehören.

Warum werden meine Artikel bei Magento nicht angezeigt?

Viele Shop Betreiber mit Basic PHP Kenntnissen machen sich selber daran einen Magento Shop aufzusetzen.

Durch den komplexen Aufbau von Magento entstehen dabei immer wieder Probleme. Eines der ersten Probleme ist oft, dass die angelegten Produkte im Shop nicht angezeigt werden. Das kann an verschiedenen Einstellungen liegen, welche wir hier aufzeigen wollen.

Produkt deaktiviert

Der einfachste Fehler ist eigentlich, dass das Produkt deaktiviert ist. Das Produkt kann man in den Produktdetails im Unterpunkt Allgemein im Feld Status aktivieren.

Produkt aktivieren

Sichtbarkeit des Produkts einstellen

Das nächste Problem ist in der selben Ansicht zu finden: Die Visibility / Sichtbarkeit des Produkts. Zur Auswahl stehen hier vier Optionen (Katalog & Suche, Suche, Katalog, Einzeln nicht sichtbar). Damit ein einfaches Produkt im Shop sichtbar wird, sollte man hier Katalog & Suche auswählen.

Visibility / Sichtbarkeit des Produkts

Lagerbestand

Der Punkt Lagerverwaltung bietet auch einige Stolpersteine. Die Menge  muss größer als 0 sein, damit das Produkt angezeigt wird. Gleich unterhalb der Menge ist eine weitere interessante Option: “Anzahl um Produkte mit Nicht auf Lager zu kennzeichnen”. Der Lagerbestand wird also ab einer bestimmten Menge wieder auf Nicht auf Lager gesetzt, falls man die Magento Lagerverwaltung aktiviert hat. Diese Einstellung kann man auch in den Systemeinstellungen bearbeiten.

Lagerverwaltung - Menge

Produkte in Kategorien sortieren

Damit die Produkte im Shop angezeigt werden, muss man diese in eine Unterkategorie der root-Kategorie einsortieren. Dies wird unter Katalog -> Kategorien verwalten erledigt. Zu beachten ist hierbei, dass neu angelegte Kategorien anfangs nicht aktiviert sind. Damit die Kategorien angezeigt werden, muss man diese daher aktivieren.

Kategorien aktivieren

Last, but not least….

Falls man alle vorherigen Probleme behoben hat und die Produkte immer noch nicht angezeigt werden, kann es an den Indizes liegen. Die Indizes kann man unter System -> Index Verwaltung neu aufbauen. Hierzu markiert man alle vorhandenen Indizes und führt anschließend die Aktion Neuaufbau aus.

Kurz vorgestellt: Nachnahme in Magento integrieren

© detailblick - Fotolia.com

Magento fehlen in der Standard Installation viele Features, welche im Europäischen Raum gängig sind. Dazu zählt auch die Bezahlungs per Nachnahme.

Durch den modularen Aufbau von Magento ist es aber kein Problem, die Bezahlung per Nachnahme zu ermöglichen. Hierfür gibt von der Firma Phoenix ein Modul namens Cash on Delivery bereitgestellt.

Das Modul ermöglicht es auch, dem Kunden eine zusätzliche Gebühr für den Versand per Nachnahme in Rechnung zu stellen.

Nachnahme im Admin Menü

betterAmazonAPI Beispiele

Nachdem ich heute mein erstes öffentliches WordPress Plugin vorgestellt habe, folgen jetzt ein paar Beispiele was man mit der Displaycode Funktion alles machen kann. Der Vorteil von Displaycode ist vorallem, dass die Anzeige der Produkte jetzt vollständig individuell gestaltet werden kann.

Einfache Tabelle

[Title] [Title]

Mit diesem HTML-Code können die Produkte in einer sehr einfachen Tabelle angezeigt werden. Wie die Ausgabe dann im einzelnen ausschaut, liegt vorallem auch am verwendeten Theme und dem zugehörigen CSS. Hier ein Beispiel wie es ausschauen könnte:

Einfache Tabelle

Tabelle mit Beschreibung und Preis

[Title]

[Title]

[Description] Jetzt ab [Price] Euro.

Bei diesem HTML-Code wird sowohl eine kurze Beschreibung als auch der Preis des Artikels angezeigt. Wenn man mit der Preis-Variable arbeitet, sollte man allerdings die Cache-Zeit sehr niedrig einstellen, damit man keine rechtlichen Probleme bekommt. In der Ausgabe schaut das dann so aus:

Produktbeschreibung ohne Bild

[Title]

[Description] Jetzt ab [Price] Euro.

Im letzten Beispiel wird nur der Produktname, die Beschreibung und der Preis ausgegeben.

betterAmazonAPI – Amazon Produkte in WordPress anzeigen

Das Amazon Partnerprogramm gehört wohl zu den besten Affiliate Programmen in Deutschland. Es ist daher auch nicht verwunderlich, dass es für die Amazon-API mittlerweile sehr viele Plugins für WordPress gibt. Trotz der großen Auswahl hatte aber jedes Plugin in meinen Augen seine Schwächen. Daher habe ich irgendwann begonnen, das AmazonFeed Plugin zu modifizieren.

Anfangs hielten sich die Modifikationen noch in Grenzen und waren eher darauf ausgelegt, dass man AmazonFeed jederzeit auf die aktuellste Version updaten könnte ohne die eigenen Modifikationen zu verlieren. Nach und nach sind die Veränderungen aber immer größer ausgefallen und ich habe mich entschieden, daraus ein eigene Plugin zu machen. Dabei entstand das betterAmazonAPI Plugin.

Neue Features

Das betterAmazonAPI Plugin basiert in großen Teilen auf dem AmazonFeed Plugin, was man auch im Backend bemerkt. Folgende Features sind bei betterAmazonAPI hinzugefügt worden:

  • Cloaking der Affiliate Url
  • Tracking der Clicks und Impressions des Artikels
  • Vollständig anpassbares Layout der Amazon Werbung
  • Automatische Optimierung der angezeigten Artikel anhand eines Quality Faktors, welcher anhand der Views und Clicks berechnet wird.
  • Anzeige des Preises des Artikels

Auswahl der Produkte

Die Produkte von betterAmazonAPI werden wie bisher weiterhin über Tags oder Kategorien ausgewählt. Hinzugekommen ist lediglich eine weitere Option zur Sortierung der Produkte.

Display Order - Optimized

Beachten muss man allerdings, dass man Optimized nur verwenden kann, falls man die Option “Redirect Amazon URLs” aktiviert hat. Ohne diese Redirects kann das Plugin nicht die Clicks tracken und kann daher auch nicht Produkte mit besonders hoher Klickrate raussuchen.

Redirect Amazon URLs

Da die Produkte natürlich nicht überall die passende Werbung darstellen, nur weil sie auf einer anderen Seite viel geklickt werden, wird der Quality Faktor pro Seite und pro Produkt berechnet. Das heisst: Ein Produkt mit hoher Klickrate auf der Unterseite “Computerspiele” erscheint nicht auf der Unterseite “Notebooks”, ausser er passt dort von den Tags ebenfalls und hat sich im Lauf der Zeit ebenfalls einen hohen Quality Faktor erarbeitet.

Zur Displaycode Funktion werde ich in einem weiteren Artikel noch ein paar Beispiele schreiben.

FCKEditor und Word – Das Copy&Paste Problem

Der FCKEditor ist, ähnlich wie TinyMCE, ein WYSIWYG-Editor für HTML-Formulare. Mittlerweile gibt es für den FCKEditor zwar ein Nachfolge Projekt mit dem Namen CKEditor, allerdings wird der FCKEditor immer noch bei vielen Seiten eingesetzt.

Besonders beliebt ist der FCKEditor bei Drupal Seitenbetreibern, da der FCKEditor sehr gute Möglichkeiten der Bildintegration bietet. Durch die WYSIWYG Editoren kann man den Besuchern also nicht nur die Möglichkeit geben ihren Text einfach zu formatieren, sondern kann diesen auch die Möglichkeit bieten Bilder mit wenigen Mausklicks hochzuladen.

Obwohl das Bearbeiten und Erstellen von Texten auf Internetseiten also mittlerweile deutlich einfacher ist als früher, schreiben viele ihre Texte doch am liebsten immer noch in Word. Anschließend wird der Text in den WYSIWYG Editor kopiert und siehe da – es schaut alles noch gleich aus. Allerdings wurde außer dem Inhalt und der Formatierung noch jede Menge sinnloser Word Code mitkopiert. So kann sich der Code gerne mal auf das doppelte vom eigentlichen Text aufblähen, was natürlich nicht im Sinne des Seitenbetreibers ist. Daher bietet der FCKEditor hierfür ein geeignetes Gegenmittel, das mit allen Browsern funktioniert.

Damit der FCKEditor das kopieren in die Textarea überprüft, müssen folgende Zeilen in die Config eingefügt werden:

FCKConfig.AutoDetectPasteFromWord = true;
FCKConfig.CleanWordKeepsStructure = false;
FCKConfig.ForcePasteAsPlainText    = true;

Anschließend sollte der FCKEditor bei jedem Copy&Paste Vorgang ein Fenster anzeigen, welches den Inhalt der Zwischenablage anzeigt. Hierbei wird allerdings der ganze unnötige Code gekürzt, sodass man am Schluss sauberes HTML hat.

Performance Optimierung

Performance Optimierung wird immer wichtiger, schließlich sind sich mittlerweile fast alle SEO Blogs einig, dass die Performance einer Seite ein wichtiges Ranking Kriterium ist.

Genauso wie die Hardware Performance stetig gestiegen ist in den letzten Jahren, so sind auch die Performance Ansprüche von Skripten gestiegen. Gerade Performance Monster wie Magento wären auf Pentium 3 Webservern undenkbar gewesen.

Doch wie holt man das meiste aus seiner Webseite heraus ohne auf den modularen Luxus von Magento und Drupal zu verzichten?

Wenige HTTP Requests

Ein einfach umzusetzender Performance Punkt sind die HTTP Requests. Die meisten Browser verarbeiten in den Standard Einstellungen nur 2-5 HTTP Requests gleichzeitig. Also muss der Browser bei 40 Requests diese alle seriell abarbeiten, wodurch das ganze deutlich langsamer wird.
Die einfachste Optimierungsmöglichkeit der HTTP Requests sind die Javascripts und Stylesheets. Gerade bei aktuellen Content Management Systemen werden viele Teile der Seite nur noch Modular eingebunden. Das heißt allerdings auch, dass jedes Modul für die Darstellung ein CSS mitbringt und eventuell noch 1 oder 2 Javascript Datei(en).
Es gibt für viele Systeme mittlerweile Module, die die Javascript und CSS Dateien vor dem Ausliefern der Seite in eine Datei zusammenfassen. Genau zu solchen Modulen würde ich auch raten, obwohl sie nicht das Optimum aus der Seite herausholen. Auch wenn die (minimale notwendige) Rechenleistung für das Zusammenfassen der Dateien bei den meisten Servern heute keine wirkliche Rolle mehr spielt, ist das manuelle Zusammenfügen von CSS und Javascript Dateien nach wie vor Effizienter, wenn auch umständlicher in der Wartung.

Auch Hintergrund Bilder kann man ohne Probleme zusammenfassen. Wenn die Bilder nicht in der Bilder Suche erscheinen sollen, kann man diese mit sogenannten CSS Sprites zusammenfassen und dadurch enorm viele HTTP Requests einsparen. Uninteressant wird das allerdings, wenn die Bilder in der Google Bilder Suche erscheinen sollen, da Google keine CSS Sprites verarbeiten kann.

Expire Header

Bei einem Seitenbesuch werden viele Dateien dank der intelligenten Caching Mechanismen nur einmal von dem Server in den Cache geladen. Allerdings werden die meisten Dateien immer noch ohne Expire Header ausgeliefert. Diese sogenannten Expire Header übermitteln dem Browser, wie lange sich diese Datei nicht ändern wird. Werden die Expire Header bei einer Datei mit ausgeliefert, behält der Browser die Datei solange im Cache bis der Expire Header ausläuft. Gerade CSS und JS Dateien kann man dem Browser deutlich länger in den Cache einlagern, als dieser es mit seinen Standardwerten macht.

DNS Abfragen reduzieren

Bei vielen Providern sind die DNS Server furchtbar langsam. Um dieses Performance Problem auszutricksen hilft eigentlich nur eins: Inhalte von so wenigen Domains wie möglich laden. Durch die Verbreitung von Widgets, Werbung und sonstigen eingebundenen Diensten ist das leider nicht immer möglich. Allerdings sollte man sich bei vielen Widgets auch fragen, ob man diese wirklich braucht oder nicht vom lokalen Server einbinden kann? Bestes Beispiel dafür sind die Iconfarmen für die verschiedenen Social Bookmark Seiten. Kenne eigentlich niemand, der diese Seite wirklich nutzt, und selbst wenn man auf die Icons besteht, kann man diese auch vom lokalen Server aus mit dem richtigen Link einbinden.

Bilder nicht mit HTML verkleinern

Eigentlich ein lächerlicher Tipp, wenn man es nicht noch viel zu oft sehen würde: Bilder die 3 Megapixel groß sind und dann via HTML auf 800×600 herunterskaliert werden. Sowas ist ein absolutes No-Go und sollte auf jeden Fall entweder durch serverseitiges Skalieren oder gleich durch kleinere Bilder vermieden werden. Mittlerweile gibt es aber kaum noch ein CMS, welches das serverseitige skalieren von Bildern nicht zulässt und daher ist die Empfehlung ganz klar die Bilder via PHP auf dem Server verkleinern zu lassen.

Caching Mechanismen

Mittlerweile gibt es kaum mehr ein CMS welches ohne intelligente Caching Mechanismen oder module für diese Funktion daherkommt. Allerdings wird es auf vielen Seiten – trotz vorhanden sein – nicht eingesetzt. Manche Teile einer Seite kann man leider nicht cachen – andere dafür umso besser. Also informiert euch und schaut welche Caching Möglichkeiten euer CMS bietet. Gerade für WordPress und Drupal bieten sich da super Möglichkeiten. Hiervon profitiert natürlich nicht nur die Ladezeit der Seite, sondern auch die Auslastung des Servers.

Viel Bandbreite und dadurch Ladezeit kann man auch durch den Einsatz von GZIP Kompression einsparen. Dazu werde ich aber demnächst nochmal einen eigenen Beitrag verfassen.

HTML 5 Überblick

Die letzte HTML Spezifikation ist von 1999, also mittlerweile knapp zehn Jahre her. Auch wenn man das kaum mitkriegt, hat sich seitdem einiges bewegt bei der W3C. Nachdem zwischendrin immer wieder an XHTML gearbeitet wurde, wird jetzt doch noch eine Version 5 von HTML erscheinen. Und mit der neuen Versionen wird es jede Menge Änderungen geben.

Die größte Änderung der neuen Version dürfte der Abschied von SGML sein. Dadurch wird zum zweiten Mal ein sehr alter Standard verabschiedet, welcher damals auch mit XHTML beseitigt wurde.

Generell kann man sagen, dass HTML5 deutlich näher am Nutzer entwickelt worden ist, als irgendeine HTML/XHTML Version davor. Den Dokumententyp beipsielsweise kann man in zukunft mit einem simplen <!dopytype html> angeben. Bisher sind hier Mammutzeilen wie diese keine Seltenheit:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>

Bei vielen Änderungen kommt es einem so vor, als würde die W3C einfach die aktuellen Seiten als valide erklären. So wird beispielsweise das Verlinken von Blockelementen, was man heute schon sehr oft sieht, nun nachträglich als valide erklärt. Das dürfte auch eine Folge davon sein, dass die Browserhersteller diesmal deutlich besser in den Prozess eingebunden worden sind, als in die Versionen zuvor. Die Browserhersteller müssen diesmal also nicht 2 Standards, den Standard und den quasi-Standard der im Web verwendet wird, unterstützten, sondern der Standard wird dem quasi-Standard einfach angepasst.

Ein weitere große Änderung ist die native Unterstützung von Audio und Videodateien. Ist Audio und Video Material bisher ausschließlich mit Flash oder Silverlight anzusehen, so sieht der neue Standard vor, dass die Browser dass auch nativ beherschen. Die Idee ist sicherlich gut, scheitert aber vermutlich an den Codecs. Leider wurde bei HTML 5 bisher kein Codec vorgeschrieben und daher wird das ganze vermutlich im Sande verlaufen.

Auch bei Canvas bewegt sich wieder einiges. Mit Canvas würde vieles erleichtert werden, beispielsweise kann man damit sehr einfach Graphen oder ähnliches zeichnen. Die Ansteuerung läuft dabei über JavaScript – dürfte sich also früher oder später dann auch in den JS Frameworks finden. Natürlich kann man damit theoretisch deutlich mehr machen, als nur Graphen zu zeichnen. Leider blockiert auch hier der Internet Explorer die Entwicklung wieder ziemlich. Eventuell wird man die Unterstützung dafür aber im Internet Explorer 9 finden.

Eine weitere Neuerung wird die Einführung von neuen Tags. Die meisten Tags sind Blockelemente wie <div> und sollen diesen <div> auch ersetzen. Wo zur Zeit noch häufig ein <div id=”navi”> anzutreffen ist, soll in zukunft ein <nav> stehen. Vorteile hätte das ganze natürlich besonders für Screenreader, aber auch Drucker und Handys.
Durch die klare Definition der einzelnen Elemente wäre es für die Screenreader möglich den Content von der Navigation noch deutlich trennen zu können.
Handys könnten beispielsweise den Header und die Navigation ausblenden und damit mehr Platz schaffen für den eigentlichen Content.
Natürlich würde sich – bei strikter Einhaltung – für Google auch einiges vereinfachen. Der Footer wäre klar definiert und die Links daraus könnten beispielsweise deutlich abgeschwächt werden. Aber wer wird sich daran schon strikt halten? Interessant dürfte es allerdings werden, wenn die großen CMSe auf HTML 5 umstellen.
Weitere Elemente sind beispielsweise: <article>, <header> und <footer>.

Auch bei den Formularen wird sich einiges tun. So soll es in Zukunft neber den drei bekannten Typen ( Text, Checkbox, Submit Button ) weitere Spezialvarianten geben. Beispielsweise soll es Feldertypen für eMail, die URL, die Telefonnummer und die Farbe ( Colorpicker ) geben. Auch ein Feldtyp für Datums- und Zeitfelder soll es geben.
Die Feldertypen sind zwar keine rasante neuerung – schließlich gibt es das alles in JavaScript schon – dürfte aber doch in die richtige Richtung gehen. Vorallem dürfte man sich beim einbau der einzelnen Funktionen viel Zeit sparen.

Auch zu erwähnen ist die Entscheidung Frames aus dem Standard zu streichen. Wer Frames umbedingt weiterhin braucht, kann Frames mit IFrames simulieren. Aber wer setzt schon noch wirklich auf ein Frame basierendes Layout?

HTML 5 führt auch ein neues Attribut namens contenteditable ein. Damit wird es möglich eine Seite zu bearbeiten. Übrigens hat hier Microsoft mal Erfindergeist bewiesen und das Attribut bereits seit dem IE 5.5 implementiert. Leider wurde aber nicht weitergedacht und es wurde kein Standard zum Speichern der bearbeiteten Dokumente spezifiziert.
Es stellt sich sowieso die Frage, wer von seinem angestammten Webeditor wie TinyMCE oder FCKeditor zu der ( in meinen Augen unfertigen ) HTML5 Lösung wechseln wird?

Auch wenn Web Storage nicht mehr explizit in HTML 5 spezifiziert wurde, so gibt es doch sehr viele Möglichkeiten Web Storage geschickt zu nutzen. Von daher dürften viele Web Applications in naher Zukunft auch ohne Google Gears offline funktionstüchtig sein.

In vielen Bereichen wurde also sinnvoll nachgearbeitet, wenn auch oft nur bereits bestehende JavaScript Lösungen in HTML umgeschrieben wurden. Für die Hobby Webdesigner dürfte das aber eine große Erleichterung sein. Durch die neuen HTML 5 Tags kann man darauf hoffen, dass auch sehbehinderte Menschen leichter Zugang zum Internet finden. Der Beitrag basiert auf einem Beitrag aus der c’t und ein paar eigenen Tests.

Linkbuilding Pro mit Drupal (Multisite) nutzen

Die meisten werden vermutlich schon mal Link Building Pro gelesen haben, nachdem das ja doch gut die Twitterstreams gegangen ist. Ich finde das JavaScript Programm mehr als genial – vielleicht springt ja dadurch wirklich der ein oder andere schöne Link raus? Zumindest probieren sollte man es, denke ich.

Daher habe ich mir auch eine kleine Lösung für Drupal gebastelt. Ich denke von Modul kann man hier noch nicht sprechen, trotzdem will ich den Code jedem zugänglich machen.

Das Problem ist, dass ich Drupal immer mit dem Multisite feature benutze und ich daher die JavaScript Datei nicht in jedes Template extra einbinden will. Vorallem behält man sich so die Möglichkeit vor die Themes regelmäßig ( ohne viel Arbeit ) upzudaten.

Nachdem ich ja schon seit langem vorhabe, ein HowTo für die Drupal Programmierung zu schreiben, bietet sich jetzt die perfekte Möglichkeit damit ein anzufangen.

Drupal Module bestehen immer aus mindestens 2 Dateien: einer .info Datei und einer .module Datei. Oft sieht man noch eine .install Datei, welche beispielsweise Datenbanken SQL Statements enthalten. Unser “Mini  Modul” braucht sowas aber nicht und besteht daher nur aus 2 Dateien: copyLink.info und copyLink.module.

Die copyLink.info würde in unserem Fall so aussehen:

; $Id: copyLink.info,v 1.0 2009/12/20 11:47:09  apsivam Exp $
name = copyLink
description = Adds Linkbuilding Pro js to every node
core = 6.x
version = "6.x-1.0"
core = "6.x"
project = "copyLink"
datestamp = "1261308572"

Die .info Datei enthält nur Angaben für die Modulverwaltung von Drupal. Durch die Informationen in dieser Datei kann Drupal selbstständig ermitteln, wann ein Modul ein Update benötigt oder.

Die zweite Datei fällt in unserem Fall nicht viel umfangreicher aus. Normalerweise stehen in der .module Datei große Teile der Programmlogik oder zumindest verweise darauf. Die .module Datei ist daher die wichtigste Datei bei einem Drupal Module. In unserem Falle enthält die copyLink.module nur einen aufruf, damit die JavaScript Datei eingebunden wird.

<?php
// $Id: copyLink.info,v 1.0 2009/12/20 11:47:09 apsivam Exp $
/**
* @file
* Adds Linkbuilding Pro js to every node
*/
/**
* Implementation of hook_nodeapi().
*/
function copyLink_nodeapi(&$node, $op, $teaser, $page) {
drupal_add_js(drupal_get_path('module', 'copyLink') .  '/link-building-pro-min.js');
}
?>

Das Modul macht also nichts anderes, als den aktuellen Pfad zu bestimmen und anschließend die JavaScript Datei in die Nodes einzubinden mit der Drupal Funktion drupal_add_js.

Wenn man die 2 Dateien und die link-building-pro-min.js in einen Ordner gepackt hat, muss man das ganze nur noch hochladen und aktivieren. Der Ordner sollte copyLink heißen.

Eine große Hilfe zum ersten eigenen Drupal Modul ist das jetzt sicher noch nicht, werde aber versuchen das ganze mal beizeiten auszubauen.