Einfache Favoritenverwaltung mit Magnolia 5 – Produktivitäts-Kurztip

Favoritenverwaltung einfach gemacht

Seit Magnolia 5 existiert die Möglichkeit unter anderem Seiten, Assets und Konfigurationseinträge welche man häufig benötigt sehr schnell wiederfinden zu können. Hierzu wurde in Version 5 neu die Favoritenverwaltung eingeführt welche an zentraler Stelle des Startbildschirms erreichbar ist.

Favoriten Verwaltung

Aufruf der Favoriten Verwaltung

Die Favoritenverwaltung ist beim ersten Aufruf noch leer.

Leere Favoritenverwaltung

Leere Favoritenverwaltung

Gliederung der Favoriten Bereiche

Am Besten fängt man mit einer Gliederung der Hauptbereiche an, im aktuellen Beispiel erstellen wir 2 Bereiche für Pages und Assets:

Favoritenverwaltung - Anlegen von Gruppen

Favoritenverwaltung – Anlegen von Bereichen

(mehr …)

Personalisierung (benutzerspezifischer Content) mit Magnolia

Ziele der Personalisierung

Mittels Personalisierung möchte man unterschiedliche Inhalte einer Seite verschiedenen Websitebesuchern möglichst zielgerichtet anzeigen. Ein ganz simples Beispiel wäre zum Beispiel, dass man einem Besucher aus der Schweiz andere Inhalte auf der Startseite anzeigen möchte als einem Besucher aus Deutschland. Ein etwas umfangreicheres Beispiel könnte sein, dass man am 24.12. einem Besucher aus Deutschland welcher zum ersten Mal die Webseite besucht einen anderen Inhalt anzeigt wie allen anderen Besuchern. Hier sind noch sehr viele weitere unterschiedliche Szenarien vorstellbar.

Seit Version 5.3 bietet Magnolia Personalisierung mit Bordmitteln an

Die Auslieferung von personalisiertem Content ist seit der Version 5.3 von Magnolia mit Bordmitteln möglich, hierbei wurde der sogenannte „Target“ Bereich eingeführt.

Target in Magnolia

Personalisierung in Magnolia – Target Bereich

(mehr …)

Magnolia CMS und Apache Solr Facettensuche – Teil 2 (Technische Perspektive)

Ausgangslage

Wie in Teil 1 bereits beschrieben, ist es manchmal erforderlich, dass eine gewisse Menge an Informationsitems angezeigt werden muss. Um dem Benutzer hier die Möglichkeit zu geben, die für ihn relevanten Informationen zu filtern sollen mehrere unterschiedliche Filter aus verschiedenen Kategorien gewählt werden können. Die Filter sollen sich beliebig kombinieren lassen, so dass am Ende nur die für den Benutzer wirklich relevanten Informationen angezeigt werden. (In diesem Fall zu sehen bei: www.famigros.ch)

Den Teasern können beliebige Fakten aus beliebigen Kategorien zugewiesen werden. Ein Beispiel wäre „location/Ostschweiz“.

Grundidee

Für die Lösung des Problems wird die Facettensuche des Apache Solr Servers verwendet. Um den Solr Server mit Daten zu versorgen benutzen wir Magnolias Aktivierungs Workflow und pushen beim Aktivieren die entsprechenden Daten. Die Abfrage der Ergebnissmenge erfolgt aus dem Frontend. Der Ablauf für das Bereitstellen der Solr-Dokumente ist also dieser:

  1. Es wird ein neues Informationsitem (z.B. Teaser) in Magnolia erfasst.
  2. Der Benutzer kann diesem aus einem Katalog Ausprägungen verschiedener Kategorien zuweisen
  3. Der Benutzer aktiviert den Content
  4. Während der Aktivierung wird das Informationsitem an den SOLR gepusht

Im Frontend ist der Ablauf dieser:

  1. Besucher gehen auf die Seite mit den Items
  2. Besucher wählen einen Filter
  3. Es gibt einen Request auf den Solr, der die gefilterten Ergebnisse in Form eines JSON zurückgibt
  4. Das Frontend stellt die gefilterten Items dar

