WARNUNG!
Wenn Sie das Modul deinstallieren, ohne alle Seiten vom Typ 'Erweiterter Inhalt' wieder zurück auf den Standard-Inhaltstypen zu setzen, funktioniert Ihre CMSms Installation nicht mehr!
Stellen Sie sicher, dass alle Seiten vom Typ 'Erweiterter Inhalt' vor der Deinstallation wieder geändert oder gelöscht werden! (nutzen Sie die Moduleinstellung 'Aktion beim Deinstallieren' umd dies automatisch vorzunehmen.)
Dieses Modul bietet einen weiteren Inhaltstypen "Erweiterter Inhalt".
Mit diesem Inhaltstypen kann die Administration beim Bearbeiten von Seiten flexibel gestaltet werden, indem man im Seiten-Template den einzelnen Inhaltsblöcken weitere Parameter hinzufügt.
Inhaltsblöcke können in Form verschiedener Input-Felder wie Dropdowns, Mehrfachauswahlfelder oder Checkboxen dargestellt werden.
Die Input-Felder können weiterhin in eigenen Tabs angezeigt oder in Gruppen zusammengefasst werden.
Außerdem hat man die Möglichkeit, Seiten oder einzelne Blöcke nur für bestimmte Gruppen des FrontEndUsers Moduls freizugeben.
Weiterhin können Seiten ein Start- und ein Enddatum erhalten, womit Seiten automatisch aktiv/inaktiv werden.
Die erweiterten Einstellungen können von übergeordneten Seiten übernommen werden.
Die Parameter können außerdem mit Hilfe von einfachem Smarty-Syntax dynamische Werte enthalten.
D.h. man kann z.B. das Ergebnis eines benutzerdefinierten Tags, eines Plugins, eines Moduls oder einfach nur eines Globalen Inhaltsblockes als Wert für einen Parameter einsetzen lassen.
Nach der Installation wird der Administration ein weiterer Menüpunkt "Erweiterungen->Erweiterter Inhalt" hinzugefügt.
Hier können verschiedene Einstellungen vorgenommen werden.
Beim Bearbeiten von Seiten steht nun ein weiterer Inhaltstyp "Erweiterter Inhalt" zur Auswahl, der die Funktionen des Moduls bereitstellt.
Hinweis:
In manchen Fällen empfielt es sich, anstelle des normalen {content} Tags den {AdvancedContent} Tag zu benutzen. (Groß- und Kleinschreibung beachten)
Die Fehlermeldung "Parameter [X] is not known by Module [Modulname]" kann damit z.B. umgangen werden.
Wenn die Startseite vom Typ Erweiterter Inhalt ist und der Inhaltstyp wird wieder auf den standard Inhaltstypen geändert, muss die Startseite erneut als solche gesetzt werden.
Wenn die Parameterwerte mit Hilfe von Smarty verarbeitet werden sollen, bedenken Sie, dass bestimmte Daten im Backend nicht bzw. nicht immer verfügbar sind.
Dies betrifft z.B. {$content_id}, {$page_alias} oder {title} etc., da diese Daten noch nicht existieren, wenn die Seite gerade erst erstellt wird.
Manche Daten sind darüber hinaus nur dann verfügbar, wenn die Seite explizit im Frontend gerendert wird.
Es empfiehlt sich in solchen Fällen ein extra Plugin oder UDT zu erstellen, in dem man entscheiden kann was passieren soll, wenn derartige Daten nicht existieren.
Wenn die SVN Version verwendet wird, die Datei /modules/AdvancedContent/lang/ext/de_DE.php löschen.
Eigene Block-Typen können mit ein wenig Programmierkenntnissen mit Hilfe des Verzeichnisses /module_custom/AdvancedContent/lib/ im Stammverzeichnis selbst erstellt werden.
Falls nicht vorhanden, muss diese Verzeichnisstruktur selbst erstellt werden. Dabei muss auf Groß- und Kleinschreibung geachtet werden.
In diesem Verzeichnis legt man eine php-Datei nach folgendem Schema an: class.acBlockType_[name des blocktyps].php
Der name des Blocktyps muss kleingeschrieben werden.
In dieser Datei definiert man eine Klasse, die genauso heißt wie der Teil des Dateinamens zwischen 'class.' und '.php'.
Diese Klasse muss von der Basisklasse 'acContentBlockBase' abgeleitet werden.
Im Konstruktor der Klasse muss als erstes der Konstruktor der Basisklasse aufgerufen werden.
Bsp.:
Dateiname: class.acBlockType_foo.php
Inhalt:
class acBlockType_foo extends acContentBlockBase
{
function __construct(&$content_obj, &$params = array())
{
parent::__construct($content_obj, $params);
# eigene Eigenschaften für diesen Blocktypen aus den Parametern auslesen
$this->SetBlockProperty('bar', isset($params['bar']) ? $params['bar'] : '');
}
public function GetBlockInput()
{
# eigenes Inputfeld für diesen Blocktypen definieren
return 'Here should be a very special foo input.';
}
}
Für weitere Informationen über mögliche Funktionen eines Blocktyps gibt es hier eine generierte API Dokumentation.
Für detailiertere Beispiele, wie Block-Typen aufgebaut sein können, kann man auch einfach einen Blick in die Dateien im Verzeichnis /modules/AdvancedContent/lib/ werfen.
Mit Hilfe folgender Parameter beim Erstellen von Inhaltsblöcken im Seiten-Template können diese Funktionen verwendet werden:
(alle Parameter sind optional)
Standard Paramater:
(siehe auch Tag-Hilfe des {content}-Tags)
{content block="Zweiter Inhaltsblock"}{content assign="pagecontent"}
{table_of_contents thepagecontent="$pagecontent"}Erweiterte Parameter:
{content block="Kategorien" label="Wählen Sie eine Kategorie" block_type="dropdown" items=":::global_content name='categorylist':::" smarty="true"}
Zusätzliche Parameter für Text-Blöcke:
Parameter für Checkboxen: keine weiteren Parameter.
Hinweis: verwenden Sie den Parameter default=1 um eine Checkbox als Voreinstellung zu aktivieren
Parameter für Colorpicker: keine weiteren Parameter
Parameter für Slider: (siehe auch Dokumentation des verwendeten jQuery Slider Plugins)
Parameter für Dropdowns/Mehrfachauswahl:
block_type="select_multiple" verwendet wird.(Standard ist die Anzahl der Einträge)Parameter für Datumsblöcke:
Parameter für "multi_input":
Was ist ein multi_input?
Ein multi_input ist ein Block, der aus mehreren Inputfeldern bestehen kann.
Diese können in den Moduleinstellungen festgelegt werden. Dabei gilt für jeden multi_input derselbe Syntax wie in einem Seitentemplate beim Erstellen eines Inhaltsblocks.
MultiInputs können verwendet werden, um verschiedene Werte in einem einzigen Inhaltsblock zu speichern, wobei für jeden Wert unterschiedliche Inputfelder verwendet werden können.
Diese Blöcke kann man z.B. verwenden, um eine Liste mit Modulen und zugehörigen Parametern anzuzeigen.
Beispiel eines MultiInputs im Seitentemplate:
{content block="module" label="Seitenmodule" block_type="multi_input" inputs="module,module,module,module"}
Beispiel für einen MultiInput der über die Moduleinstellung erstellt werden kann (Name="module"):
{content block="module selection" block_type="dropdown" items="|News|Gallery|Menu"}
{content block="module params" block_type="text" oneline=true}
Wie sieht das nun beim Bearbeiten einer Seite aus?
Es wird ein Fieldset mit der Legende "Seitenmodule" angezeigt.
In diesem Fieldset wird der MultiInput "module" viermal angezeigt.
D.h. es gibt vier Zeilen mit je zwei Inputfeldern. Ein Dropdown und ein einzeiliges Textinput.
Was wird gespeichert?
Das Modul speichert die Werte als einen einzelnen Inhaltsblock. Dabei werden die einzelnen Inputfelder mit dem input_delimiter voneinander getrennt und deren Wert mit dem input_value_delimiter.
Nehmen wir mal an, es wurde das Newsmodul viermal ausgewählt, jedoch mit unterschiedlichen Parametern wie z.B. category="1", category="2", category="3", category="4".
In der Datenbank wird folgendes für diesen Block gespeichert:
News<!-- multi_input_value_delimiter -->category="1"<!-- multi_input_delimiter -->
News<!-- multi_input_value_delimiter -->category="2"<!-- multi_input_delimiter -->
News<!-- multi_input_value_delimiter -->category="3"<!-- multi_input_delimiter -->
News<!-- multi_input_value_delimiter -->category="4"
Im Seitentemplate kann man nun den Inhalt dieses Blocks anhand der Trennzeichen aufteilen und die ausgewählten Module inkl. ihrer jeweiligen Parameter aufrufen.
Komplettes Beispiel:
{* Inhaltsblock erstellen und der Variable $modules zuweisen *}
{content block="meine_seitenmodule" block_type="multi_input" inputs="Module,Module,Module,Module" assign="modules"}
{* Inhalt der Variable $modules in ein Array aufteilen und in der Variable $modules speichern; somit haben wir die MultiInputs *}
{assign var=modules value="<!-- multi_input_delimiter -->"|explode:$modules}
{* jeden MultiInput durchgehen *}
{foreach from=$modules item="module"}
{if $module != ''}
{* die Werte des MultiInputs in ein Array aufteilen; somit haben wir Modulname und Parameter *}
{assign var=module_items value="<!-- multi_input_value_delimiter -->"|explode:$module}
{if $module_items[0] != ''}
{* Modul aufrufen *}
{if isset($module_items[1])}
{eval var=$smarty.ldelim|cat:'cms_module module="'|cat:$module_items[0]|cat:'" '|cat:$module_items[1]|cat:$smarty.rdelim}
{else}
{eval var=$smarty.ldelim|cat:'cms_module module="'|cat:$module_items[0]|cat:'"'|cat:$smarty.rdelim}
{/if}
{/if}
{/if}
{/foreach}
Dieses Modul bietet keine kommerzielle Unterstützung. Es gibt jedoch einige Möglichkeiten, Hilfe zu finden:
Bitte melden Sie Fehler oder Verbesserungsvorschläge auf der Projekt-Homepage.
Copyright © 2010-2012, Georg Busch (NaN) <georg.busch@gmx.net>. Alle Rechte vorbehalten.
Dieses Modul wurde unter der GNU Public License veröffentlicht. Sie müssen dieser Lizenz zustimmen, bevor Sie das Modul verwenden.
Laut den Nutzungsbestimmungen der GPL wird diese Software so veröffentlicht wie sie ist.
Sie erhebt keinerlei Anspruch auf einwandfreie Funktion.
Das Modul wurde erstellt, in der Hoffnung nützlich zu sein.
Es besteht keinerlei Garantie auf einen einwandfreien Nutzen.
Bitte lesen Sie die Nutzungsbedingungen für ausführliche Informationen.