mpDynamicContent: Modul für dynamische Inhalte

Alles rund um Module und Plugins in CONTENIDO 4.9.
xmurrix
Beiträge: 2744
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

mpDynamicContent: Modul für dynamische Inhalte

Beitrag von xmurrix » Mo 2. Dez 2013, 16:00

BESCHREIBUNG

Das Modul mpDynamicContent erlaubt das Einbinden von beliebigen Content-Typen (z. B. CMS_HTMLHEAD, CMS_HTML, CMS_IMGEDITOR, usw.) in einen Container.

Damit lassen sich dynamisch mehrere Inhalte basierend auf Content-Typen in einem Layout ausgeben. Die Konfiguration kann direkt über die Editor-Ansicht des Artikels vorgenommen werden.

Standardmäßig werden alle vorhandenen Content-Typen unterstützt, Ausnahmen gibt es für CMS_IMG, CMS_IMGDESCR, CMS_LINK, CMS_LINKTARGET, CMS_LINKDESCR. Dafür gibt es die neuen Content-Typen CMS_IMGEDITOR und CMS_LINKEDITOR, die die bekannte Funktionalität übernehmen.

Es ist auch möglich, zu jedem Content-Typ ein Template auszuwählen.


INSTALLATION

Die im Modulpackage enthaltenen Dateien/Sourcen sind wie im Folgenden beschrieben zu installieren.
Die Pfade zu den Sourcen (CSS, JS und Templates) können von Projekt zu Projekt unterschiedlich sein und sind bei Bedarf anzupassen.
Bei der Installationsbeschreibung wird davon ausgegangen, dass CONTENIDO in das DocumentRoot-Verzeichnis eines Webservers installiert wurde und das Mandantenverzeichnis "cms/" ist.

1.) Modulinstallation
Den Modulordner "mp_dynamic_content" samt aller Inhalte in das Modulverzeichnis des Mandanten "cms/data/modules" kopieren.
Danach sollte man im Backend die Funktion "Module synchronisieren" unter "Style -> Module" ausführen.

2.) Einrichten des Moduls
Dieses Modul in einer Artikelvorlage einrichten.

Einen Artikel erstellen, welches auf die Vorlage basiert.

In der Editoransicht des Artikels die gewünschten Optionen setzen.

a.) Mandanten- oder Systemeinstellungen:

Mit folgender Mandanten- oder Systemeinstellung kann man die unterstützten Content-Typen konfigurieren. Mehrere Werte sind mit Komma zu trennen:

Code: Alles auswählen

Typ:  mp_dynamic_content
Name: supported_content_types
Wert: CMS_HEAD,CMS_HTML,CMS_HTMLHEAD,CMS_IMGEDITOR,CMS_LINKEDITOR
b.) Basiseinstellungen (im Popup Dialog):
  • Container-Nummer: Die Container-Nummer die zum Erstellen der Inhalte verwendet werden soll. Die eingegebene Nummer sollte nicht im Layout vergeben sein und es sollte ausreichend Puffer zur nächsten im Layout verwendeten Container-Nummer sein, da das Modul die angegebene Container-Nummer für jeden konfigurierten Content-Typen hochzählt, z. B. Container-Nummer = 500, 5 Content-Typen, benötigter Container-Nummer Bereich = 500 - 505.
c.) Content-Typ Einstellungen (im Popup Dialog):

Jeder Content-Typ Eintrag enthält 4 konfigurierbare Felder.
  • Beschreibung: Angabe der Beschreibung zum Content-Typ, wenn angegeben wird es im Backend in der Editor-Ansicht als label-Element dargestellt
  • Content-Typ: Auswahl des zu verwendenden Content-Typen
  • Template: Auswahl des Templates, in dem der Inhalt des Content-Typ gerendert werden soll. Mitgeliefert werden 5 verschiedene Templates. Damit ein Content-Typ Template erkannt und korrekt im Auswahlfeld erscheint, muss es folgende Kriterien erfüllen.
    • Das Template muss im Modulverzeichnis im Ordner template liegen
    • Der Dateiname des Templates muss mit dem Präfix "type." beginnen
    • Die Erste Zeile des Templates sollte eine das Template beschreibende kurze Kommentarzeile sein
  • Zusätzlicher Text: Dieses benutzerdefiniertes Feld kann für den eigenen Bedarf verwendet werden, z. B. für Ausgabe als reiner Text oder auch als Wert für ein class-Attribut. Im Template hat man Zugriff auf den Wert mit "$content.userdefined".
  • Aktionen:
    • Online status: Content-Typ lassen sich online/offline stellen, dabei werde die Elemente mit dem status offline bei der Ausgabe ausgelassen. Diese Inhalte können aber immer noch über die Suche im Frontend gefunden werden.

