Archiv June, 2008

In Drupal Dateinamen beim Hochladen bereinigen

Immer wieder haben Endkunden Probleme beim Hochladen oder beim Anzeigen von Dateien die im Dateinamen Sonderzeichen, etc. enthalten. Für Drupal gibt es da Abhilfe in Form eines Moduls. Transliteration (http://drupal.org/project/transliteration) entfernt ungültige Zeichen aus Dateinamen und beseitigt so lästige Probleme.
Die Drupal 6 Version des Moduls kann sogar bereits hochgeladene Dateien nachträglich noch umbenennen und so die Dateinamen säubern.
Wie ich finde, ein sehr nützliches Tool das bei keiner Installation von Drupal, welche für Endkunden gedacht ist, fehlen sollte.

Formularfelder mit Werten vorbelegen

Manchmal ist es nötig unter Drupal, in den Formularen zur Inhaltserstellung, Felder vorab mit Werten zu füllen (z.B. eine vorab gewählte Kategorie, ein vordefinierter Titel, etc.).

Um dies zu ermöglichen kann man das Modul Prepopulate nutzen, dieses füllt aus der $_GET-Variable der URL die #default_value Einträge der Formularfelder aus.

Beispiele (Lesbare URL's aktiv):

Ausfüllen des Titel:
/node/add/story?edit[title]=Hier der Titel

Ausfüllen des Body:
/node/add/story?edit[body_filter][body]=Hier die Beschreibung

Natürlich können auch mehrere Felder pro URL vorbelegt werden, indem die Variablen einfach mit an die URL dran gehängt werden:

/node/add/story?edit[title]=Hier der Titel&edit[body_filter][body]=Hier die Beschreibung

Die Namen der zu nutzenden Variablen, ergeben sich bis auf das body-Feld aus dem Quelltext. Alle Formularelemente sind dabei Elemente in dem "edit"-Array, welches in der URL immer mit angegeben werden muss.
Bei Standardformularfeldern ist das Element das name-Attribut des Feldes.

Joomla nach Drupal und Antispam über Mollom

  • Am 11 Juni wurde ein interessantes Modul für Drupal freigegeben: Joomla to Drupal, ein Portierungsmodul welches das Umsteigen von Joomla auf Drupal erleichtern soll. Da freut sich das Drupal-Herz Eye-wink
    Zu den bisherigen Features, der noch frühen Version gehört bereits
    • Import von Benutzern
    • Import von Sections und Kategorien
    • Import von Inhalten
    • Bei mehrfachem Import werden Duplikate erkannt und nicht erneut importiert

    Modulseite: http://drupal.org/project/joomla

  • Desweiteren gibt es für Drupal ein eigenen Antispam Service: Mollom (www.mollom.com), dieser funktioniert ähnlich wie Askimet und ist nicht nur auf Drupal beschränkt. Auf der Seite ist eine Registrierung erforderlich und pro Seite die geschützt werden soll, muss ein Schlüsselpaar erzeugt werden. Die Schlüssel müssen dann im Modul angegeben werden.
    Nach ein paar Tagen testen hier auf pebosi.net komme ich zu dem Ergebnis das bisher kein Spamkommentar mehr den Weg ins System gefunden hat.
    Laut Statistik welche für jede Seite auf Mollom einsehbar ist, gab es allerdings fast 500 Spamversuche die wohl erfolgreich abgewehrt wurden.

Adwords bietet Cost-per-Acquisition - maximales Conversion Gebot

Ein interessantes Feature wurde in meinem Adwords Account freigeschaltet: "Cost-per-Acquisition". Diese Funktion ermöglicht es einen maximalen Conversion-Preis anzugeben. Klickpreise macht Google per Algorithmus dann automatisch.
Erforderlich für diese Funktion ist Conversion Tracking und mindestens 200 generierte Conversions in den letzten 30 Tagen.
Bei einer Kampagne habe ich es direkt mal eingeschaltet und das von Google vorgeschlagene max. CPA Gebot eingestellt. Nach einem Tag "testen" (Smiling) hab ich allerdings festgestellt, dass das Tagesbudget überhaupt nicht ausgenutzt wurde (Es waren teilweise noch über 200 € verfügbar). Naja mal sehen was die nächsten Tage bringen, hoffe da tut sich noch ein bisschen was.
Was allerdings dieser Funktion noch fehlt ist CPA auf Keywordebene.

Kommentare mit Kontaktdaten

Um die anonymen Kommentatoren einer Seite ein Stück weit zu identifizieren, bietet das Kommentar Modul von Drupal eine Möglichkeit für anonyme Besucher der Seite Kontaktinformationen abzufragen.

Unter Drupal 6 findet man die Einstellungen bei den Inhaltstypen - bei Drupal 5 bei den Kommentaren selbst (Einstellungen-Tab).

Die Einstellungen lauten dort dann wie folgt:
Anonymous commenting:
Anonymous posters may not enter their contact information
Anonymous posters may leave their contact information
Anonymous posters must leave their contact informati
on

oder eben auf deutsch
Gastkommentare:
Gäste dürfen ihre Kontakt-Informationen nicht angeben
Gäste dürfen ihre Kontakt-Informationen angeben
Gäste müssen ihre Kontakt-Informationen angeben

Damit kann man entweder die Gäste ein bisschen identifizieren, es werden Felder für Name, eMail, Webseite gezeigt, oder man lässt die Felder ausblenden und hat damit weniger Probleme mit Kommentar-Spammern.

Drupal auf T-Online

Drupal läuft auf dem T-Online Hosting Paket (mit PHP / MySql) soweit ohne Probleme, allerdings besteht hier keinerlei Möglichkeit um lesbare Urls (mod_rewrite) zu aktivieren.
Auch die Einstellungen in der .htaccess bleiben unbeachtet, da dieser Dateiname verboten ist. Als Alternative dazu darf man allerdings eine eigene php.ini erstellen. Hier muss auf jeden Fall register_globals auf off geschaltet werden (Drupal 6). Positiv ist hier, dass sich das memory_limit leicht auf 128MB erhöhen lässt (höher vielleicht auch, allerdings nicht weiter getestet).
Was bei der Administrationsoberfläche stört ist, dass beim Anlegen der Datenbank der IE genutzt werden muss, im Firefox hatte ich damit keinen Erfolg.

Drupal auf Strato

Eigentlich wollte ich Strato ja nicht mit Drupal testen, zu viele schlechte Erfahrungen mit dem blöden Kundenmenü. Die Bedienung ist ein graus...
Letztendlich musste ich aber für jemanden doch Drupal auf Strato installieren, dann kann ich auch gleich darüber schreiben.
Und wer hätte es gedacht Drupal läuft auch auf Strato. Die Software (PHP / MySQL) ist ziemlich aktuell und auch mod_rewrite kann aktiviert werden. Die Umstellung von PHP4 auf PHP5 erfolgt per "Kundenmenü".
Das einzige "Problem" was Drupal nach der Installation anzeigt, ist die nicht vorhandene mbstring-Erweiterung.

Drupal auf Sysprovide

Sysprovide, ein kleinerer Anbieter für Webhosting, bietet Pakete mit einem großen Leistungsumfang zum kleinen Preis an. PHP läuft hier als FastCGI und ist super aktuell. Kleiner Minuspunkt ist das extra hinzubuchen einer Option für ein höheres memory_limit.
Die Installation von Drupal läuft ohne Probleme, auch lesbare Urls laufen sofort. Einziges Problem, was ich bei vielen anderen Hostern auch festgestellt habe, die .htaccess Datei innerhalb des Dateisystem Ordners liefert einen 403er, somit sind Upload nicht aufrufbar. Diese Datei muss einfach mit einer leeren .htaccess Datei überschrieben werden. Die Optionen, die den Fehler im Original verursachen, sind serverseitig schon eingestellt.

Webform Einträge durchsuchen

Bei umfangreichen Webform-Formularen und über 100 Einträgen (Submissions) wird es schwer gezielt Einträge wiederzufinden. Deswegen habe ich mal angefangen ein Minimodul zu erstellen das den hook_search von Drupal nutzt um die Daten der Webformeinträge zu durchsuchen.

Mit folgender Funktion lassen sich bereits eingegebene Daten finden. Um die Webform-Suche zu nutzen muss die Funktion in ein eigenes Modul gepackt und über Drupal aktiviert werden. Dann findet man in der Drupalsuche einen neuen Reiter "Webform".

<?php
function webform_search($op = 'search', $keys = NULL) {
  switch (
$op) {
    case
'name':
      if (
user_access('access webform results')) {
        return
t('Webform');
      }
    case
'search':
     
$find = array();
     
// Replace wildcards with MySQL/PostgreSQL wildcards.
     
$keys = preg_replace('!\*+!', '%', $keys);
     
$query = "SELECT s.sid, s.nid, GROUP_CONCAT(sd.data) as data
        FROM {webform_submissions} s
        LEFT JOIN {webform_submitted_data} sd ON sd.sid = s.sid
        WHERE LOWER(data) LIKE LOWER('%%%s%%')
        GROUP BY s.sid"
;
     
$result = pager_query($query, 15, 0, NULL, $keys);
     
      while (
$submission = db_fetch_object($result)) {
       
$find[] = array('title' => t('Submission #') . $submission->sid, 'link' => url('node/'. $submission->nid . '/submission/' . $submission->sid, NULL, NULL, TRUE));
      }
      return
$find;
  }
}
?>

Die Funktion ist allerdings nur ein erster Entwurf, es fehlen noch Zugriffsbeschränkungen, etc. Smiling