Processwire - Themes / Templates: Unterschied zwischen den Versionen
Steff (Diskussion | Beiträge) |
|||
| Zeile 73: | Zeile 73: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Delayed Output and Advanced Templates === | === Delayed Output and Advanced Templates === | ||
| − | Über prependTemplateFile und appendTemplateFile | + | Über prependTemplateFile und appendTemplateFile kann man Rahmentemplates komfortabel Strukturieren. |
| + | |||
| + | https://processwire.com/docs/tutorials/how-to-structure-your-template-files/ | ||
'''Ordnerstruktur''' | '''Ordnerstruktur''' | ||
| Zeile 102: | Zeile 104: | ||
); | ); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| − | |||
=== AJAX Driven Theme === | === AJAX Driven Theme === | ||
Version vom 7. Februar 2019, 14:21 Uhr
Links
Siehe auch
- Processwire - Templates Grundausstattung (Best Practice)
- ProcessWire - Field Rendering
- ProcessWire - Skeleton Template
- Processwire - Template from Scratch
Template Strategien
Es gibt in ProcessWire im Wesentlichen drei grundlegende Stragegien um HTML Inhalte auszugeben:
- Direct Output
- Delayed Output
- Markup Regions (ProcessWire - Markup Regions)
Direct Output
Die Inhalte im Template werden direkt als Markup ausgegeben.
Delayed Output
Inhalte werden in Variablen zwischengespeichert. Eine _main.php Datei bildet ein Rahmengerüst. Am Ende wenn alle Teilbereiche gerendert sind werden die Inhalte zusammengefügt (delayed)
Markup Regions
Kombiniert die Vorteile der vorigen Strategien. Werden per Include (oder über die Funktionen für das Delayed Output) Template Dateien verknüpft, werden die Inhalte gleichnamiger id Container ersetzt oder mit Hilfe von pw- Klassen kombiniert bzw. bearbeitet.
Allgemeine Tipps
Es gibt verschiedene Orte wo man Teilrenderings vornehmen kann. Wenn man sich keine Strategie zurechtlegt kann man schnell die Übersicht verlieren. Hier ein paar Vorschläge:
- Partials im partials Ordner sind für einfache Dinge geeignet und gerade beim Entwurf sehr schnell. Hier lege ich Codeblöcke an die direkt (per echo oder direkt als HTMl) ausgegeben werden. Es gibt keine Rückgaben über return. Partials sind Views. Also auf Funktionen weitgehend verzichten. Ausnahmen sind z.B. foreach Schleifen auf Felder (zumindest solange ohne Template Engine gearbeitet wird).
- Partials Dateien enden auf .inc
- In Komplexeren Projekten sollte auf sauberer Model View Controller Trennung geachtet werden.
- Layoutblöcke für Redakteure kommen z.B. in den Field Bereich. Hier kann man die Renderreihenfolge von PW ausnutzen.
Datei Strategien
Wo legt man am Besten Dateien und Ordner an.
Basic Theme
templates/ _func.inc (wenn benötigt) home.php basic_page.php templates/partials foot.inc head.inc
Layout Blocks (BEST PRACTICE)
Dies ist meine (Steffs) selbstentwickelte Strategie um vielfältige Inhalte auch einem nicht Programmierer im Backend zu ermöglichen und sie dann im Frontend auszugeben.) Anstatt den Templates fest definierte Seitenbereiche zuzuordnen und für jedes Layout ein Template zu erzeugen, kann es sinnvoll sein in Layout-Blöcken zu denken. also einzelne Gestaltungsbausteine, die der User auswählen kann und aus denen sich die Seite aufbaut.
Um dies umzusetzen bietet sich der Feldtyp RepeaterMatrix an, der beim den ProField Modul mit dabei ist. Als Alternative würde vielleicht
ProcessWire - Layout Blöcke mit RepeaterMatrix Processwire - Flexible Content Type
Rendering Strategien
Beispiele
http://blog.mauriziobonani.com/processwire-basic-website-workflow-part-2/
Render Funktionen
// New Functions in 3.x
render()
renderValue()
// Functions for 2.x or for easy snippet inclusion (also possible with render
wireRenderFile() // mostly used for delayed output
wireIncludeFile() // for direct output
// i.e.
// returns the output of snippets/contactform.php
// the second argument is optional and will be passed to
// the called file as multiple variables with the name of the key
// also all api varables are available by default
wireRenderFile("snippets/contactform", array("stuff" => $something ));
Delayed Output and Advanced Templates
Über prependTemplateFile und appendTemplateFile kann man Rahmentemplates komfortabel Strukturieren.
https://processwire.com/docs/tutorials/how-to-structure-your-template-files/
Ordnerstruktur
templates/ _func.inc _init.inc _main.inc templates/partials foot.inc head.inc
config.php
<?php
...
$config->debug = false;
$config->sessionFingerprint = true;
$config->prependTemplateFile = '_init.php';
$config->appendTemplateFile = '_main.php';
$config->imageSizerOptions = array(
'upscaling' => true, // upscale if necessary to reach target size?
'cropping' => true, // crop if necessary to reach target size?
'autoRotation' => true, // automatically correct orientation?
'sharpening' => 'soft', // sharpening: none | soft | medium | strong
'quality' => 90, // quality: 1-100 where higher is better but bigger
);
AJAX Driven Theme
config.php
// if ajax request set $ajax = $input->post->ajax;
Markup Regions
Seit Version 3.0 die neueste Rendering Strategie. Hier werden Divs mit ids automatisch zu editierbaren Bereichen, die mit passenden Feldern im Backend befüllt werden.
Syntax und Konventionen
Module
Recommended Modules
FormBuilder (kostenpflichtig) - FormBuilder ProFields (kostenpflichtig) - https://processwire.com/talk/store/product/10-profields/ Hanna Code (wie bei Wordpress) - TextformatterHannaCode Map Marker (google Maps) - FieldtypeMapMarker Simple Navigation - MarkupSimpleNavigation AIOM - All In One Minify - AllInOneMinify
Grundausstattung
Siehe Processwire - Templates Grundausstattung
Tipps und Tricks
Templates in Backend-Auswahl verstecken
Manche Templates tauchen in der Auswahl der Redakteure auf obwohl es eigentlich nur Teiltemplates sind. Z.B. für eine Matrix. Benennt man sie mit einem Underscore am Anfang _NameDesTemplates tauchen sie nicht mehr in der Auswahlliste auf.