CHANGELOG

2013-12-05 mpDynamicContent 0.1.2 (für CONTENIDO 4.9.x)
  • bugfix: Besseres Handling für das Laden von jQuery UI im Backend
  • bugfix: Anzeige des ausgewählten Bildes im Backend in der Editor-Ansicht
  • change: Laden und Ausgabe der benötigten Styles nur einmal pro Seite
  • new: Sortierung für Templates
2013-12-02 mpDynamicContent 0.1 (für CONTENIDO 4.9.x)
  • Erste Veröffentlichung des mpDynamicContent Moduls
DOWNLOAD

Das Modul könnt ihr von der Seite mpDynamicContent Modul zum Generieren von dynamischen Inhalten für für CONTENIDO 4.9.x herunterladen.

Spl4sh3r
Beiträge: 20
Registriert: So 1. Dez 2013, 16:28
Kontaktdaten:

Re: mpDynamicContent: Modul für dynamische Inhalte

Beitrag von Spl4sh3r » Mi 4. Dez 2013, 15:44

Perfekt! Genau zur rechten zeit :)
Hier und da an die eigenen Bedürfnisse angepasst, divs durch html5 Tags getauscht. Läuft!

Wer Probleme hat sollte mal ins Systemlog gucken - base_dir sollte hierfür richtig konfiguriert sein.

Danke von mir an deinen Kunden.

xmurrix
Beiträge: 2744
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: mpDynamicContent: Modul für dynamische Inhalte

Beitrag von xmurrix » Mi 4. Dez 2013, 16:59

Danke für das Feedback!
...Wer Probleme hat sollte mal ins Systemlog gucken - base_dir sollte hierfür richtig konfiguriert sein...
Was für Probleme genau gab es da, läuft das Backend etwa unter einer anderen Domain als das Frontend und daher gibt es Probleme beim Zugriff auf die Dateien/Verzeichnisse des Frontends?

Das wäre hilfreich und eventuell kann man dann das Problem im Modul abfangen...

Gruß
xmurrix

Spl4sh3r
Beiträge: 20
Registriert: So 1. Dez 2013, 16:28
Kontaktdaten:

Re: mpDynamicContent: Modul für dynamische Inhalte

Beitrag von Spl4sh3r » Mi 4. Dez 2013, 17:13

Fehler sahen wie folgt aus:

Code: Alles auswählen

Warning: is_dir(): open_basedir restriction in effect. File(/xxx/file/templates/.../x.tpl) is not within the allowed path(s): (/xxx/file/templates/)
Trat sogar bei expliziter Freigabe des tpl - Verzeichnisses auf. Domain ist die selbe.

xmurrix
Beiträge: 2744
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: mpDynamicContent: Modul für dynamische Inhalte

Beitrag von xmurrix » Mi 4. Dez 2013, 17:21

Spl4sh3r hat geschrieben:...

Code: Alles auswählen

Warning: is_dir(): open_basedir restriction in effect. File(/xxx/file/templates/.../x.tpl) is not within the allowed path(s): (/xxx/file/templates/)...
...
Hmm, nirgends im Modulpackage wird is_dir() verwendet. Wenn das nun in einem Modul-Template vorkommt, scheint es ein Bug in der Smarty-Template Engine zu sein.
Oder beim Auslesen vorhandener Templates, dann müsste man sich den CONTENIDO Core näher anschauen.

Kannst du mir die genauere Fehlermeldung, also Pfad und Name der Datei, in der is_dir() verwendet wird, mitteilen? Gerne auch per PM.

Danke
xmurrix

Dodger77
Beiträge: 3625
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: mpDynamicContent: Modul für dynamische Inhalte

Beitrag von Dodger77 » Mi 4. Dez 2013, 17:42

Ich habe das Modul auch mal getestet. Das sieht ja echt toll aus, vielen Dank dafür (auch natürlich an den netten Auftraggeber)!

