PagesetterTemplates

Guite edited this page Nov 15, 2014 · 3 revisions

== Pagesetter Templates anpassen ==

Das Template-System benutzt verschiedene Template-Dateien für jeden Publikations-Typ. Die Template-Dateien werden in pagesetter/pntemplates/... gespeichert und sie werden nach dem Namen des Publikations-Typs benannt (”PubName-format.html”, wobei format von der Situation abhängt).

=== Übersicht === Pagesetter benutzt die folgenden Template-Formate: {| border=1 class="wikitable" !'''Suffix''' !'''Beispiel''' !'''Beschreibung''' |- | *-list.html | News-list.html | Die kompakte Ansicht einer Publikation, wenn sie in einer Liste gezeigt wird |- | *-list-header.html | News-list-header.html | Das Template, was vor einer Liste gezeigt wird |- | *-list-footer.html | News-list-footer.html | Das Template, was nach einer Liste gezeigt wird |- | *-list-single.html | News-list-single.html | Dieses Template ersetzt die Templates list, list-header, und list-footer, falls kein list-header Template gefunden wird. Es ist übrigens nicht cache-bar |- | *-full.html | News-full.html | Die Voll-Ansicht einer Publikation |- | *-print.html | News-print.html | Die Voll-Ansicht einer Publikation, wenn sie als Druckansicht gezeigt wird (ohne die PostNuke-Blöcke) |- | *-xml.html | News-xml.html | Die Voll-Ansicht einer Publikation als XML. Wird benutzt für die xmllist- und xmlpub-Funktionen, die einen “Content-Type: text/xml” zum HTTP header hinzufügen. |}

'''TIP''' Außerdem können beliebige eigene Templates erzeugt werden (Bsp: News-special.html), die dann über den URL-Parameter &tpl=special aufgerufen werden. Template Variablen

Die Templates kennen alle User-definierten Felder und die meisten der Meta-Daten vom System (Autor etc.). Template Variables werden mittels


eingebunden, wobei “name” der Name der Variablen ist. Die User-definierten Felder werden einfach über ihren Feld-Namen angesprochen, während die Meta-Daten über das Core-Objekt übergeben werden. Hier ist es also


..wobei “name” eines der folgenden Core-Felder sein kann:

{| border=1 class="wikitable" !id !Eine einzigartige Integer-Zahl, die die Publikation identifiziert |- | tid | Die ID des Publikations-Typen. |- | format | Der Name des Template-Formates, z.B. “list” in “News-list-header.html”. |- | author | Der Name des Autors, wie es im Editor-Fenster gesetzt wurde. |- | title | Eine Kopie des Inhaltes des Feldes, welches als Titel-Feld deklariert wurde |- | topic | Beschreibung des zugeordneten Topics. Dies ist eine Struktur mit folgenden Feldern: id, name, text, und image. Es wird so benutzt: |- | creator | Der Name der Person, die die Publikation angelegt hat |- | created | Der Zeitstempel der Erstellung der Publikation. |- | lastUpdated | Der Zeitstempel der letzten Änderung der Publikation. |- | fullURL | Die URL zur vollen Ansicht der Publikation. |- | printThis | Ein kompletter Link zu “Print this” mit Beschreibung |- | printThisURL | Die URL zu “Print this” |- | sendThis | Ein kompletter Link zu “Send this” mit Beschreibung |- | sendThisURL | Die URL zu “Send this”. |}

'''TIP''' Um herauszufinden, welche Variablen noch zur Verfügung stehen, sollte man am Ende des Templates folgenden Aufruf einbinden:


hat man im Browser Popups erlaubt, poppt nun ein Fenster auf, in dem alle Variablen und deren Inhalte aufgezählt sind. Benutzen von Listen-Einträgen

Wenn man sich auf eine Liste oder Kategorie bezieht, muss man weiterhin angeben, welche Eigenschaft des Listen-Eintrages man überhaupt möchte. Man kann zwischen dem Titel, dem qualifizierten Titel (mit Eltern-Einträgen als Präfix), dem Wert oder der Beschreibung wählen. Auf die Eigenschaften werden als Unterwerte des Feldes zugegriffen (genau wie bei den Eigenschaften der Core-Variablen). Die möglichen Listen-Eigenschaften sind:

{| border=1 class="wikitable" !title !Der Titel des Eintrags |- | fullTitle | Der qualifizierte Titel. Die Titel der Eltern-Einträge sind als Präfix davor gestellt, mit einem Doppelpunkt als Trennzeichen. Als Beispiel sei Fiction:Fantasy genannt |- | value | Der Wert des Eintrags |- | description | Die Beschreibung |}

