Blog

Ergebnislisten von Drupal-Views manuell umsortieren

In Joomla kann man Inhalte im Backend von Hand umsortieren, so dass sie auf der Ausgabeseite in geänderter Reihenfolge erscheinen. Das ist praktisch, wenn man die Inhalte nicht in chronologischer Reihenfolge angezeigt werden sollen.

Diese Möglichkeit gibt es in Drupal nicht. Generell erfolgt die Sortierung nach Kriterien wie "Oben in Listen" ("Sticky") oder Datum. Mit Hilfe des Views-Moduls kann man darüber hinaus auch andere Sortierungen definieren. Das beliebige Sortieren von Inhalten per Drag & Drop geht damit aber erstmal nicht. Diese Funktion steuert das Modul Draggable Views bei.

Einfach installieren und aktivieren. Dann findet man in der Felderliste der Views ein neues Feld "Draggable Views: Inhalt".

Neues Feld "Draggableviews: Inhalt" in Views

Dieses fügt man zu den angezeigten Feldern hinzu. Hinweis: Draggable Views funktioniert nur, wenn man den View auf Feldansicht einstellt und nicht komplette Nodes ausgibt! Jetzt fügt man noch bei Sortierkriterium "Draggableviews: Gewichtung (aufsteigend)" hinzu und speichert den View. Alle User mit der Berechtigung "Access draggable views" können nun die Ergebnisse des Views per Drag & Drop ganz einfach umsortieren. Achtung: nach dem Umsortieren unbedingt auf "Speichern" klicken, sonst geht die Sortierung beim Verlassen der Seite wieder verloren!

Drupal-Sprachdateien automatisch aktualisieren mit Localization Update

Seit der Version 7 von Drupal ist das Updaten von Modulen sehr viel einfacher geworden als früher. Auch ohne Drush kann man jetzt direkt aus dem Admin-Backend veraltete Module aktualisieren. Leider fehlt bisher die Möglichkeit auch Sprachdateien auf ähnlich komfortable Art einzubinden. Zwar gibt es Drupal als Paket mit deutschen Sprachdateien, aber schon einmal etwas größere Drupal-Projekte aufgesetzt hat, weiß, dass die Zahl der zusätzlichen Module schnell wachsen kann und das Einspielen jeder einzelnen Sprachdatei dann eine zeitraubende Angelegenheit werden kann. Hier setzt Localization Update an. Es basiert auf einem ähnlichen Konzept wie das Update-Modul des Drupal-Core. Die Handhabung ist einfach: Modul installieren und aktivieren und schon zeigt ein zusätzlicher Eintrag im Drupal-Statusbericht wenn es neue Übersetzungsdateien für die installierten Module oder den Drupal-Core gibt (siehe folgenden Screenshot). Dies kann nach einer Neu-Installation oder einem Update eines Modules der Fall sein.

Drupal Statusbericht mit Hinweis auf neue Übersetzungen

Unsere Tage bei der re:publica 13

Besser spät als nie ... die re:publica 13 ist zwar schon eine Weile vorbei, deswegen aber noch nicht vergessen. Nach drei anstrengenden Tagen hatte uns der Arbeitsalltag allzu schnell wieder im Griff, aber vergessen haben wir die Zeit dort natürlich nicht. Und berichten - mit etwas Abstand, der schadet ja nie - über unsere Erfahrungen beim Klassentreffen der Internetten. An der Tastatur: Jürgen und Martina.

Drupals Views-Modul mit PHP erweitern

Das Views-Modul ist ein sehr mächtiges Werkzeug und eines der unverzichtbarsten Drupal-Module. Manchmal kommt man mit den vorhandenen Funktionen aber trotzdem an eine Grenze. Um diese zu überschreiten brauch es manchmal nur ein paar Zeilen PHP-Code. In diesem Blogbeitrag hatte ich gezeigt, wie man in Drupal 6 eingebettete Views mit einem CCK-Feld und etwas PHP steuern kann. Für Drupal 7 gibt es für den gleichen Zweck das Modul Views PHP. Wenn man dieses installiert findet man in den Views-Feldern eine neue Option: "Global: PHP".

PHP-Feld in View einbinden

