|
|
| Zeile 3: |
Zeile 3: |
| | [[ProcessWire - Page Rendering Functions]] | | [[ProcessWire - Page Rendering Functions]] |
| | [[ProcessWire - Rendering Funktionen]] | | [[ProcessWire - Rendering Funktionen]] |
| | + | [[ProcessWire - Rendering Templates mit fields Ordner]] |
| | https://processwire.com/blog/posts/processwire-3.0.7-expands-field-rendering-page-path-history-and-more/#theres-also-page-gt-rendervalue | | https://processwire.com/blog/posts/processwire-3.0.7-expands-field-rendering-page-path-history-and-more/#theres-also-page-gt-rendervalue |
| − |
| |
| − | == Felder mit Templates rendern ==
| |
| − | ProcessWire's $page->render Funktion ist extrem flexibel. Sie kann direkt den Inhalt eines Feldes über ein Template rendern, wenn es in /site/templates/fields/ liegt und richtig benannt ist.
| |
| − |
| |
| − | Beispiel: Der Inhalt eines body Felds soll ausgegeben werden und dazu soll ein Template genutzt werden, mit dem der Inhalt zusätzlich von einem Div umgeben wird.
| |
| − |
| |
| − | /site/templates/fields/body.php
| |
| − |
| |
| − | <syntaxhighlight lang="php">
| |
| − | <div class='bodycopy'>
| |
| − | <?= $value ?>
| |
| − | </div>
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − | Zur Ausgabe gibt es mehrere Möglichkeiten:
| |
| − |
| |
| − | <syntaxhighlight lang="php">
| |
| − | echo $page->render('body');
| |
| − | echo $page->render->body;
| |
| − | echo $page->_body_; // Nützlicher Shortcut wenn man mehrere Felder mit Template ausgeben möchte. Einfach vorne und hinten ein Underscore.
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − | Es stehen folgende Variablen zur Verfügung, die man in den Templates nutzen kann:
| |
| − | $value - The value that needs to be rendered
| |
| − | $page - The page that $value lives on
| |
| − | $field - The field representing $value (of class Field) if you want it
| |
| − | Weitere Variablen kann man mit '''$page->set()''' übergeben.
| |
| − |
| |
| − | === Varianten (Custom Template) ===
| |
| − | Mit einem Zweiten Parameter kann man auch weitere Templates anlegen. Die werden dann passend zum Namen gesucht. Reihenfolge wie im Beispiel
| |
| − |
| |
| − | Beispiel
| |
| − | echo $page->render('body', 'custom');
| |
| − | Sucht nach templates wie unten und nimmt das erste das gefunden wird. Die erste Variante ergibt für mich am meisten Sinn.
| |
| − |
| |
| − | /site/templates/fields/body/custom.php
| |
| − | /site/templates/fields/custom/body.php
| |
| − | /site/templates/fields/custom.php
| |
| − | /site/templates/fields/body.php (fallback)
| |
| − | Man kann es aber auch genau angeben:
| |
| − | echo $page->render('body', '/custom'); // use only custom.php
| |
| − | echo $page->render('body', '/custom/body'); // use only custom/body.php
| |
| − |
| |
| − | === Felder mit Repeater Matrix ===
| |
| − |
| |
| − | Matrix Felder könnte man so handeln:
| |
| − |
| |
| − | <syntaxhighlight lang="php">
| |
| − | foreach($page->test_matrix as $item) {
| |
| − | if($item->type == 'content') {
| |
| − | echo "
| |
| − | <h3>$item->headline</h3>
| |
| − | <p>$item->summary</p>
| |
| − | ";
| |
| − | } else if($item->type == 'quote') {
| |
| − | echo "
| |
| − | <blockquote>
| |
| − | <p>$item->quote</p>
| |
| − | <cite>$item->cite</cite>
| |
| − | </blockquote>
| |
| − | ";
| |
| − | } else if( ... ) {
| |
| − | // and so on
| |
| − | }
| |
| − | }
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − | Über den Field Template Ansatz kann man die Matrix eleganter rendern. Wenn man sie so anlegt...
| |
| − |
| |
| − | /site/templates/fields/test_matrix.php
| |
| − | <syntaxhighlight lang="php">
| |
| − | foreach($value as $item) {
| |
| − | echo $item->render();
| |
| − | }
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − | ... sucht die render Funktion im nächsten Unterordner für jeden Typ das Templatefile...
| |
| − |
| |
| − | /site/templates/fields/test_matrix/content.php
| |
| − | <syntaxhighlight lang="php">
| |
| − | <h3><?= $page->headline ?></h3>
| |
| − | <p><?= $page->summary ?></p>
| |
| − | </syntaxhighlight>
| |
| − | /site/templates/fields/test_matrix/quote.php
| |
| − | <syntaxhighlight lang="php">
| |
| − | <blockquote>
| |
| − | <p><?= $page->quote ?></p>
| |
| − | <cite><?= $page->cite ?></cite>
| |
| − | </blockquote>
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − | So kann man im Template ganz einfach aufrufen:
| |
| − |
| |
| − | <syntaxhighlight lang="php">
| |
| − | echo $page->render('test_matrix');
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − | === Felder sinnvoll gruppieren ===
| |
| − | Mit geschickter Strategie lassen sich zum Beispiel geschickt Varianten erzeugen. Z.B. verkürzte Absätze oder Thumbnails statt der Vollansicht:
| |
| − |
| |
| − | '''/site/templates/fields/short/body.php'''
| |
| − |
| |
| − | <syntaxhighlight lang="php">
| |
| − | // render the first found paragraph only
| |
| − | if(preg_match('!(<p>.+?</p>)!', $value, $matches)) {
| |
| − | echo $matches[1];
| |
| − | }
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − | '''/site/templates/fields/short/images.php'''
| |
| − |
| |
| − | <syntaxhighlight lang="php">
| |
| − | // render a thumbnail of the first image
| |
| − | if(count($value)) {
| |
| − | $image = $value->first()->width(200);
| |
| − | echo "<img src='$image->url' alt='$image->description'>";
| |
| − | }
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − | '''/site/templates/fields/short/title-link.php'''
| |
| − |
| |
| − | <syntaxhighlight lang="php">
| |
| − | // render a linked title
| |
| − | echo "<a href='$page->url'><h2>$page->title</h2></a>";
| |
| − | </syntaxhighlight>
| |
| − | Im Haupttemplate kann man das z.B. für eine Zusammenfassung nutzen:
| |
| − |
| |
| − | <syntaxhighlight lang="php">
| |
| − | foreach($page->children as $child) {
| |
| − | echo $child->render('title', 'short/title-link');
| |
| − | echo $child->render('images', 'short/');
| |
| − | echo $child->render('body', 'short/');
| |
| − | }
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − | === Felder aus anderen Seiten rendern ===
| |
| − | Mit $page->render() haben wir Werte aus der aktuellen Seite gerendert. Man kann aber auch aus beliebigen Seiten Felder Rendern. Dazu gibt es renderValue()
| |
| − |
| |
| − | <syntaxhighlight lang="php">
| |
| − | $results = $pages->find("body%=some text"); // find some pages and store in a PageArray
| |
| − | echo $page->renderValue($results, 'children'); // use the template above to render it
| |
| − | </syntaxhighlight>
| |
| − | Hier müssen wir die Seiten als Parameter mitgeben, da wir ja nicht von der aktuellen Seite rendern wollen.
| |
| − |
| |
| − | <syntaxhighlight lang="php">
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − | <syntaxhighlight lang="php">
| |
| − | </syntaxhighlight>
| |
| − | <syntaxhighlight lang="php">
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − |
| |
| − | == Verschiedenes ==
| |
| − | <syntaxhighlight lang="php">
| |
| − | // 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
| |
| − | </syntaxhighlight>
| |