Ich habe allerdings auch ein Problem mit einer 4.9.2-Installation und den Content-Typen für Bilder und Links. Sobald ich die Versionsprüfung entferne:

Code: Alles auswählen

$tpl->assign('versionLowerThan493', (-1 === version_compare(CON_VERSION, '4.9.3')));
und jQueryUI nicht mehr vom Modul eingebunden wird, funktionieren die entsprechenden Widgets.

Spl4sh3r
Beiträge: 20
Registriert: So 1. Dez 2013, 16:28
Kontaktdaten:

Re: mpDynamicContent: Modul für dynamische Inhalte

Beitrag von Spl4sh3r » Mi 4. Dez 2013, 19:04

-Mir ist gerade noch aufgefallen, das CMS_IMGEDITOR im Editor-Tab(damit ist nicht das Popup gemeint) keine Bildvorschau ausgibt.
-Vielleicht macht es auch Sinn als $content.value lediglich die scr und nicht den kompletten <img/> tag auszugeben.
-In Der Content-Type Konfiguration wäre eine alphabetische Sortierung der Templates noch denkbar.

xmurrix
Beiträge: 2744
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: mpDynamicContent: Modul für dynamische Inhalte

Beitrag von xmurrix » Do 5. Dez 2013, 07:40

Dodger77 hat geschrieben:I..Ich habe allerdings auch ein Problem mit einer 4.9.2-Installation und den Content-Typen für Bilder und Links. Sobald ich die Versionsprüfung entferne:

Code: Alles auswählen

$tpl->assign('versionLowerThan493', (-1 === version_compare(CON_VERSION, '4.9.3')));
und jQueryUI nicht mehr vom Modul eingebunden wird, funktionieren die entsprechenden Widgets...
Eigentlich war dieese Zeile genau dafür gedacht, in CONTENIDO 4.9.2 oder kleiner jQueryUI nachzuladen, da das nicht immer der Fall ist. Anscheinend scheint das noch nicht ausreichen zu sein, muss mich mehr damit auseinander setzen...

Danke für das Feedback.

Gruß
xmurrix

xmurrix
Beiträge: 2744
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: mpDynamicContent: Modul für dynamische Inhalte

Beitrag von xmurrix » Do 5. Dez 2013, 07:49

...-Vielleicht macht es auch Sinn als $content.value lediglich die scr und nicht den kompletten <img/> tag auszugeben...
Für jeden Content-Typen gibt es eine eigene Klasse, die jeweils den Code für die Editor-Ansicht und für die Frontend-Ansicht zurückliefert. Vom Modul aus hat man keinen Einfluss darauf, was man da zurückbekommt oder gar die Möglichkeit, auf die einzelnen Eigenschaften zuzugreifen. Daher enthält $content.value immer das, was cContentTypeImgeditor->generateEditCode() im Backend zurückliefert. Gebe das gerne als Anregung an das Entwickler-Team weiter, man sollte schon im Backend das ausgewählte Bild sehen können...
...-In Der Content-Type Konfiguration wäre eine alphabetische Sortierung der Templates noch denkbar.
Ein guter Punkt, kommt auf die Todo-Liste.

Nachtrag:
Während der Content-Typ "CMS_IMGEDITOR" im Backend in der Editor-Ansicht den Button zum Auswählen des Bildes ausgibt, gibt es im Frontend dann das Bild aus. Es ist aber dennoch möglich, auch im Backend in der Editor-Ansicht an die Informationen wie Pfad zum Bild oder Beschreibung ranzukommen, aber nicht über cContentTypeImgeditor. Nun, das Modul mpDynamicContent kümmet sich ab der Version 0.1.2 auch um das...

Gruß
xmurrix

xmurrix
Beiträge: 2744
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: mpDynamicContent: Modul für dynamische Inhalte

Beitrag von xmurrix » Do 5. Dez 2013, 11:49

Hallo zusammen,

nochmals vielen Dank für das Feedback, habe mich der von euch angesprochenen Punkte angenommen, ein paar Fehler im Modul behoben und die Funktionalität etwas verbessert. Es gibt eine neue Version zum Download.

Grüße
xmurrix

Spl4sh3r
Beiträge: 20
Registriert: So 1. Dez 2013, 16:28
Kontaktdaten:

