Przejdź do głównej treści

Ready_™ Developer TeamMniej niż 1 minuta

Za pomocą LookupManagera możemy dodać własne przyciski czy też sparametryzować nasz LookupWidget2.

Do przykładu posłuży nam rejestr cregisters.creg_samochody, dla którego zrobić LookupManager, który doda nam przycisk umożliwiajaacy dodanie nowego samochodu oraz uzupełni później(po dodaniu) nam pole LookupWidget2.

Poniżej listning klasy CarLookupManager. Na potrzeby przykładu załóżmy że plik z klasą najduje się w ./scripts/CarLib/LookupWidget/CarsLookupManager.inc

Kod
namespace ReadyApp\CarLib\LookupWidget;

/**
 * CarsLookupManager
 *
 * @final
 * @author 
 * @version 0.1
 * @copyright 
 */
final class CarsLookupManager {


    /**
     * Metoda odpowiedziana za ansychroniczne wygenerowanie LookupWidget2 
     * z uzupełnionym już polem. Wybranym samochodem po przez klucz id____
     *
     * @param string $params JSON zawierający pola: id____ z wskazanym id rekordu, name__ z nazwą lookupa na dialogu
     * @return string|null
     */
    public function setByPKey($params): ?string {

        $data = JSON::toArray($params);
        $id____ = $data['id____'];
        $name__ = $data['name__'];

        require_once('./classes/LookupWidget/LookupWidget2.inc');
        $searchEngine = new CarsSearchEngine();
        $lookup = new LookupWidget2($name__, $searchEngine);
        $lookup->autoClear = TRUE;

        if (is_numeric($id____)) {
            $searchEngine->append(' AND id____ = '.$id____.'');
            $lookup->search('');
			return $lookup->toHtml('fast');
        }

        return NULL;

    }


    /**
     *
     * @param LookupWidget2 $lookup 
     * @param array         $params Dodatkowe parametry przekazane podczas tworzenia dialoga
     * @return void
     */
    public static function manage(LookupWidget2 $lookup, $params = array()): void {

        $lookupName = $lookup->getName();

        JScript::add('App.'.$lookupName.'onAdd = function(id____) {
            asyncLibrary.execute(\'./scripts/CarLib/LookupWidget/CarsLookupManager.inc\',\'\\ReadyApp\\CarLib\\LookupWidget\\CarsLookupManager\', \'\', \'setByPKey\', ({id____:id____,name__:\''.$lookup->getName().'\'}).toJSONString(), \'if(text)$(\\\''.$lookup->getName(TRUE).'\\\').innerHTML=text;\', null,FAST);
        }');

        
        $lookupName = $lookup->getName();
        $inputName = $lookupName . LookupWidget2::INPUT_PREFIX;
        $searchName = $lookupName . LookupWidget2::SEARCH_PREFIX;
        $comboName = $lookupName . LookupWidget2::COMBO_PREFIX;

        $script = '
             App.openDialogByCls(\'CREGISTER_ENTRY\', null, ({afterSubmit:\'App.'.$lookupName.'onAdd(id____)\', mode:\'new\',cregid:1}).toJSONString());
             return false;
            ';
        $img = 'add.gif';

        $newCarIcon = new FormButton(array(
            'name' => $lookupName . '_NewCarIcon',
            'class_' => 'halflings eic-i2 halflings-plus',
            'title' => Translator::translate('Dodaj samochód'),
            'submit' => FALSE,
            'script' => $script
        ));
        $newCarIcon->tabIndex = -1;
        $lookup->addIcon($newCarIcon);

    }

}