ProcessWire - Render Funktionen: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
(Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Hier einige Snippets und Links zum Rendern von Files, Feldern und Templates == Links == ProcessWire - Page Rendering Functions…“)
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>
 

Version vom 19. April 2024, 16:50 Uhr