chameleon-system/pkgarticle

This package is abandoned and no longer maintained. The author suggests using the chameleon-system-private/pkgarticle package instead.

Das Artikelmodul kann verwendet werden um Artikel in Form von Teasern, Listen und Detailseiten darzustellen. 'Artikel' sind dabei in verschiedene Typen unterteilt, die sich in der Darstellung beliebig unterscheiden und beliebigen Content enthalten koennen, sei es nur UEberschrift und Text, ein Video oder eine Bildergalerie. Die Artikel lassen sich beispielsweise in Kategorien einteilen, die bestimmen koennen, unter welchem Navigationspunkt ein Artikel erscheint. Es ist sogar moeglich, die Navigation oder Teile davon automatisch aus den Artikelkategorien generieren zu lassen.


README

Modulbeschreibung

Das Artikelmodul kann verwendet werden um Artikel in Form von Teasern, Listen und Detailseiten darzustellen. „Artikel“ sind dabei in Typen unterteilt die sich in der Darstellung stark unterscheiden können und nahezu beliebigen Content enthalten können, sei es einfach nur Überschrift und Text, ein Video oder eine Bildergalerie. Die Artikel lassen sich in Kategorien einteilen, die dann z.B. bestimmen können, unter welchem Navigationspunkt ein Artikel erscheint. Es ist sogar möglich, die Navigation oder Teile davon automatisch aus den Artikelkategorien generieren zu lassen.

Installation

Alle *.inc.php aus /private/engine/blackbox/library/classes/pkgArticle/install/ in einen Ordner in /private/extensions/updates/ kopieren (Achtung: SVN-Dateien nicht mit kopieren) oder per External direkt aus dem jeweiligen Tag einbinden und im CMS Updates ausführen.

Artikeltypen

Jeder Artikel muss einem Artikeltyp zugeordnet sein. Der Artikeltyp bestimmt, welche Darstellung für den Artikel verwendet wird und welche Datenbankfelder aus pkg_article für diesen Typ freigeschaltet sind. Alle anderen Felder werden dann beim Editieren des Artikels im Backend ausgeblendet. So können z.B. bei einem Artikel vom Typ Magazin die Felder Herausgeber, Jahrgang, Heftnummer, etc. angegeben werden, die aber bei einem Artikel vom Typ News/Text nicht erscheinen. Wenn es einige Unterschiedliche Aritkeltypen gibt oder die Artikel sich stark unterscheiden, ist es sinnvoll, eine extra Tabelle mit den benötigten Feldern anzulegen und die Einstellung „enthält nur einen Datensatz“ zu aktivieren. Dann in der Artikeltabelle nur eine Eigenschaft für diese Tabelle anlegen. Außerdem kann für jeden Artikeltyp eine eigene Extension für das pkg_article-Objekt angegeben werden.

Kategorien

Das Artikel-Package kennt Artikelkategoriegruppen und Kategorien. Kategorien sind Eigenschaften der Artikelkategoriegruppen und können beliebig verschachtelt sein. Artikel werden immer Kategorien zugeordnet, nicht Artikelkategoriegruppen. Kategorie und Kategoriegruppe sind auch Teil des SEO-Links. Die Kategorien können verwendet werden um Listen danach zu filtern und Artikel in die Navigation einzubinden.

Darstellung von Listen/Teasern

Über das Artikel-Teaser Modul

Mit dem Teaser-Modul können einzelne Teaser angelegt werden, die dann auf Artikel oder wahlweise auch auf eine CMS-Seite oder eine externe URL verweisen können. Für die Teaser kann ein Teaser-Format gewählt werden über das die Darstellung des Teasers bestimmt wird. Die Teaser-Formate können im Backend angelegt werden.

Über das Artikel-Listen-Modul

Das Listenmodul stellt eine Liste von Artikeln dar die mit Filtern eingeschränkt werden kann. Die Liste kann dabei auf einzelne Artikel, Artikel-Kategorien oder Artikel-Typen eingeschränkt werden. Für die Liste kann außerdem eine Sortierung und ein Filter angegeben werden. Außerdem kann gewählt werden, welche Sortierung und Filter im Frontend zur Auswahl stehen sollen. Das Artikellistenmodul kann z.B. auch auf Artikeldetailseiten verwendet werden um passende Artikel zum aktuell aktiven Artikel darzustellen, einfach den entsprechenden Filter verwenden. Der Name des Listviews ergibt sich aus dem Namen des Views vom Listenmodul.

Artikelkategorien in die Navigation einbinden

Es ist möglich, die Artikelkategorien automatisch in die Navigation einzubinden und entsprechende Übersichten zu generieren. Dafür muss bei der Artikelkategoriegruppe bei „Als Unternavigation für diese Seite verwenden“ der entsprechende Navigationspunkt ausgewählt werden. Die Seite, die bei diesem Navigationspunkt hinterlegt ist, wird für alle Unterseiten repliziert, außer bei den Kategorien, bei denen „Listen/Übersichtsseite“ ausgewählt wurde. Das Artikellisten-Modul bietet hierfür die Filtermöglichkeit „Nur Artikel der aktiven Kategorie anzeigen“.