(mehr …)

Magnolia CMS und Apache Solr Facettensuche – Teil 1 (Business-Perspektive)

Der folgende Beitrag beschreibt eine Kundenanforderung aus einem Projekt und stellt dar, wie diese unter Magnolia 4.4.x gelöst wurde.

Die Anforderung

Eine grosse Anzahl von Content bzw. Teaserseiten soll kategorisiert werden können. Bei den Teaserseiten handelt sich beispielsweise um Ausflugsziele, die innerhalb einer Region (nach Kantonen) in der Schweiz, nach Themenbereichen (z.B. Museum und Abenteuer) und nach Wetterabhängigkeit (Indoor oder Outdoor) kategorisiert werden können.
Der Benutzer soll diese Vielzahl an Content entsprechend diesen Kriterien schnell filtern können. Gleichzeitig soll ihm immer ein direktes Feedback gegeben werden, wieviele Treffer seine Suchanfrage beeinhaltet und die Teaserseiten sollen sich demgemäss dynamisch aktualisieren.
Auf einer entsprechenden Detailseite soll dem Kunden ebenfalls das zugeordnete Kriterium angezeigt werden.
Zusätzlich ist es erforderlich, dass das Kriterium für verschiedene Seiten einem Filter zugeordnet werden kann. Es können somit Kriterien generisch für verschiedene Seitentemplates, beispielsweise Ausflugsziele oder andere Themen (Rezeptseiten) vergeben werden. (mehr …)

LanguageCopy-Funktion in AdminCentral

Vor einigen Monaten bekam ich die Aufgabe eine Funktion im Magnolia-Backend umzusetzen, die es dem Autor erlaubt, eine Seite (wahlweise rekursiv) einer Sprache in alle anderen gewünschten und verfügbaren Sprachen zu kopieren. In diesem Beitrag werde ich erläutern, welche Komponenten für die Umsetzung nötig waren und den dazugehörigen Code liefern. Der Code ist ausschliesslich für Magnolia 4.5.x und kann nicht 1:1 auf Magnolia 5 angewendet werden. Der Dialog sieht am Schluss so aus:

LanguageCopy-Dialog

(mehr …)

Verbessertes Module Version Handling

Einführung

Der Magnolia Module-Mechanismus erlaubt es Entwicklern, den Lebenszyklus von Magnolia Modulen zu verwalten. Jedes Magnolia Module definiert in seinem Module-Deskriptor XML File verschiedene Module-Klassen, wovon eine der sogenannte VersionHandler ist. (Siehe Module descriptor elements). Im Module-Descriptor registriere ich also eine Klasse, welche das ModuleVersionHandler Interface implementiert. Magnolia stellt hier bereits Basisklassen zur Verfügung, welche sich z.B. um die Unterscheidung von zwischen Install- oder Update-Modus kümmern.

In diesem kurzen Post möchte ich zeigen, wie man die Magnolia Klassen erweitern kann, um möglichst effizient verschiedene Use Cases der Module-Entwicklung abzudecken.

(mehr …)

Magnolia Conference 2014

Magnolia Book

Letzte Woche fand vom 25. bis 26. Juni die alljährliche Magnolia Konferenz in Basel statt. Namics war mit einer bunt gemischten Delegation anwesend: Enno Deutschmann und Thomas Walter als Speakers, Daniela Marchese, Markus Tressl, Stefan Baur, Patrick Lötscher, Adrian Andermatt, Markus Leiter und Daniel Kummer (Ich) als Teilnehmer.

Neben der aktiven Teilnahme am Konferenzprogramm war Namics ebenfalls wieder mit einem Vortragsslot am Start. Dieses Jahr mit der Präsentation zum Thema: Content Personalisierung bei der Migros. Das Trend-Thema Personalisierung ist aktuell wichtig für Firmen, Partner, die Community und auch für Magnolia selber.

Nun, da die Konferenz vorbei und verarbeitet ist, lohnt es sich zurückzublicken und Fazit zu ziehen.