Re: mpDynamicContent: Modul für dynamische Inhalte

Beitrag von Spl4sh3r » Do 5. Dez 2013, 12:30

Das hätte den Vorteil das man Content-Typ und Template beliebig kombinieren könnte. So könnte man z.B. ContentTypeImgeditor als Eingabe und für die Ausgabe ein Template für Hintergrundbild, Lightbox, Link,...
>>Nachtrag: Hab gerade das image.tpl gesehen, passt...Supi.


Vielen Dank für das Update!

Spl4sh3r
Beiträge: 20
Registriert: So 1. Dez 2013, 16:28
Kontaktdaten:

Re: mpDynamicContent: Modul für dynamische Inhalte

Beitrag von Spl4sh3r » Fr 6. Dez 2013, 00:25

Das Modul gefällt mir bisher sehr. Wirklich sehr flexibel und leistet mir mittlerweile sogar gute Dienste als Accordion.

Kleiner Fehler wenn noch keine Content angelegt wurde
PHP Warning: Invalid argument supplied for foreach() in /php/includes/class.module.mpdynamiccontent.php on line 234
Schöne wäre noch eine Funktion zum löschen, vielleicht über einen pseudo Content-Type, welcher beim speichern entsprechendes Element entfern. Wäre auch einfach über die Mandanteneinstellungen zu deaktivieren.

xmurrix
Beiträge: 2744
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: mpDynamicContent: Modul für dynamische Inhalte

Beitrag von xmurrix » Fr 6. Dez 2013, 08:12

Morgen Spl4sh3r,

dank euch werden wir sehr bald die Kinderkrankheiten des Moduls beseitigen.
...Schöne wäre noch eine Funktion zum löschen, vielleicht über einen pseudo Content-Type, welcher beim speichern entsprechendes Element entfern. Wäre auch einfach über die Mandanteneinstellungen zu deaktivieren...
Mit dem Thema "Löschen" habe ich mich auch etwas beschäftigt, leider ist es nicht ganz ohne da im Modul die Container-Nummern hochgezählt werden, und wenn man mittendrin etwas löscht, muss man darauf achten, die Lücke zu schließen und die nachfolgenden Nummern anzupassen. Das Verwenden eines Pseudoelements ist auch eine sehr gute Option.

Gruß
xmurrix

Spl4sh3r
Beiträge: 20
Registriert: So 1. Dez 2013, 16:28
Kontaktdaten:

Re: mpDynamicContent: Modul für dynamische Inhalte

Beitrag von Spl4sh3r » Fr 6. Dez 2013, 11:48

Hallo xmurrix,
wie wäre es wenn man zum Lücken schließen nicht die nachfolgenden Nummern anpasst, sondern beim Speichern die Werte in die nächsten frei Lücke steckt. Den auto-increment lässt du in einer extra spalte mitlaufen(Sortierung, etc.)

Gruß

xmurrix
Beiträge: 2744
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: mpDynamicContent: Modul für dynamische Inhalte

Beitrag von xmurrix » Fr 6. Dez 2013, 12:08

Spl4sh3r hat geschrieben:...wie wäre es wenn man zum Lücken schließen nicht die nachfolgenden Nummern anpasst, sondern beim Speichern die Werte in die nächsten frei Lücke steckt. Den auto-increment lässt du in einer extra spalte mitlaufen(Sortierung, etc.)...
Das würde gehen, wenn man die Funktion zum Generieren der Inhalte selber schreibt. Das Modul verwendet hier die im Core vorhandenen Funktionen

Code: Alles auswählen

// Zum Schreiben
conSaveContentEntry()

// Zum Auslesen
cTypeGenerator->getGeneratedCmsTag()
Beide arbeiten nicht mit dem Primärschlüssel, sondern über Content-Typ und Container-Nummer, also CMS_HTML + 123 für CMS_HTML[123].

Möchte aber ungern eine eigene Funktion dafür implementieren, da man dann immer Gefahr läuft, dass die im System vorhandene Funktion geändert/erweitert wird und man das dann nachziehen muss.

Vielleicht gibt es ja in den nächsten Versionen von CONTENIDO eine flexiblere Lösung zum Setzen/Auslesen der Inhalte, nicht nur über Content-Typ und Container-Nummer...

Gruß
xmurrix

Antworten