Použití kontejnerů – nastavení name na neco[]
- chr1s
- Člen | 15
Zdravím,
řeším jeden (asi jednoduchý problém), ale nevím si rady. Potřebuji vyrobit a vykreslit formulář – ukázka . Problém je v tom, že bych potřeboval mít jména inputů zhruba v takovémto tvaru (nebo podobném):
name=product1[code]
name=product1[count]
name=product2[code]
name=product2[count]
a takto to mít až do desíti (jako na obrázku), aby se mi to pak lépe
zpracovávalo.
Zkoušel jsem nějaké pokusy dle tohoto
postupu , nicméně se mi nedaří.
Sepsal jsem toto:
$products = $form->addContainer('products');
for ($i = 1; $i <= 10; $i++) {
$cntProducts = $products->addContainer($i);
$cntProducts->addText('code', 'Kód produktu')
->addCondition(Form::FILLED)
->addRule(Form::INTEGER, 'Kód produktu musí být číslo!');
}
To mi sice vygeneruje atributy name ve tvaru products[1][code], ale už nevím jak k tomu přidat ještě těch 10 polí s množstvím. Když toho for cyklu dám kód, který vytváří inputy pro množství, tak dostanu hlášku, že kontejner s daným jménem již existuje (což je logické) a když zase změním název kontejneru třeba na count$i, tak netuším jak to celé v šabloně manuálně přes jeden foreach vykreslit.
Díky za odpověď.
- hAssassin
- Člen | 293
@chr1s > Nevim ale podle mě musí tohle fungovat (netestováno):
for ($i = 1; $i <= 10; $i++) {
$cntProducts = $products->addContainer($i);
$cntProducts->addText('code', 'Kód produktu')
->addCondition(Form::FILLED)
->addRule(Form::INTEGER, 'Kód produktu musí být číslo!');
$cntProducts->addText('count', 'Množství')
->addCondition(Form::FILLED)
->addRule(Form::INTEGER, 'Množství musí být číslo!');
}
- chr1s
- Člen | 15
Ještě jeden doplňující dotaz – následujícím kódem daný formulář vykresluju:
{foreach $form["products"]->components as $product}
<tr>
<td>{$product[code]->control size => 10}</td>
<td>{$product[count]->control}</td>
</tr>
{/foreach}
Jenže při takto napsaném vykreslování mi to neakceptuje atributy jednotlivých inputů viz atribut size. Netušíte někdo jak na to?
- petr.pavel
- Člen | 535
Ještě dodatek:
Ten formulář vykresluješ ručně jen kvůli nastavení velikosti?
Jestli bys radši používal výchozí renderer, tak můžeš šířku
nastavovat přes CSS. Nebo můžeš size nastavit už v továrničce:
$fieldCode = $cntProducts->addText('code', 'Kód produktu');
$fieldCode->getControlPrototype()->size(10);
$fieldCode->addCondition(Form::FILLED)
->addRule(Form::INTEGER, 'Kód produktu musí být číslo!');
Editoval petr.pavel (11. 9. 2011 23:51)