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;
    }