Detailseiten/Tabs

Für Artikeltypen, Kategoriegruppen, Kategorien und einzelne Artikel können Detailseiten/Tabs angelegt werden und die Standarddetailseite/Tab gewählt werden bzw in dieser Reihenfolge überschrieben werden. Die Detailseite bestimmt, auf welcher Seite im CMS der entsprechende Artikel dargestellt werden soll. So können z.B. Artikel des Typs „News/Text“ auf einer anders gestalteten, mit anderen Modulen bestückten Seite aufgerufen werden als Artikel vom Typ „Magazin“. Auf der jeweiligen Seite muss das Modul „Artikel Detailseite“ angelegt werden. Um die Detailseiten korrekt überschreiben zu können muss immer der Systemname für eine Detailseite angegeben werden. Auch der View des Artikels kann für die Detailseite noch einmal überschrieben werden.

Tabs

Wenn ein Artikel sehr viele Informationen enthält, können Tabs zur Gliederung verwendet werden. Beispiel: Es soll ein Artikel vom Typ News/Text auf der Detailseite mit Überschrift und Text dargestellt werden. Die Bilder zu dem Artikel sollen aber nicht sofort zu sehen sein sondern über einen extra „Tab“ da ein Artikel sehr viele Bildern enthalten kann. Zu der Standard-Detailseite könnte man jetzt eine weitere anlegen, und den Detailview für den Artikel überschreiben sodass hier die Bildergalerie dargestellt wird. Es ist so auch möglich eine komplett andere Seite zu verwenden um z.B. andere Module zu verwenden.

Paging/ Navigationsobjekt

Das Artikellisten-Modul stellt ein Navigationsobjekt zur Verfügung, das alle relevanten Daten zum Zustand der Liste enthält (aktuelle Seite, aktiver Filter, aktive Sortierung, Multifilter-Daten). Um ein Paging zu erhalten kann einfach der entsprechende View von MTPkgArticleCollectionNavigation gerendert werden, hier stehen dann alle nötigen Informationen zur Verfügung.

Filter

Filter können einfach im Backend bei „Artikel-Listen Filter“ definiert werden. Hier kann eine Klasse definiert werden, die von TdbPkgArticleModuleFilter ableiten muss. Die Filterklasse muss eine Filter-Condition und wenn gewünscht Filter Joins zur Verfügung stellen. Für eine Artikelliste kann jeweils nur ein Filter aktiv sein. Wenn in der Liste verfügbare Filter ausgewählt sind kann auf der Webseite eine Auswahl an Filtern dargestellt werden worüber der User die Liste dann Filtern kann.

Sortierung

Sortierungen können einfach im Backend bei „Artikel-Sortierungen“ definiert werden. Hier kann ein SQL-Feldname und die Sortierrichtung definiert werden, außerdem eine Sekundärsortierung. Für eine Artikelliste kann jeweils nur eine Sortierung aktiv sein. Wenn in der Liste verfügbare Sortierungen ausgewählt sind kann auf der Webseite eine Auswahl an Sortierungen dargestellt werden worüber der User die Liste dann sortieren kann.

Multifilter

Multifilter entsprechen in etwa dem Listfilter aus dem Shop. Es können mehrere Filter dargestellt werden, bei denen nach einem bestimmten Wert gefiltert werden kann. Für einen Filter können auch mehrere Werte gewählt werden. Es kann auch entschieden werden ob die Werte mit UND oder ODER verknüpft werden. Standardmäßig werden Filterklassen für Lookup und MLT-Felder mitgeliefert. Doku hierzu in Redmine Ticket #10655

Mehrsprachigkeit

Man kann diese mit folgendem Update aktivieren:

$translationFields = array('pkg_article' => array('active', 'approved', 'headline_topic', 'headline_seo', 'headline', 'content'), 'pkg_article_teaser' => array('active', 'headline_topic', 'headline', 'content'), 'pkg_article_category_group' => array('name'), 'pkg_article_category' => array('name', 'path_cache'), 'pkg_article_image' => array('name', 'description'), 'pkg_article_module_collection' => array('name', 'rss_feed_name'), 'pkg_article_tab' => array('display_name', 'seo_name'), 'pkg_article_module_teaser' => array('name', 'intro_text'), 'pkg_article_module_multifilter' => array('public_name'), 'pkg_article_module_filter' => array('name_public'), 'pkg_article_module_sort' => array('name_public'));

foreach ($translationFields as $table => $fields) {
    foreach ($fields as $field) {
        if (!empty($sField)) {
            TCMSLogChange::FieldChangeMultiLanguageSetting($table, $field, '1');
        }
    }
}
TCMSLogChange::UpdateTranslationFields();