Foreach ve formuláři a získání hodnot

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Draffix
Člen | 146
+
0
-

Zdravím, narazil jsem na jeden menší problém a potřeboval bych poradit. Mám seznam produktů v objednávce, které vypisuji:

{foreach $orderEditProducts as $o}
<tr>
	<td><strong>{$o->prod_name}</strong></td>
	<td><input n:input="quantity" class="input-mini" type="number" value="{$o->quantity}"></td>
	<td style="text-align: right;"><a class="btn" n:href="removeProductIntoOrder! $o->prod_id, $order->ord_id"><i class="icon-trash"></i> Odebrat</a></td>
</tr>
{/foreach}

Jedná se ale o formulář, ve kterém je možné upravit množství. Když má ale někdo v objednávce více produktů, tak jak mám získat to zadané množství (od každého produktu)? Dopředu nevím kolik těch produktů bude. A také nevím jak to předat do presenteru pro zpracování. Pro jeden produkt vím, to není problém, ale u dynamického počtu produktů už nevím, jde to nějak vyřešit?

vvoody
Člen | 910
+
0
-

Každý riadok by mal byť samostatný formulár. Dynamický počet takých istých formulárov zabezpečí multiplier

JakubTN
Bronze Partner | 49
+
0
-

V presenteri si vytvoris ten formular na zmenu mnozstva a v nom mat nieco taketo

$form = new Form();

//...

$quantity = $form->addContainer('quantity');

foreach($orderEditProducts as $key=>$value)
{
	$quantity->addText($key)
	         ->setType('number');
}

//...

V sablone potom

{form quantityForm}
{foreach $orderEditProducts as $o}
<tr>
    <td><strong>{$o->prod_name}</strong></td>
    <td>{$form['quantity'][$o->id]->getControl()}</td>
    <td style="text-align: right;"><a class="btn" n:href="removeProductIntoOrder! $o->prod_id, $order->ord_id"><i class="icon-trash"></i> Odebrat</a></td>
</tr>
{/foreach}
{/form quantityForm}

Editoval JakubTN (16. 1. 2013 22:05)

Draffix
Člen | 146
+
0
-

@vvoody Jenže je problém, že já to já to tak nemůžu udělat. Dělám s Twitter Bootstrap a protože je to v modálním okně, tak to musím obalit celé:

{form editProductIntoOrderForm}
<div id="items-form-modal" class="modal hide">
    <div class="modal-header">
        <a class="close" data-dismiss="modal">×</a>
        <h3>Upravit položky objednávky</h3>
    </div>
    <div class="modal-body">
        <table class="table order-table">
            <thead>
                <tr>
                    <td style="border-bottom: 1px solid #ddd;" width="250px"><strong>Název</strong></td>
                    <td style="border-bottom: 1px solid #ddd;"><strong>Množství</strong></td>
                    <td style="border-bottom: 1px solid #ddd;"><strong></strong></td>
                </tr>
            </thead>
            <tbody>
                {foreach $orderEditProducts as $o}
                <tr>
                    <td><strong>{$o->prod_name}</strong></td>
                    <td><input n:input="quantity" class="input-mini" type="number" value="{$o->quantity}"></td>
                    <td style="text-align: right;"><a class="btn" n:href="removeProductIntoOrder! $o->prod_id, $order->ord_id"><i class="icon-trash"></i> Odebrat</a></td>
                </tr>
                {/foreach}
            </tbody>
        </table>
    </div>

    <div class="modal-footer">
        <input type="submit" class="btn btn-primary btn-large" value="Uložit">
        <a href="#" class="btn" data-dismiss="modal">Storno</a>
    </div>
</div>
{/form}

Editoval Draffix (16. 1. 2013 22:08)

Draffix
Člen | 146
+
0
-

@JakubTN Super, díky moc! Upravil jsem továrničku takto a funguje to

public function createComponentEditProductIntoOrderForm() {
    $form = new UI\Form();
    $quantity = $form->addContainer('quantity');
    foreach ($this->order->fetchAllOrdersWithID($this->getParameter('id')) as $val) {
        $quantity->addText($val->prod_id)
                ->setType('number')
                ->setAttribute('class', 'input-mini')
                ->setValue($val->quantity);
    }
    $form->onSuccess[] = callback($this, 'editProductIntoOrderFormSubmitted');
    return $form;
}