Autor Zpráva
radvis
Profil *
Ahoj,

potřrboval bych docílit toho, abych měl například 10 novinek a u každé novinky bych měl input a v něm ID novinky. Potřebuju to ale udělat v nette a nemůžu na to přijít.

    foreach($pozice as $x){
		$form->setDefaults(array('hl_position' =>$x->hl_position));
		}


Ale tohle to opakuje pořád dokola až narazí na poslední a to tam vypíše. Nemohl by mi někdo proím poradit?
AM_
Profil
bez více zdrojového kódu ti těžko co poradit, ale už zde je vidět pár základních nedostatků:
- všechny HTML inputy se jistě nejmenují hl_position. Musíš je mít nějak odlišené, nebo si je naskládej do kontejneru.
- používal bych setValue místo setDefault, záleží, čeho přesně chceš docílit, ale value je pravděpodobnější
- Form::setDefaults/setValues nastavuje jedním voláním defaulty více polím, FormControl::setValue/setDefault jen jednomu konkrétnímu. Z toho plyne, že ve smyčce volat setdefaults a vždy nastavit default jen jedomu poli je přinejmenším hloupé.
radvis
Profil *
		$form = new AppForm;
	       $form->addText('hl_position', 'Pozice hl. stránky:')
		        ->addRule(Form::FILLED, 'Nastav pozici inzerátu!.');
		$form->addText('next_position', 'Pozice v dané sekci:')
				 ->addRule(Form::FILLED, 'Nastav pozici v sekci inzerátu!.');
		$form->addText('added', 'Zrušit inzerát(0):');
		$form->addSubmit('pridat', ' Nastavit ');
		$form->addProtection('Please submit this form again (security token has expired).');
		$form->onSubmit[] = callback($this, 'updatePositionSubmitted');
    $pozice = $inzeraty->SelectPosition();
    foreach($pozice as $x){
		$form->setDefaults(array('hl_position' =>$x->hl_position));
		}


Ono to sed default funguje v případě, že tam dám pouze vytažený jeden záznam, ale takhle v cyklu mi to prostě nejde udělat.
AM_
Profil
Tak moment, výše uvedený skript, ti vytvoří form, kde máš DVĚ input pole (hl_position a next_position). Pochopitelně nejde, abys měl na základě toho 10 různých inputů!
radvis
Profil *
Ta komponenta je u toho inzeratu (výše uveden příklad s novinkama) tzn. ten input se vypíše tolikrát, kolikrát tam je ta novinka. A teď potřebuju docílit toho, že se ke každému inzerátu přiřadí id danho inzerátu (pozice).
radvis
Profil *
u toho inzerátu v cyklu
AM_
Profil
pokud je tohle součástí komponenty, tak v ní budeš řešit jen jeden input, a tedy žádný foreach, ale nastavíš ten jeden input, ne? Vždyť z toho i plyne, že jiná komponenta=jiný formulář.
radvis
Profil *
Jako thole, co tam mám (ty inputy) fungují jak mají, ale je problém je naplnit aktualním id (pozicí)
AM_
Profil
Chápeš, co říkám? Jedna komponenta = jeden formulář = jeden input = JEDEN setValue, a žádný cyklus.
netuším, jak vypadá $inzeraty->selectPosition(), a vůbec si ani nedomyslím, co by to mělo dělat... vypisuješ přeci několik inzerátů, tak jakou pozici mezi nimi vybíráš? jak?
radvis
Profil *
Chci to udělat následnovně: Mám x inzerátu a chci jim nastavit pozici. Z databáze do inputu bych chtěl nastavít "defaultní" hodnotu. Jsem pro i pro lepší nápad:). Díky.
AM_
Profil
ok, a když voláš $inzeraty->SelectPosition(), z čeho vyvěštíš, ke kterému prvku se má přečíst defaultní pozice?
radvis
Profil *
Z ničeho, budu rád za rady jakym zpusobem (nemusí to být tak jak jsem to nastínil) by jsi to udělal ty. $inzeraty->SelcetPosition() vrací:

array(3) { [0]=> object(DibiRow)#105 (2) { ["hl_position"]=> string(1) "1" ["next_position"]=> string(1) "0" } [1]=> object(DibiRow)#108 (2) { ["hl_position"]=> string(1) "2" ["next_position"]=> string(1) "0" } [2]=> object(DibiRow)#109 (2) { ["hl_position"]=> string(1) "0" ["next_position"]=> string(1) "0" } }
AM_
Profil
No vidíš. SelectPosition ti tedy vrací pozice všech prvků ve stránce. Ale v jednom formuláři (komponentě) je jen JEDEN input, takže to je koncepčně dost blbě. Buďto:
- si v každé komponentě zjisti jen pozici daného inputu
- přepiš komponentu tak, aby mohlo být více inzerátů v jedné komponentě, a pak nemáš problém
radvis
Profil *
Vyřešeno, naonec jsem to vypsal ručně a nastavil v šabloně value:). Díky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0