dbxReport ist die Standardpipeline fuer Listen.
Was dbxReport bietet
- Suche
- Sortierung
- Pagination
- Tabellenmodus
- Template-Modus
- Tabulator/Grid-Modus
- Einzelaktionen
- Mehrfachauswahl
- Multi-Aktionen
- AJAX-Reload
- Header/Body/Footer-Templates
- Callbacks fuer Zeilenaufbereitung
Minimaler Report
$report = new \dbxReport();
$report->init('ticket-list', 'ticket-admin-report');
$report->_dd = 'dbxContact|contactRequest';
$report->_rflds = array('id', 'create_date', 'status', 'subject', 'action');
$report->_rrows = 30;
$report->_pages = 1;
return $report->run();
Report-Template
<div class="dbx-panel dbxReport" id="dbx_target_{i}">
<form action="{action}" method="post" id="dbx_form_{i}" class="dbxAjax"
data-ajax-target="dbx_target_{i}" data-ajax-replace="target">
[rpt:header]
[rpt:body]
[rpt:footer]
</form>
</div>
Diese Kurzform beschreibt nur das Prinzip. In realen Report-Templates arbeitet dbxReport haeufig mit dbx_split, weil ein einziges Template Header, Body und Footer enthaelt.
Reales Muster:
[tpl=dbx|report-shell-head]
[dbx:pagination]
<div class="table-responsive">
<table class="table table-striped table-bordered table-light table-hover align-middle">
<thead>
<tr class="{tr-class}">[rpt:row]</tr>
</thead>
<tbody>
<hr class="dbx_split">
<tr class="{tr-class}">[rpt:row]</tr>
<hr class="dbx_split">
</tbody>
</table>
</div>
[tpl=dbx|report-shell-foot]
split_tpl() teilt dieses Template so:
- Teil 1: Header, z.B. Tabellenkopf mit [rpt:row] fuer Spaltenueberschriften.
- Teil 2: Body, z.B. Tabellenzeile mit [rpt:row] fuer Datensaetze.
- Teil 3: Footer, z.B. Reststruktur nach dem Body.
Aktionen wie Multi-Delete gehoeren in diese Reportstruktur, nicht in ein separates Seitenziel. Der Report hat sein eigenes Target, und AJAX ersetzt nach der Aktion wieder genau dieses Target.
Wichtige Report-Marker
| Marker | Aufgabe |
| [dbx:pagination] | Position der Pagination im Report |
| [rpt:row] | Platzhalter fuer Header-Felder oder Row-Felder |
| <hr class="dbx_split"> | Trennt Header, Body und Footer |
| [tpl=dbx|report-shell-head] | Standard-Report-Rahmen oeffnen | | [tpl=dbx|report-shell-foot] | Standard-Report-Rahmen schliessen |
Templates bleiben sprachabhaengig. Auch Report-Templates koennen als report-name_de.htm, report-name_en.htm usw. existieren; dbxTPL nimmt zuerst die aktive Sprachvariante und dann den neutralen Fallback.
HTML in Tabellenzellen
Standard: Zellinhalte werden escaped.
HTML ist nur erlaubt, wenn das Feldformat explizit gesetzt wird:
$report->_rpt_format = array(
'status_view' => 'html',
'action' => 'html',
);
Callback
$report->set_body_callback('decorate_ticket_rows');
public function decorate_ticket_rows(array $rows): array {
$row['status_view'] = $this->status_badge($row['status'] ?? '');
$row['action'] = $this->row_action((int)$row['id']);
}
return $rows;
}
foreach( $topics as $file=> $html)
Callbacks bereiten Daten fuer die Ausgabe auf. Sie ersetzen nicht die Report-Pipeline.
Delete und Confirm
Delete-Links gehoeren ins Aktions-Template:
<a class="dbxAjax dbxConfirm"
href="?dbx_modul=dbxContact_admin&dbx_run1=delete&id={id}"
data-confirm="Kontaktanfrage wirklich loeschen?"
data-confirm-buttons="yesno"
data-target="dbx_target_{i}"
data-replace="target">
Loeschen
</a>
Der Controller loescht und rendert danach wieder den Report fuer dasselbe Target.
Multi-Delete
Multi-Delete ist eine Report-Aktion. Es braucht kein eigenes Seiten-Target, wenn der Report sein Target hat.
Report Footer -> Multi-Aktion -> AJAX -> Delete -> Report neu rendern -> Target ersetzen
Table Mode und TPL Mode
Table Mode:
- klassische HTML-Tabelle
- automatische Spalten
- gut fuer Adminlisten
TPL Mode:
- freie Wiederholung mit Row-Template
- gut fuer Karten, Dashboardlisten, Activity-Feeds
Tabulator/Grid Mode:
- interaktives Grid
- Spaltenbreiten, Inline-Edit, groessere Datenmengen
- nutzt grid.js/Tabulator
Regeln
- Jede Liste mit Suche/Sortierung/Pagination ist ein dbxReport.
- Kein eigener Filter-Mechanismus, wenn dbxReport ihn abbildet.
- Aktionen bleiben im Report.
- AJAX ersetzt das Report-Target.
- Confirm gehoert ins Aktions-Template.
- HTML-Spalten explizit markieren.