Zasilkovna – Závislost parametru selectu na jiném s více informacemi

vanaveno
Člen | 144
+
0
-

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

Šaman
Člen | 2667
+
0
-
$this->zasilkovna->getAddress()->order('name ASC')->fetchAll();

Buď si upravíš metodu getAddress, nebo po načtení adres si prostě projdeš celé pole výsledků a ke každé adrese donačteš další data. Třeba i do nového pole, které pak předáš šabloně.