Man hat zum Beispiel ein Kategorien-Feld namens bookType in seiner Publikation. Dieses ist definiert als eine Liste, die typesOfBooks heisst. Um den Titel des Kategorien-Feldes zum Template hinzuzufügen, muss man dann


benutzen.

Wenn man eine Select-Box für ein spezifisches Listen-Feld erstellen möchte, kann man das Smarty-Plugin pagesetter_listSelector Smarty wie folgt nutzen:


 Kategorie wählen: 
 ...


Dies produziert eine Select-Box mit dem Namen “categoryInput” basierend auf dem Feld “category”. Die Select-Box zeigt die Titel der Listen-Einträge und nutzt deren IDs als Werte. === Benutzen von mehrseitigen Feldern === Ein Feld, das als mehrseitig deklariert wurde, wird über ein Feld von Seiten angesprochen, also muss man angeben, welche Seite man zeigen möchte. Die Seiten-Nummer wird in der URL mit übergeben, die jeweilige Seite wird über $core.page erreicht. Die Anzahl der Seiten ermittelt man über $core.pageCount. Das Template-System bietet eine “pager” Funktion namens pagesetter_pager. Zikula selbst enthält verschiedene Arten von Pagern, aber sie funktionieren nicht optimal mit Pagesetter. Abgesehen davon ist dieser leichter mit Pagesetter-Daten zu nutzen. Um den Pager einzufügen erweitere Dein Template um


Die Funktion akzeptiert die folgenden Parameter:

{| border=1 class="wikitable" !page !Die aktuelle Seiten-Nummer - null-basierend analog zu dem Seiten-Feld. Falls nicht vorhanden, wird $core.page benutzt |- | pageCount | Die verfügbare Anzahl von Seiten. Falls nicht vorhanden, wird $core.pageCount benutzt. |- | baseURL | Die Basis-URL der Ansicht (Link zur Seite). Falls nicht vorhanden, wird $core.baseURL benutzt |- | next | Ein Stück HTML, welches den “Next page” Link darstellt. Standard ist “>” |- | prev | Ein Stück HTML, welches den “Prev page” Link darstellt. Standard ist “<” |- | separator | Ein Stück HTML, welches den Trenner zwischen Seitenzahlen darstellt. Standard ist   |- | pageClass | Ein CSS Klassen-Name um die Anker der prev/next Links einzufügen. |- | thisPageClass | Ein CSS Klassen-Name um die aktuelle Seitenzahl einzufügen, benutzt ein Tag. |}

Ein Beispiel-Template:

Seite 

und ein wenig größeres Beispiel:

Seite  von 

=== Anzeigen von Hit Counts === Wie oft ein Artikel aufgerufen wurde, kann man mit


anzeigen lassen. Das ist deswegen so, weil normale Template Variablen in den Cache wandern, was bedeutet, dass man immer das Gleiche sieht, bis die Seite wieder editiert wird. Das würde den Hit Count einfrieren und in damit völlig nutzlos machen. Aber


wird durch den Wert ersetzt, nachdem das Template aus dem Cache geladen wird.

=== Anzeigen eines "Ändern" Links === Solch ein Link kann mit der Variablen


eingefügt werden, aus dem gleichen Grund wie beim Hit Count - wir wollen nicht, dass dieser Link gecachet wird, weil er von den Berechtigungen der User abhängig ist.

=== Anzeigen eines "Hinzufügen" Links === Für Authoren kann in der Listenansicht mit

Hinzufügen

in der *-list-footer.html ein einfacher Link zum Hinzufügen eines Eintrages erzeugt werden. Leider wird dieser Link dann immer angezeigt, auch wenn keine Zugriffsberechtigungen vorhanden sind. Einzelne und Mehrfache Listen-Templates

Die Listen-Ansicht von Pagesetter erlaubt es eine Liste von Publikationen durch ein Template anzuzeigen. Dies wird so getan, dass ein einzelnes Template für alle Elemente wiederholt durchlaufen wird, optional noch mit einem header und einem footer erweitert. Dabei gibt es jedoch folgende Unterscheidung zu beachten

=== Einzelnes Listen-Template === Wenn ein Template namens x-list-header.html nicht vorhanden ist, dann wird x-list-single.html statt dessen benutzt. Dieses Template bekommt ein Feld namens publications, welches einen Eintrag für jede Publikation in der Liste enthält. Jeder Feld-Eintrag enthält exakt die selben Variablen wie die, die zu dem Mehrfachen Listen-Template übergeben werden. Diese erlauben es die genaue Position der Publikation, dafür kostet es ein wenig Performance, weil die komplette Ausgabe der Liste nicht gecachet werden kann. Die Prüfung auf die Existenz von x-list-header.html an Stelle von x-list-single.html macht es möglich auch andere Template-Formate als “single” zu benutzen.

