vyplňování Hidden fieldu v šabloně vrací prázdnou hodnotu
- Sonic
- Člen | 6
Ahoj,
od rána se snažím rozchodit následující situaci.
PRESENTER
<?php
protected function createComponentVlozPresneForm()
{
$form = new NAppForm;
$form->addHidden('id_produktu');
$form->addText('ks', 'ks', 2)
.....
$form->addImage('save', $this->template->basePath . '/images/basket-add-mini.png')->setAttribute('class', 'default');
$form->onSuccess[] = callback($this, 'vlozPresneFormSubmitted');
return $form;
}
public function vlozPresneFormSubmitted($form)
{
$hodnoty = $form->getValues();
NDebugger::dump($hodnoty);exit;
}
?>
TEMPLATE
{foreach $produkty as $item => $id}
{form vlozPresneForm}
{input id_produktu value => $id->id_produktu}
{input ks cols => 3, value => 1}
{input save}
{/form vlozPresneForm}
{/foreach}
Po odeslání formuláře vypadají uložené hodnoty takto:
<?php
NArrayHash(2) {
id_produktu => ""
ks => "1"
}
?>
Nejsem schopen žádným způsobem zapsat do Hidden fieldu. Prosím o radu,
popř. názornou ukázku ideálně s vysvětlivkou i pro blbce, už jsem
z toho na hlavu.
Používám poslední verzi nette 2.0-beta ze dne 4. 8. 2011.
Ano, díval jsem se už zde , ale bohužel jsem to nerozchodil .
Díky moc, Tonda
- Filip Procházka
- Moderator | 4668
Ajaja :) Prohlédni si sandbox addDynamic, stáhni a registruj.
protected function createComponentVlozPresneForm()
{
$form = new Nette\Application\UI\Form;
$presenter = $this;
$form->addDynamic('products', function (Nette\Forms\Container $container) use ($presenter) {
// sleduj jak zmizí ten hidden
$container->addText('ks', 'ks', 2);
.....
$icon = $this->template->basePath . '/images/basket-add-mini.png';
$save = $container->addImage('save', $icon)
->setAttribute('class', 'default');
$save->onClick[] = callback($presenter, 'vlozPresneFormSubmitted');
});
return $form;
}
V šabloně
{form vlozPresneForm}
{foreach $produkty as $item => $id}
{$form['products'][$id]['ks']->control}
{$form['products'][$id]['save']->control}
{/foreach}
{/form}
zpracování
public function vlozPresneFormSubmitted(Nette\Forms\Controls\SubmitButton $save)
{
$id = $save->parent->name;
$ks = $save->parent['ks']->value;
Nette\Debugging\Debugger::dump(array(
'id' => $id,
'ks' => $ks
)); die();
}
Namespaces si zvládneš sám opravit ne? :)
- radikus
- Člen | 11
Ahoj, no perfektní to moc není. Podle mě tenhle případ zbytečně
komplikuje naprosto standardní dynamické vkládání hiddenu do
formulářů.
Ještě k addDynamic:
Existuje jiný způsob generování inputů než je tento?
<?php
{$form['products'][$id]['ks']->control}
?>
Výše uvedený způsob vygeneruje něco jako
<?php
Nette\ArrayHash Object ( [$id] => Nette\ArrayHash Object ( [ks] => ... ) )
?>
Myslím tím, že moje dynamická hodnota, kterou chci jako value daného
inputu je vlastně index pole inputů.
To zase komplikuje zpracování, protože v moji metodě zpracovávám
arrayHash Object. A potřebuji tedy zjistit hodnotu indexu jednoho prvku,
který v něm je. Přes arrayHash Object to asi nezjistím nijak nebo nevím
jak. Takže musím přetypovat arrayHash Object na array
<?php
$arrayHash = $arrayHash->getIterator()->getArrayCopy();
?>
a teprve potom zjistim index prvku
<?php
array_keys($arrayHash);
?>
UF.
Takže se ptám, existuje jiná varianta vygenerování dynamického inputu tak, aby dynamická hodnota byla jako value inputu?
- Filip Procházka
- Moderator | 4668
Ano, nepoužívej Nette a vrať se k bastlení formulářů v šablonách :)
Můžeš si tu funkcionalitu otočit tak, aby to připomínalo co chceš ty.
$ks = $form->addContainer('ks');
foreach (...
$ks->addText($i, 'ks:');
Ale pomáhat ti v tom nehodlám, protože v tom nevidím přínos.
- radikus
- Člen | 11
HosipLan napsal(a):
Ano, nepoužívej Nette a vrať se k bastlení formulářů v šablonách :)
Můžeš si tu funkcionalitu otočit tak, aby to připomínalo co chceš ty.
$ks = $form->addContainer('ks'); foreach (... $ks->addText($i, 'ks:');
Ale pomáhat ti v tom nehodlám, protože v tom nevidím přínos.
Díky, někdy to vyzkouším až bude čas..
- art
- Člen | 2
:)
No možná chtěl jen radikus vypsat v šabloně pod sebou několik formu a
v každém mít input type=hidden s nějakou hodnotou z databáze. Nic
světoborného. Taky jsem to hledal, také nenalézal, ale nevzdal a byl jsem
odměněn. Takže snad ti radikus postačí místo stahování, registrování,
a škrábání se za pravým uchem pravou nohou tento link viz. úplně dole
#35
https://forum.nette.org/…zeni-smazani
special thx. Bazylek,Tomáše M.
- radikus
- Člen | 11
art napsal(a):
:)
No možná chtěl jen radikus vypsat v šabloně pod sebou několik formu a v každém mít input type=hidden s nějakou hodnotou z databáze. Nic světoborného. Taky jsem to hledal, také nenalézal, ale nevzdal a byl jsem odměněn. Takže snad ti radikus postačí místo stahování, registrování, a škrábání se za pravým uchem pravou nohou tento link viz. úplně dole #35
https://forum.nette.org/…zeni-smazanispecial thx. Bazylek,Tomáše M.
Super, to je to co jsem potřeboval – funguje. Takže řešením je jeden řádek v šabloně.
<?php
{form attachmentList}
{?$control['attachmentList']['attachment_id']->setValue($row['attachment_id'])}
{/form}
?>
Tajně jsem doufal, že to půjde vyřešit čistěji :-).
Určitě doporučuji tohle jednořádkové řešení než dělo na vrabce
uvedeno výše.
Díky.
- Filip Procházka
- Moderator | 4668
Určitě tohle jednořádkové „řešení“ nedoporučuji. Je to neskutečná prasárna. Moje řešení není dělo na vrabce.
- Tomáš Votruba
- Moderator | 1114
Není to tak trochu bug, že právě u hidden value
nefunguje?
<?php
{input text, value => "Funguje"}
{input hidden, value => "Nefunguje"}
?>
- Tomáš Votruba
- Moderator | 1114
Má to nějaký důvod, smysl, účel, vysvětlení?
Proč to není třeba tak, že nefunguje value
u textu a
naopak? :)
- Tomáš Votruba
- Moderator | 1114
bazo napsal(a):
no ja neviem, mne nastavenie hodnoty hidden inputu v sablone normalne funguje
Můžeš uvést formulář v presenteru a šabloně?