Autor | Zpráva | ||
---|---|---|---|
radvis Profil * |
#1 · Zasláno: 16. 6. 2010, 08:53:31
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 |
#2 · Zasláno: 16. 6. 2010, 19:17:57
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 * |
#3 · Zasláno: 16. 6. 2010, 23:24:50
$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 |
#4 · Zasláno: 17. 6. 2010, 08:37:40
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 * |
#5 · Zasláno: 17. 6. 2010, 08:42:08
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 * |
#6 · Zasláno: 17. 6. 2010, 08:45:34
u toho inzerátu v cyklu
|
||
AM_ Profil |
#7 · Zasláno: 17. 6. 2010, 08:45:35
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 * |
#8 · Zasláno: 17. 6. 2010, 08:46:52
Jako thole, co tam mám (ty inputy) fungují jak mají, ale je problém je naplnit aktualním id (pozicí)
|
||
AM_ Profil |
#9 · Zasláno: 17. 6. 2010, 08:58:43
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 * |
#10 · Zasláno: 17. 6. 2010, 09:08:22
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 |
#11 · Zasláno: 17. 6. 2010, 10:33:15
ok, a když voláš $inzeraty->SelectPosition(), z čeho vyvěštíš, ke kterému prvku se má přečíst defaultní pozice?
|
||
radvis Profil * |
#12 · Zasláno: 17. 6. 2010, 14:47:14
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 |
#13 · Zasláno: 17. 6. 2010, 15:57:51
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 * |
#14 · Zasláno: 18. 6. 2010, 18:08:20
Vyřešeno, naonec jsem to vypsal ručně a nastavil v šabloně value:). Díky.
|
||
Časová prodleva: 14 let
|
0