ProcessWire - Render Funktionen: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „Hier einige Snippets und Links zum Rendern von Files, Feldern und Templates == Links == https://processwire.com/blog/posts/processwire-3.0.7-expands-field-ren…“)
 
Zeile 28: Zeile 28:
 
     $page - The page that $value lives on
 
     $page - The page that $value lives on
 
     $field - The field representing $value (of class Field) if you want it
 
     $field - The field representing $value (of class Field) if you want it
 +
 +
=== 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">
 
<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>
 
</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">
 
<syntaxhighlight lang="php">
 +
foreach($value as $item) {
 +
  echo $item->render();
 +
}
 
</syntaxhighlight>
 
</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">
 
<syntaxhighlight lang="php">
 +
<h3><?= $page->headline ?></h3>
 +
<p><?= $page->summary ?></p>
 
</syntaxhighlight>
 
</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">
 
<syntaxhighlight lang="php">
 +
echo $page->render('test_matrix');
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
 +
 +
 
<syntaxhighlight lang="php">
 
<syntaxhighlight lang="php">
 
</syntaxhighlight>
 
</syntaxhighlight>

Version vom 19. April 2024, 16:23 Uhr

Hier einige Snippets und Links zum Rendern von Files, Feldern und Templates

Links

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 rendert Felder mit einem Template wenn es in /site/templates/fields/ liegt und richtig benannt ist.

Beispiel

/site/templates/fields/body.php

<div class='bodycopy'>
  <?= $value ?>
</div>

Ausgabe z.B. mit:

echo $page->render('body');
echo $page->render->body;
echo $page->_body_; // Nützlicher Shortcut wenn man mehrere Felder mit Template ausgeben möchte.

Es stehen folgende Variablen zur Verfügung:

   $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

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:

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
  }
}

Über den Field Template Ansatz kann man die Matrix eleganter rendern. Wenn man sie so anlegt...

/site/templates/fields/test_matrix.php

foreach($value as $item) {
  echo $item->render();
}

... sucht die render Funktion im nächsten Unterordner für jeden Typ das Templatefile...

/site/templates/fields/test_matrix/content.php

<h3><?= $page->headline ?></h3>
<p><?= $page->summary ?></p>

/site/templates/fields/test_matrix/quote.php

<blockquote>
  <p><?= $page->quote ?></p>
  <cite><?= $page->cite ?></cite>
</blockquote>

So kann man im Template ganz einfach aufrufen:

 echo $page->render('test_matrix');



Verschiedenes

// 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