Dialog Form
Około 2 minut
Komponent ten pozwala na otwarcie okna dialogowego. Do którego możemy dodać inne komponenty graficzne. Jeżeli nigdy wcześniej nie tworzyłeś dialogów w systemie_ Ready_™ zajrzyj najpierw do tutorialu tworzenia prostego okna dialogowego.
Pole na dialogu
Pole po kliknięciu
Przykład
Poniżej znajduje się prosty przykład definicji dialoga.
<?php
namespace ReadyApp\Demo\Forms;
use DialogForm;
use Translator;
use Application;
use WidgetException;
use JScript;
/**
* Description of SampleNewDialog
* Opisz tutaj co twoja klasa robi
*
* @package {nazwa aplikacji}
* @createDate {data}
* @lastModification {data}
* @version 0.0.1
* @author {Imię nazwisko <adres email>}
* @license GPL
*/
class SampleNewDialog extends DialogForm {
/**
* @var array
*/
protected static $cMethods = [];
/**
* SampleNewDialog constructor.
*
* @param string $name
* @param null|string $caption
* @param int $dstyle
*/
public function __construct($name, $caption = NULL, $dstyle = BS_DIALOG) {
parent::__construct($name, Translator::translate('Nowy przykładowy dialog'), $dstyle);
$this->path = Application::makeRelativePath(__FILE__);
$this->HWND = $this->createHWND();
$this->height = '400px';
$this->width = '350px';
if (($this->isOpened()) AND (!$this->noNeedForCreate())) {
$this->create();
}
}
/**
* Zwraca listę metod asynchronicznych
*
* @return array
*/
public function getCallableMethods() {
return self::$cMethods;
}
/**
* open
* metod wywoływana w celu zainicjowania okna dialogowego.
*
* @param null|string|array $params
* @param null|array $data
*/
public function open($params = NULL, &$data = NULL) {
parent::open($params, $data);
// wywołanie metody budującej pola okna
$this->create();
$this->setWData(['text__' => 'Przykładowa zainicjowana wartość pola!!!']);
}
/**
* save
* Zapisywanie danych po wykonaniu akcji zapisu przez użytkownika na dialogu
*
* @return bool
* @throws WidgetException
*/
public function save() {
if (!$this->isOpened()) {
return FALSE;
}
$sData = $this->getSData();
$wData = $this->getWData();
// Wywołanie walidacji danych
$this->validate($wData);
// wywołanie kodu JS przekazanego jako parametr do dialoga
if (isset($sData['afterSubmit'])) {
JScript::add($sData['afterSubmit']);
}
$this->jsClose(TRUE);
return true;
}
/**
* create
* Dodawanie komponentów graficznych
*
* @return void
*/
public function create() {
if (!$this->isOpened()) {
return;
}
// // Powołanie pola
// $textField = new TextInput2($this->name.'text__');
// // Dodanie opisów
// $textField->setLabel(Translator::translate('Opis pola'), Translator::translate('Podpowiedź do pola'));
// // Określenie szerokości pola (opcjonalne)
// $textField->width = 'calc(100% - '.(2 * self::SPACE_LEFT).'px)';
// // Dodanie pola do kanwy
// $this->addNext($textField, 'text__', self::P_TO_LEFT); // pierwszy parametr nowo dodawane pole | drugi parametr alias pola
$this->addModernButtonsPanel([
'bSave',
'bCancel',
]);
}
/**
* validate
*
* @param array $data
*
* @return bool
* @throws WidgetException
*/
protected function validate(array $data) {
if (bs_empty_str($data['text__'])) {
throw new WidgetException($this->name.'text__', Translator::translate('Wypełnij pole tekstowe'));
}
return true;
}
}
Każdy dialog może w czasie w swego otwarcia odwołać się asynchronicznie do siebie po dodatkowe dane.
Dodatkowo w systemie możemy zbudować różnego rodzaju dialogi między innymi:
- Prosty dialog – Posiada jedną kolumnę pól oraz przyciski zapisz i anuluj.
- Dialog rozszerzony – Posiada więcej niż jedną kolumnę pól, które można grupować w grupę.
- Dialog z zakładkami – To dialog, który posiada kilka prostych dialogów widocznych jak zakładki.
- Kreator – Dialog posiadający kilka etapów, gdzie na każdym z nich wykonuje określone akcje.
Aby wyświetlić dialog, musimy go wywołać w systemie Ready\_™ możemy zrobić to w następujący sposób:
- Wywołać z pomocą funkcji JS
App.openDialogByCls({CLSNAM}, {KEYVAL}, ({afterSubmit:'{AFTER_SUBMIT}', mode:'new'}).toJSONString());
App.createDialog('createProcessForm', 'SimpleProcessCreatingForm', './modules<br></br>/AProcesses/forms/SimpleProcessCreatingForm.inc', 'Zakladanie', '513',<br></br>({clsnam:'DOSS', strpid:351, devcid:'{devcid}', contid:'{contid}'}).toJSONString(), null, 'fast');
- dodać go jako CustomWidget