Fügt man das Feld, kann man hier direkt PHP-Code eintragen.

PHP-Code in Drupal-View einbinden

Verschiedene Ziel-URL für Header-Grafik bei mehrsprachiger Wordpress-Seite

Auf einer zweisprachigen Kunden-Website sollte die Headergrafik im Seitenkopf jeweils mit einer bestimmten Landing-Page verlinkt werden. Sofern dies die Startseite ist (also kundendomain.de/ ) funktioniert das auch problemlos und die Umschaltung auf die andere Sprache macht keine Probleme. Schwieriger wird es wenn auf eine Seite verlinkt werden soll, die einen sprachabhängigen Pfad hat. In diesem konkreten Fall sollte die Grafik in der deutschen Sprachversion auf kundendomain.de/ueber-uns/ verlinken und in der englischen Version auf englisch.kundendomain.de/about-us/.

Um das zu erreichen muss man einen kleinen Codeschnippsel in die Datei header.php des Themes schreiben. Hier wird als Theme "Twenty Twelve" verwendet. Die gesuchte Datei findet man unter wp-content/themes/twentytwelve/header.php

Die Zeile 54 gibt die mit der Header-Grafik verbundene URL aus und wird folgendermaßen ergänzt:

<a href="<?php echo site_url(); ?>
<?php if(substr(site_url(),7,7)=='english'):
?>/about-us/
<?php else :
?>/ueber-uns/
<?php endif; ?>
"><div class="header-left">  
<?php $header_image = get_header_image();

Damit wird nun zunächst abgefragt, ob die Site-URL mit "english" anfängt. Wenn dies der Fall ist, wird der Pfad "/about-us" an die Site-URL (englisch.kundendomain.de) angehängt, andernfalls der Pfad zur deutschsprachigen Seite (kundendomain.de) "/ueber-uns/".

Komfortabel Links mit CKEditor unter Drupal erstellen

Wer schon einmal unter Drupal Texte mit dem CKEditor erstellt oder bearbeitet hat, kennt das Problem: Man möchte auf einen bestehenden Beitrag verlinken und kennt so ungefähr dessen Titel aber nicht die genaue URL, weder in der Form node/1234 noch den aus dem Titel abgeleiteten URL-Alias, der z.B. diese Form haben kann blog/ein-blog-artikel. Also muss man zunächst einmal den Beitrag suchen und die URL kopieren, um sie als Ziel eintragen zu können. Schöner wäre es natürlich, wenn man beim Anlegen des Links Teile des Titels eintippen könnte und von Drupal automatisch Vorschläge für passende Nodes bekäme. Genau das ermöglichst das Plugin CKEditor Link.

 

PHP- und Drupal-Bug: Update von Drupal7-Modulen bricht mit Fehlermeldung ab

Das ein Softwarefehler in einem Programm dafür sorgt, dass ein anderes Programm nicht mehr läuft, kommt schon mal vor. Aber dieser Fall ist besonders kurios. Hier heben sich zwei Fehler gegenseitig auf und das Beseitigen des einen sorgt dafür, dass der andere zum Tragen kommt.

Aber der Reihe. Angefangen hat das ganze heute morgen, als ich in einer Drupal7-Installation (7.18) diverse Module updaten wollte. Normalerweise geht das mit Drupal7 ja sehr einfach und komfortabel direkt aus dem Backend heraus. Diesesmal aber nicht. Mitten im Update kam plötzlich die Fehlermeldung

    Error installing / updating
    File Transfer failed, reason: Cannot remove directory /usr/www/users/xxxxxx/sites/all/modules/views/drush/...

Anzeige des Weiterlesen-Link in Drupal 7 kontrollieren