(mehr …)

Umgebungsspezifische Konfigurationen in Magnolia CMS

Einführung

Wenn ich ein grösseres Magnolia Projekt mit verschiedensten Instanzen aufsetze (local development, development, staging, integration, production), stellt sich früher oder später die Frage,  wie ich verschiedene Konfigurationen kontrolliert auf die verschiedenen Instanzen installieren kann.

In diesem Blog Post zeige ich einen einfachen Lösungsansatz auf, der sich beliebig erweitern und auf projektspezifische Bedürfnisse abstimmen lässt.

Problemstellung

Magnolia bringt out-of-the-box bereits einen Mechanismus mit, der umgebungsspezifisches Einspielen von XML Bootstrap Files erlaubt. Dieser Mechanismus ist aber beschränkt auf die Initialisierung des JCR Repositories und erlaubt deshalb weder das Einspielen von Updates via XML Files, noch eine Interaktion mit Java Code.

Im Laufe eines Projektes kommt oft der Punkt, an dem ich ein Update / Delta Task nur auf einem oder mehreren bestimmten Systemen ausführen möchte. Dazu zählen zum Beispiel das Ändern des SMTP Server im Mail Modul, oder das Aktualisieren eines Subscribers. Zudem kann es auf der lokalen Entwicklungsumgebung sinnvoll sein, bei jedem Neustart des Systems einen Teil der Konfigurationen neu zu schreiben, um die Entwicklung auf einem sauberen Stand zu starten oder Änderungen von anderen Entwicklern im eigenen Repository zu sehen.

Lösungsansatz

Im magnolia.properties File wird ein neues Property magnolia.environment definiert, welches den Namen der Umgebung beinhalten wird.

magnolia.properties

...
magnolia.environment = <env_name>
...

Dieser Lösungsansatz erfordert lediglich, dass für jede zu unterscheidende Umgebung ein eigenes magnolia.properties File existiert, was aber in grösseren Projekten weitgehend der Fall sein sollte.

Das neue Property wird durch eine simple Java Hilfsklasse ausgelesen, und erlaubt auf einfache Weise das Unterscheiden der verschiedenen Umgebungen, insbesondere der lokalen Entwicklungsumgebung. 

(mehr …)

User Generated Content mit dem Forum-Modul

In diesem Post möchte ich anhand eines konkreten Szenarios alle Schritte aufzeigen, die zur Inbetriebnahme des Forum-Moduls mit Magnolia 4.5.x notwendig sind.

Das Forum-Modul steht für Magnolia 4.5.x aktuell in der Version 1.3.4 bereit und beherrscht erst die grundlegendsten Forum-Funktionen:

  • Themen anlegen
  • Threads anlegen
  • Beiträge erfassen / Auf Beiträge antworten
    • Keine Zitate
    • Keine Code-Blocks
    • Keine Formatierung wie fettkursivunterstrichen
    • HTML möglich (!!)

Momentan ist eine überarbeitete Version (4.0) des Forums in Planung, die die oben genannten fehlenden Funktionen nachliefern soll. Wie hoch der Release dieser Version priorisiert ist kann ich aber nicht sagen.

Szenario

Ich vermute, dass die am häufigsten anzutreffende Konstellation von Magnolia-Instanzen aus 2 Public- und einer Autor-Instanz besteht. Deshalb wird es unser Ziel sein, das Forum so in diese Umgebung zu integrieren, dass:

  • Content der auf PublicA erfasst wird, automatisch auch auf PublicB erscheint und umgekehrt,
  • Forum-Beiträge von allen 3 Instanz aus moderiert werden können.

Author- und Public-Instanz

(mehr …)

Design Pattern – Dependency Injection

Zur Freude von vielen Entwicklern setzt Magnolia ab Version 4.5 auf das Dependency Injection Design-Pattern (oder Inversion of Control). Dieses Pattern gibt es jetzt schon eine ganze Weile und hat sich spätestens mit dem Spring Framework für Java bei vielen Projekten bewährt.
(mehr …)