dbXapp 2.0
RAD, CMS, Module und Runtime-IDE fuer dbXapp
Loading...
Searching...
No Matches
dbxReport Leitfaden

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
dbxReport Ablauf

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 {
foreach ($rows as &$row) {
$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.