In Drupal 7 gibt es drei verschiedene Möglichkeiten, um bei einem Artikel nur den Anrisstext (Teaser) anzeigen zu lassen. Zum einen kann man beim Erstellen des Artikels an geeigneter Stelle einen sogenannten Teaserbreak einfügen. Dieser wird in der Quellcodeansicht als "< !-- break -- >" dargestellt (jedoch ohne die Leerzeichen darin!), im WYSIWIG-Editor ist dies eine doppelte gepunktete, rote Linie. Läßt man Drupal von einem Artikel nur den Anrisstext ausgeben, so erscheint nur der Text oberhalb der roten Linie, sowie ein "Weiterlesen"-Link. Alternativ kann man auch eine eigene Zusammenfassung schreiben und den Teaser-Break weglassen. In diesem Fall gibt Drupal als Anrisstext die Zusammenfassung aus und in der vollständigen Artikelansichte den Textkörper (Body) ohne die Zusammenfassung (siehe auch den folgenden Screenshot).

Drupal7 WYSIWYG-Editor mit Zusammenfassung (oben) und Teaserbreak im Body (unten)
Bild: Drupal7 WYSIWYG-Editor mit Zusammenfassung (oben) und Teaserbreak im Body (unten)

Der nächste Screenshot zeigt die Vorschau mit der gekürzten Fassung (also dem Anrisstext mit dem "Weiterlesen"-Link) und den vollständigen Beitrag.

Drupal7: Artikelvorschau mit Anrisstext und vollständiger Fassung
Drupal7: Artikelvorschau mit Anrisstext und vollständiger Fassung

Als dritte Möglichkeit bietet Drupal noch das automatische Erstellen eines Teasers durch Kürzen auf eine einstellbare Zahl von Zeichen.

Eines kann Drupal jedoch nicht: selber entscheiden, ob der Weiterlesen-Link erforderlich ist oder nicht. Wenn z.B. ein Artikel keine Zusammenfassung und keinen Teaser-Break enthält, weil er sehr kurz ist (und damit auch die automatische Erstellung des Teasers durch Kürzen nicht greift), zeigt Drupal trotzdem einen "Weiterlesen"-Link. Das ist für die Leser natürlich nicht ideal, erwartet man doch, dass beim Anklicken eines "Weiterlesen"-Links auch tatsächlich weiterer Text angezeigt wird und nicht nur eine neue Seite mit exakt dem Artikel den man schon vollständig gelesen hat.

Abhilfe schafft das Modul Read More Control. Nach dem Installieren kann man für jeden einzelnen Inhaltstyp einstellen, wie sich der "Weiterlesen"-Link verhalten soll. Zur Verfügung stehen die Optionen:

  • Always show link: Zeigt den Link immer an. Das ist das Standardverhalten von Drupal 7
  • Show link when required by any supported fields: Zeigt den Link an, wenn eines der unterstützten Felder dies erfordert
  • Show link when required by any supported text based fields: Zeigt den Link an, wenn eines der unterstützten Text-Felder dies erfordert
  • Show link when required by the Body (body) field: Zeigt den Link an, wenn das Body-Feld dies erfordert. Das ist das Standardverhalten von Drupal 6.
  • Never show link: Der "Weiterlesen"-Link wird nie angezeigt.
  • Do not process: Read More Control wird nicht ausgeführt

Mit der zweiten oder dritten Option ist es nun möglich, die Anzeige des "Weiterlesen"-Links so einzustellen, dass er nur angezeigt wird, wenn es auch wirklich weiteren Text zum Lesen gibt.

 

Simplenews und Omega-Theme: Fehlermeldung beim Newsletterversand

Wenn ein Drupal-Modul nicht so arbeitet wie erwartet, muss nicht immer das verwendete Modul selber dafür verantwortlich sein. Manchmal kann die Ursache für den Fehler auch bei dem verwendeten Theme liegen. Dies ist so ein Beispiel. Für eine Drupal7-Webseite haben wir das Modul Simplenews für den Newsletter-Versand installiert. Als Theme kam Omega zum Einsatz. Sobald nun ein Newsletter versendet wurde - egal ob ein einzelner Test-Newsletter oder eine komplette Abonnentenliste - warf Drupal für jede versendete Mail diese Fehlermeldungen aus:

Notice: Trying to get property of non-object in alpha_invoke() (Zeile 99 von /usr/www/users/testhw/msv/sites/all/themes/omega/alpha/includes/alpha.inc).
Warning: Invalid argument supplied for foreach() in alpha_invoke() (Zeile 99 von /usr/www/users/testhw/msv/sites/all/themes/omega/alpha/includes/alpha.inc).

