Template-Inhalt per PHP ausgeben
Quell-ID: GitHub Discussion #8
Use Case
Der Inhalt eines REDAXO-Templates soll direkt per PHP ausgeführt und ausgegeben werden, ohne dass ein Artikel geladen wird.
Verwendete AddOns
- REDAXO Core
Zielbeschreibung
Ein Template soll programmatisch geladen und dessen PHP-Code ausgeführt werden.
Lösung
<?php
$templateID = 6;
$template = new rex_template($templateID);
$templateContent = $template->getTemplate();
echo rex_file::getOutput(rex_stream::factory('rex:///template/' . $templateID, $templateContent));
Erklärung
rex_template($templateID)– Erstellt ein Template-Objekt für die angegebene IDgetTemplate()– Holt den rohen Template-Coderex_stream::factory()– Erstellt einen virtuellen Stream für den Template-Coderex_file::getOutput()– Führt den Code aus und gibt das Ergebnis zurück
Besserer Ansatz
Für die meisten Anwendungsfälle ist es empfehlenswert, Templates über die Artikel-API zu nutzen:
Alternative 1: Fragment verwenden
<?php
$fragment = new rex_fragment();
$fragment->setVar('data', $myData);
echo $fragment->parse('my_fragment.php');
Alternative 2: Include mit Variablen
Wenn Template-Logik wiederverwendet werden soll, kann diese in eine separate PHP-Datei ausgelagert werden:
// In redaxo/src/addons/project/lib/TemplateHelper.php
class TemplateHelper
{
public static function renderHeader(array $params = []): string
{
ob_start();
extract($params);
include rex_path::addon('project', 'fragments/header.php');
return ob_get_clean();
}
}
// Verwendung
echo TemplateHelper::renderHeader(['title' => 'Meine Seite']);
Alternative 3: Artikel mit Template laden
<?php
// Artikel mit einem bestimmten Template laden
$article = new rex_article_content($articleId);
echo $article->getArticleTemplate();
Wann die direkte Template-Ausgabe sinnvoll ist
- Migration von altem Code
- Debugging
- Spezielle Konsolenbefehle
- Generierung von statischen Dateien
Für reguläre Webseiten-Ausgaben sollte der Standard-Artikelaufruf bevorzugt werden.