Beispiel:

Meine Startseite

=== Mehrfache Listen-Templates === Wenn ein Template namens x-list-header.html existiert, dann wird dieses als erstes angezeigt. Danach wird das Template x-list.html einmal für jede Publikation in der Liste angezeigt. Als letztes folgt dann noch eine einmalige Ausgabe von x-list-footer.html. Das reduziert die Möglichkeiten zum Fine-Tuning des Layouts, dafür verbessert es die Performance, weil die Ausgabe jeder einzelnen Publikation im Cache gespeichert werden kann. Theme-spezifische Templates

Mit dem pnRender-System ist es möglich Theme-spezifische Templates anzulegen. Platziere einfach Deine Templates in ''/themes/THEMENAME/templates/modules/pagesetter''

=== Template Operationen === Man kann eine Menge interessanter Dinge mit dem Template-System anstellen. Pflichtlektüre hierfür ist sowohl die Dokumentation von Smarty auf http://smarty.php.net als auch die /Anpassung

Hier sind auf jeden Fall ein paar kleine Beispiele:

Den Titel in Gross-Buchstaben

Das Topic auf 40 Zeichen beschränken, mit ... am Ende

Topic: 

Erzeuge eine Kategorien-Navigation mit dem Bild “separator.png” anstelle von Doppelpunkten als Trennzeichen in dem qualifizierten Titel eines Listen-Eintrages

Genre: 

Formatiere einen String


=== Automatisch generierte Templates === Es ist möglich fehlende Templates automatisch zu generieren. Gehe zu “Publications:Create Templates” im Menü. Hier findest Du eine Liste Deiner Publikationen und die Möglichkeit die auszuwählen, deren Templates Du generieren willst. Die erzeugten neuen Templates basieren auf die Templates, die _template heissen - ... so kannst Du auch diese mofizifieren, damit sie Deinen eigenen Ansprüchen gerecht werden.

'''Achtung!''' Du musst das Verzeichnis pntemplates beschreibbar machen, damit dies funktioniert!

=== Plugins === Wenn Du in das Verzeichnis pagesetter/pntemplates/plugins schaust, wirst Du einige vordefinierte Plugins für Pagesetter vorfinden. Du wirst (zur Zeit noch) den PHP Code lesen müssen um eine Dokumentation zu erhalten. Aber hier ist eine kleine Übersicht:

{| border=1 class="wikitable" !pagesetter_pager !Generiert eine “« 1,2,3, ..., »” Navigation um in mehrseitigen Publikationen eine Seite zu wählen. |- | pagesetter_listBrowser | Generiert einen auf ein Kategorie-Feld basierenden Baum. Genau wie der Kategorie-basierte Menü-Block |- | pagesetter_inlinePubList | Erstellt eine Template-Liste von Publikationen um sie auf der Seite anzuzeigen |- | pagesetter_listSelector | Generiert eine Auswahlliste für Einträge eines Kategorie-Feldes |- | pagesetter_pubPager | Generiert Links für prev/next um durch eine Liste von Publikationen zu stöbern |- | pagesetter_createFilter | Erstellt einen Filter für die Eingabe zur Pagesetter API Funktion getPubList |- | var | Intern benutzt um Templates automatisch zu erstellen |- | bool_format | Formatiert einen Bool-Wert als einen von zwei Strings |}

=== Plugin pagesetter_listBrowser === Mit diesem Plugin lassen sich auch bestehende Listen aus Pagesetter z.B. als Drop-Down-Box ausgeben.

'''Beispiel:''' Wir möchten in einer imaginären CD-Datenbank in den Publikationen (das wären dann z.B. Interpreten mit Ihren Erzeugnissen) das jeweilige Typ des Mediums angeben. Man kann zwar hier ein reines Textfeld seinen Redakteuren präsentieren, aber das wird dann jeder Redakteur anders handhaben und beschreiben. Somit der schlechtere Weg. Der richtige Weg wäre eine vorgegebene Liste, mit der man dann hier im Ausgabetemplate auch filtern kann.

Somit müssen wir eine neue Liste "Mediatypen" anlegen und dort die Mediatypen entsprechend zentral erfassen und speichern. Zum Beispiel; Vinyl 10", Vinyl 12", MC, CD, CDDA, BlueRay usw.

Wie die Liste für die Erfassungsmaske eingebunden wird, steht hier.

Die Ausgabe als Drop-Down-Box sieht nun wie folgt aus:

Ausgabe als Drop-Down-Box mit Submit Button:

" method="post">
 
  
   Mediatyp auswählen
    
  
 


Ausgabe als Drop-Down-Box ohne Submit Button (mit Javascript):

" method="post">
   
    
     Mediatypen auswählen
       
    



        
Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.