Die E-Mails wurden dabei zwar versendet, aber solche Fehlermeldungen sind natürlich lästig, vor allem wenn man mehrere Hundert Newsletter-Mails versendet. Die Lösung für das Problem fand sich schließlich im verwendeten Omega-Sub-Theme Alpha, das nicht nur für die Anzeige der Webseite verwendet wurde, sondern auch, um die zu versendenen HTML-Newsletter-Mails zu rendern. Der folgende Patch behebt den Fehler (Quelle: http://drupal.org/node/1763362#comment-6790982):

diff --git a/alpha/includes/alpha.inc b/alpha/includes/alpha.inc
index b4be3e2..42b1e1b 100644
--- a/alpha/includes/alpha.inc
+++ b/alpha/includes/alpha.inc
@@ -91,19 +91,21 @@ function alpha_invoke($type, $hook, &$vars) {
 
   // If one of the themes in the theme trail implements this hook
   // include the corresponding .inc file and call the associated function.
-  foreach (alpha_theme_trail($theme->theme) as $key => $name) {
-    $function = $key . '_alpha_' . $type . '_' . $hook;
+  if (!empty($theme)) {
+    foreach (alpha_theme_trail($theme->theme) as $key => $name) {
+      $function = $key . '_alpha_' . $type . '_' . $hook;
 
-    if (!function_exists($function)) {
-      $file = drupal_get_path('theme', $key) . '/' . $type . '/' . $type . '-' . str_replace('_', '-', $hook) . '.inc';
+      if (!function_exists($function)) {
+        $file = drupal_get_path('theme', $key) . '/' . $type . '/' . $type . '-' . str_replace('_', '-', $hook) . '.inc';
 
-      if (is_file($file)) {
-        include $file;
+        if (is_file($file)) {
+          include $file;
+        }
       }
-    }
 
-    if (function_exists($function)) {
-      $function($vars);
+      if (function_exists($function)) {
+        $function($vars);
+      }
     }
   }
 }

Probleme mit Links auf mehrsprachiger Drupal-Webseite beheben

Bei einer Kundenwebseite trat folgendes Problem auf: Die Seite wurde als mehrsprachige Seite geplant, zunächst aber nur mit deutsch Inhalten befüllt. Erst später kamen die englischen Übersetzungen der Beiträge hinzu. Innerhalb der deutschen Texte gab es nun diverse Links auf andere interne Inhalte. Diese Links waren relativ gesetzt (siehe Screenshot des CK-Editors).

relativer Link auf internen Inhalt einer Drupal-Webseite
Interner Link im CK-Editor

Kam man nun als Besucher auf eine deutsche Seite, so zeigten alle dort enthaltenen Links auf die korrekten deutschen Sprachversionen.

Beispiel:

Der Text  "Fragen Sie einfach nach" war mit der (internen) Seite www.kundendomain.de/inhalt/kontakt verknüpft

Schaltete man jetzt mittels des Sprachumschalters im Language-Block auf die englische Version um, so wurde die englische Übersetzung angezeigt. Allerdings wurden die Links in dem übersetzten Text  nicht korrekt ausgegeben.

Inhalt abgleichen

 

Das Team

Martina Ruediger

Martina Rüdiger
(X)HTML/CSS, PHP, Drupal, Wordpress, Konzeption, Design und Umsetzung von modernen Web-Layouts, SEO, Printdesign

 

Jürgen Thau
Kundenberatung, Projektsteuerung, PHP, JavaScript, Drupal, Joomla, Drupal- und Joomla-Schulungen  

Was wir bieten

  • Konzeption und Gestaltung rund um Ihre Web-Seite
  • Online Shops
  • barrierearme und zukunftssichere Designs
  • Beratung rund um Content-Management
  • maßgefertigte Lösungen
  • ergänzende Angebote aus dem Print-Bereich
  • bedarfsgerechte Web-Hosting-Angebote
  • Schulungen vor Ort
  • Unterstützung nach dem Start Ihrer Web-Seite

Wir sehen uns:

WordCamp Frankfurt

02.09. – 04.09.2016
@WordCampFRA #WCFRA

Gezwitschert ...

Neueste Kommentare