Przejdź do głównej treści

Dialog Form


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

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