Mniej 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);
}
}
Plik
Plik z przykładu