- Prinzip der Fragmente
- Variablen in Fragmenten
- REDAXO-Fragmente nutzen
- Subfragmente
- Beispiel Paginierung
- REDAXO-Fragmente überschreiben
Fragmente werden in REDAXO eingesetzt, um wiederkehrende Code-Schnipsel übersichtlich zu verwalten. Fragmente sind PHP-Dateien und werden bei der Ausgabe geparst, sodass Variablen ausgegeben und verarbeitet werden können. In REDAXO selbst werden zahlreiche Fragmente für die Ausgabe des Backends verwendet. Diese Fragmente können auch als Ausgangsbasis für eigene Fragmente genutzt werden. Grundsätzlich wird ein Fragment in dieser Form angesprochen und ausgegeben:
$fragment = new rex_fragment();
echo $fragment->parse('meinfragment.php');
Fragmente, die in AddOns im Verzeichnis fragments
abgelegt werden, werden ohne Pfadangabe gefunden.
Fragmente können Variablen ausgeben, die zuvor dem Fragment per setVar
zugewiesen wurden.
$fragment->setVar('meinevar','Ich bin der Inhalt',false);
Folgende Variablenbezeichner sind reserviert und können nicht für eigene Definitionen verwendet werden:
- filename
- vars
- decorator
- fragmentDirs
Das Auslesen der Variablen erfolgt per
$this->meinevar;
alternativ:
$this->getVar('meinevar');
Wenn eine Variable vom Typ Array
übergeben wird, so kann dieses Array durchlaufen werden:
$fragment->setVar('monate',['Januar','Februar','März','April','Mai','Juni','Juli','August','September','...']);
Ausgabe im Fragment:
<ul>
<?php foreach ($this->monate as $monat) : ?>
<li><?= $monat ?></li>
<?php endforeach ?>
</ul>
Die in REDAXO vorliegenden Fragmente können für die eigene Ausgabe im Frontend oder im Backend genutzt werden.
getSubfragment('path/to/file.php')
Ein Fragment kann ebenfalls Fragmente aufrufen und die sich darin befindlichen Parameter an die Subfragmente übergeben. Dies hat den Vorteil, dass man im Fragment auf Logik zur Übergabe verzichten kann. Ein Beispiel dafür ist das Fragment für die [Artikel-Blockauswahl]. Hier gibt es ein Zwischenfragment, welches alle Informationen an ein Subfragment übergibt. So kann dieses Zwischenfragment durch z.B. AddOns überschrieben werden, um die Daten darin zu verändern und ggf. wieder an die eigentliche Ausgabe des Subfragments übergeben.
Beispiel*
$this->subfragment('/core/dropdowns/dropdown.php');
Bei der Ausgabe von Datensätzen oder längeren Listen wird häufig eine Paginierung verwendet. Eine Paginierung steht in REDAXO bereits zur Verfügung. Diese Paginierung kann für eigene Zwecke verwendet und angepasst werden.
// Anzahl Datensätze pro Seite
$rows_per_page = 15;
if ("REX_VALUE[1]") {
$sql = rex_sql::factory();
// Select für alle anzuzeigenden Datensätze
$qry = "SELECT name, shorttext, id FROM rex_meinetabelle";
$sql->setQuery($qry);
// Anzahl Zeilen insgesamt (
$rows = $sql->getRows();
// Query erweitern um Anzahl der Datensätze pro Seite
$qry .= ' LIMIT '.$rows_per_page;
// Wenn nicht die erste Seite angezeigt wird, Offset an Query anhängen
if (rex_get('start','int',0)) {
$qry .= ' OFFSET '.rex_get('start','int',0);
}
// $res wird später für die Anzeige der Liste durchlaufen
$sql->setQuery($qry);
$res = $sql->getArray();
}
// Neues Paginierungsobjekt erstellen
$pager = new rex_pager($rows_per_page);
// Gesamtanzahl der Zeilen zuweisen
$pager->setRowCount($rows);
// Neues Fragment Objekt erstellen
$fragment = new rex_fragment();
// pager Objekt an Fragment übergeben
$fragment->setVar('pager', $pager, false);
// urlprovider definieren
$fragment->setVar('urlprovider', rex_article::getCurrent());
// Paginierung ausgeben
echo $fragment->parse('core/navigations/pagination.php');
Hierbei wird das Fragment /core/fragments/core/navigations/pagination.php
für die Ausgabe verwendet. Dieses Fragment kann auch in ein eigenes AddOn in das Verzeichnis fragments/core
kopiert und geändert werden. Wenn es dort unter dem Namen mypagination.php
abgelegt wird, so kann es ohne Pfadangabe aufgerufen werden:
echo $fragment->parse('mypagination.php');
REDAXO Fragmente können auch überschrieben werden. Es genügt hierbei eine Fragment-Datei mit gleichem Namen in das Fragment-Verzeichnis des eigenen AddOns zu legen. REDAXO lädt bzw. überschreibt die Fragmente in der Reihenfolge, in der AddOns geladen werden. Daher wird das Project-AddOn mit load late
geladen.
Seit R5.7 ist es möglich dass man die "Ooops Fehlerseiten" im Frontend als auch Backend individualisiert.
Die beiden Fehlerseiten sind als Core-Fragment im System enthalten und können z.b. via fragments
Ordner im Project-AddOn (oder in einem beliebigen anderen AddOn) überschrieben werden.
Es gibt insgesamt 3 Fehlerseiten in REDAXO, davon sind aktuell zwei änderbar:
-
Whooops Fehlerseite, die man nur sieht wenn man als Admin im Backend eingeloggt ist. Diese enthält Debugging-Informationen und taucht sowohl im Front- und Backend auf. Sie ist nicht änderbar.
-
die Ooops Fehlerseite im REDAXO-Backend (als Fragment
core/be_ooops.php
überschreibbar), wenn man nicht als Admin user im Backend eingeloggt ist
- Die Ooops Fehlerseite im Frontend (als Fragment
core/fe_ooops.php
überschreibbar), wenn man nicht als Admin-User im Backend eingeloggt ist
Eine Fehlerseite sollte eine vollständige HTML-Seite sein (inkl. html, head, body,..), die keine externen Abhängigkeiten enthält (keine externen css-, js- Dateien, Bilder oder Fonts etc).
Seit REDAXO 5.12 ist es möglich, die Anmeldeseite mittels Fragmenten zu individualisieren, um beispielsweise ein Hintergrundbild einzubringen oder ein eigenes Logo zu verwenden.
Die Anmeldeseite enthält zwei Core-Fragmente, die innerhalb eines fragments
-Ordners im Project-AddOn (oder in einem beliebigen anderen AddOn) überschrieben werden können, also etwa so:
Beispiel Project-AddOn
redaxo/src/addons/project/fragments/core/login_background.php
redaxo/src/addons/project/fragments/core/login_branding.php
Beispiel Theme-AddOn
theme/private/fragments/core/login_background.php
theme/private/fragments/core/login_branding.php
Um hier Anpassungen vorzunehmen, bietet sich an, nicht mit leeren Fragmenten zu beginnen, sondern zunächst die originalen Core-Fragmente aus /redaxo/src/core/fragments/core
an die richtige Stelle zu kopieren, um auf dessen HTML-Struktur aufzubauen.
Das Background-Fragment enthält das Hintergrundbild und den Footer für die Anmeldeseite. Der Footer ist vor allem deshalb enthalten, um auf die Bildquelle hinweisen zu können (Credits).
Das Branding-Fragment enthält das REDAXO-Logo. Dies kann bei Bedarf ausgetauscht oder um ein weiteres Logo ergänzt werden.
Die Blockauswahl in der Artikelpflege kann den eigenen Wünschen entsprechend angepasst werden. Hierzu kann man das Fragment /redaxo/src/addons/structure/plugins/content/fragments/module_select.php
anpassen.
Die Blockauswahl nutzt ein das Fragment module_select.php
, welches Default zum Core-Fragment für Dropdowns durchgeschleift wird.
Möchte man die Blockauswahl im Dropdown verändern oder z.B. eine Info einschleusen, kann man das Fragment anpassen.
Im $items
Array werden alle nötigen Informationen zum Aufbau der Blockauswahl geliefert und die Blöcke können so beliebig manipuliert werden.
Möchte man auf das Standard-Select vom Core verzichten und stattdessen eine eigene Variante erstellen z.B. zur Darstellung von Icons. Entfernt man das Subfragment und erzeugt eine eigene Logik.
/**
* Discussion Issue #1174
* Manipulate this fragment to influence the selection of modules on the slice.
* By default the core fragment is used.
*
* @var bool $block
* @var string $button_label
* @var array $items array contains all modules
* [0] the index of array
* [id] the module id
* [title] the module name
* [href] the module url
*/
$this->subfragment('/core/dropdowns/dropdown.php');