Ein dbXapp-Modul besteht aus Router, Include-Klassen, Templates, optionalen DD/FD-Dateien und optionalen Assets.
Grundstruktur
dbx/modules/myModule/
myModule.class.php
include/myModuleList.class.php
include/myModuleForm.class.php
tpl/htm/list.htm
tpl/htm/form.htm
tpl/css/myModule.css
dd/myItem.dd.php
fd/myItem-form.fd.php
Router
namespace dbx\myModule;
class myModule {
public function run() {
$run1 =
dbx()->get_modul_var(
'dbx_run1',
'list');
switch ($run1) {
case 'list':
return dbx()->get_include_obj(
'myModuleList')->run();
case 'edit':
case 'save':
return dbx()->get_include_obj(
'myModuleForm')->run();
}
return '';
}
}
DBX schema administration.
Modul mit Report
class myModuleList {
public function run() {
$report = new \dbxReport();
$report->init('my-items', 'my-items-report');
$report->_dd = 'myModule|myItem';
$report->_rflds = array('id', 'title', 'status', 'action');
$report->_pages = 1;
return $report->run();
}
}
Modul mit Form
class myModuleForm {
public function run() {
$rid =
dbx()->get_modul_var(
'rid',
'new',
'parameter');
$form = new \dbxForm();
$form->init('my-item-form', 'my-item-form');
$form->_dd = 'myModule|myItem';
$form->_fd = 'myModule|myItem-form';
$form->_action = '?dbx_modul=myModule&dbx_run1=save&rid=' . rawurlencode((string)$rid);
$form->add_flds('fd::');
return $form->run();
}
}
Modul mit Form und Report
Beispiel: Ticketdetails mit Antwortliste.
$form = new \dbxForm();
$form->init('ticket-detail', 'ticket-detail');
$form->_dd = 'dbxContact|contactRequest';
$form->_fd = 'dbxContact|ticket-detail';
$form->add_flds('fd::');
$form->add_obj('messages', 'obj-value', $this->message_report($rid));
return $form->run();
Template:
<div id="dbx_target_{i}" class="dbx-panel dbxForm_wrapper">
<form action="{action}" method="post" id="dbx_form_{i}" class="dbxAjax"
data-ajax-target="dbx_target_{i}">
[dbx:form]
</form>
{obj:messages}
</div>
Mehrfaches Modul auf einer Seite
Geschuetzte Modulvariablen und eindeutige Targets erlauben:
[modul=myModule]dbx_run1=list&status=open[/modul]
[modul=myModule]dbx_run1=list&status=closed[/modul]
Jede Instanz bekommt eigene {i}-Targets.
dbx_target
dbx_target bezeichnet das Ziel einer Teilaktualisierung.
<div id="dbx_target_{i}">
<form class="dbxAjax" data-ajax-target="dbx_target_{i}">
Der Wert muss eindeutig sein. Deshalb wird {i} verwendet.
Reihenfolge fuer neue Module
- Zweck und Route festlegen.
- DD definieren.
- FD definieren, wenn Formular benoetigt wird.
- Templates anlegen.
- Include-Klassen bauen.
- dbxForm/dbxReport verwenden.
- Aktionen als Templates bauen.
- AJAX/Confirm/openWin ueber vorhandene Libs anbinden.
- Modul per URL oder [modul=...] testen.