Zasilkovna – Závislost parametru selectu na jiném s více informacemi
- vanaveno
- Člen | 144
Ahojte, omlouvám se za popis tématu v nadpisu, nevím jak to přesně definovat, zkusím to vysvětlit níže. Vytvořil jsem si jednoduchou komponentu Zásilkovny. Vše funguje jak má. Po výběru kraje mi to nabídne select s patřičnými městy daného kraje, když si vyberu město, vyhodí mi to adresy poboček Zásilkoven daného města. Vše funguje jak má, jen bych potřeboval u každé adresy selectu ještě další informace, které si mohu vytáhnout z databáze, akorát nevím, jak je k té adrese připojit.
<?php
// Zasilkovna --------------------------
public function handleCityChange($value)
{
if ($value) {
//Cities
$city =array();
$city = $this->zasilkovna->getCity()->select('cityId')->select('name')->where('countryId', 1)->where('regionId', $value)->order('name ASC')->fetchAll();
foreach ($city as $cityId => $values) {
$cities[$cityId] = $values['name'];
}
$this['zasilkovna']['city']->setPrompt('Vyberte město')
->setItems($cities);
} else {
$this['zasilkovna']['city']->setPrompt('Vyber region')
->setItems([]);
}
$this->redrawControl('wrapper');
$this->redrawControl('secondSnippet');
}
public function handleAddressChange($value)
{
if ($value) {
//Adress
$place =array();
$place = $this->zasilkovna->getAddress()->select('zasId')->select('name')->where('cityId', $value)->order('name ASC')->fetchAll();
foreach ($place as $zasId => $values) {
$places[$zasId] = $values['name'];
}
$this['zasilkovna']['address']->setItems($places);
} else {
$this['zasilkovna']['address']
->setItems([]);
}
$this->template->places = $this->zasilkovna->getAddress()->order('name ASC')->fetchAll();
$this->redrawControl('wrapper');
$this->redrawControl('thirdSnippet');
}
protected function createComponentZasilkovna()
{
$form = new Nette\Application\UI\Form;
//Regions
$regions =array();
$region = $this->zasilkovna->getRegions()->select('regionId')->select('name')->where('countryId', 1)->order('name ASC')->fetchAll();
foreach ($region as $regionId => $value) {
$regions[$regionId] = $value['name'];
}
$form->addSelect('region', 'Kraj:', $regions)
->setPrompt('Vyberte kraj');
$form->addSelect('city', 'Město:')
->setPrompt('-- nejprve vyberte kraj --');
$form->addRadioList('address', 'Pobočka:');
$form->addText('url');
$form->addSubmit('send', 'Vyber adresu pobočky');
$form->onSuccess[] = [$this, 'zasilkovnaSucceeded'];
return $form;
}
public function zasilkovnaSucceeded(Form $form)
{
$values = $form->getHttpData();
$this->orderManager->setSessionZasilkovna($values['region'], $values['city'], $values['address']);
}
?>
<?php
{form zasilkovna}
<div class="w100 mb-3">{input region}</div>
<div class="w100 mb-3 ">
{snippet secondSnippet}
{input city}
{snippet thirdSnippet}
{var $form = $control['zasilkovna']}
{if $form[address]->items}
<div class="bg-fff ofh p-6">
{foreach $form[address]->items as $address => $row}
<label class="cont lh-30 d-ib" n:name="address:$address">
<input class="manId violet mr-3" data-submit-checkbox="on" type="radio" n:name="address:$address">
{$row}<span class="checkmark bg-fff br-2 bs-solid bw-1 bc-ccc d-ib"></span>
</label>
{/foreach}
</div>
{/if}
{/snippet}
{include js}
{/snippet}
</div>
<div class="button40 button-444 f-right">{input send}</div>
{/form}
?>
Příklad k n:name=„address:$address“ {$row} bych potřeboval připojit
ještě odkaz na obrázek popřípadě další informace o pobočce. Mohli
byste mi prosím někdo poradit jak na to?
Děkuji