Mehrere dynamische Dropdowns – derselbe Name – 1 Form – selected und Smarty

print147

Grünschnabel
Hallo, liebe Forengemeinde!

Ausgangssituation: Ich möchte Preisinformationen zu einem Artikel im Adminbereich anlegen. Meine Seite arbeitet mit dynamisch generierten Registerkarten (Tabs: z.B. Store DE, Store USA, Store GB). Zu jedem Store sind die Währung und der BruttoPreis zu hinterlegen. Der Tabcontent für alle Stores befindet sich in einem Formular. Wenn das Formular abgeschicht wird, werden die Preisdaten aller Stores abgeschickt und validiert (1 Submit-Button).

Problem 1: Die nachfolgend dargestellte Funktion createCurrenciesDD($name, $selVal) ist ein Dropdown, das Währungen dynamisch aus einem Array generiert und zur Auswahl anbietet. Diese Funktion funktioniert jedoch für meine Ausgangssituation nicht. Die ausgewählten und verschickten Werte sind in den Dropdownboxen nicht markiert. Die Dropdowns sollten denselben Namen haben, müßten jedoch über einen Index unterschieden werden. Wie muß ich die Funktion inkl. Aufruf anpassen?

PHP:
function createCurrenciesDD($name, $selVal)
{
    $arrVal =   array('1', '2', '3');
    $arrText=   array('EUR', 'USD', 'GP');
    $dd =   ("<select name=\"".$name."\" size=\"1\">\n");
    $selected   =   '';
    for($i=0; $i<sizeof($arrVal); $i++)
    {
    $dd .=  ("<option value=\"".$arrVal[$i]."\" ");
    if(empty($_POST[$name]) &&  $selVal == $arrVal[$i])
    {
        $selected = 'selected=\"selected\"';
        $dd.=  $selected;
    }
    if(isset($_POST[$name]) &&  $_POST[$name] == $arrVal[$i])
    {
        $selected = 'selected=\"selected\"';
        $dd .=  $selected;
    }
    $dd .=  (">".$arrText[$i]);
    $dd .=  ("</option>\n\t");
    }
    $dd .=  ("</select>\n");
    return $dd;
}
$selVal = '0';
$currencyDD   =   createCurrenciesDD('curr', $selVal);
$smarty->assign('currencyDD', $currencyDD);

In Smarty sieht die Geschicht dann so aus (Auszug):
Code:
<div id="tabsContainer">
        <ul>
            {section name=co loop=$arrTabStores}
            <li id="tabs{$smarty.section.co.index}">
             <span>{$arrTabStores[co].store_name}</span>
            </li>
            {/section}
        </ul>
 </div> <!—Ende TabsContainer?
<div id="tabsContentContainer">
        <form name="editForm" method="post" action="{$smarty.server.PHP_SELF}" accept-charset="utf-8" />
        {foreach from=$arrTabStores key=idx name=foo item=item}
          <div id="tabsContent{$idx}">
	<table>
Artikel-ID: <input class="readonly" readonly type="text" name="art_id[]" size="3" maxlength="3" value="{if isset($smarty.post.art_id[$idx])} {$smarty.post.art_id[$idx]} {else} {if isset($getArtID)} {$getArtID} {/if} {/if}" />
Currency:{$currencyDD}
Preis brutto: <input class="controlR" type="text" name="price_gross[{$idx}]" size="8" maxlength="10" value="{if isset($smarty.post.price_gross[$idx])} {$smarty.post.price_gross[$idx]} {else} 0.00 {/if} " />
</table>
        </div>
{/foreach}
<input type="submit" class="submit" name="save_article_price_edit" value=”Save" />
</form>

Problem 2: Pro Store-Tab ein Formular inklusive Submit-Button
Wenn ich für jeden Store ein Formular mit jeweils einem Submit-Button kreiere, bleiben die jeweils eingetragenen Werte nach einem Tab-Switch erhalten. Wird jedoch ein Formular abgeschickt, sind die eingetragenen Werte für die übrigen Stores weg.
2a) Wie kann ich das verhindern?
2b) Welche Formularvariante ist für den User besser?

many_dropdowns_one_form.png

Herzlichen Dank im voraus!
print147
 
Mehrere dynamisch generierte DropDowns mit demselben Namen in einem Formular
Ich habe Problem 1 zwischenzeitlich selbst lösen können. Für alle die das gleiche Problem haben, hier die Lösung:

PHP:
$arrVal =   array('1', '2', '3');
$arrText=   array('EUR', 'USD', 'GBP');
//$selVal = Vorschlagswerte beim Aufruf der Seite
$selVal=   array('1', '2', '3');
$smarty->assign('curr_names', $arrText);
$smarty->assign('curr_ids', $arrVal);
$smarty->assign('selVal', $selVal);
$smarty->display('test_many_dropdowns.tpl');

In Smarty an der betreffenden Stelle im Formular eingefügt:
HTML:
<select name="curr[]" size="1">
    {if empty($smarty.post.curr[$idx])}
    {html_options values=$curr_ids output=$curr_names selected=$selVal[$idx]}
    {/if}
    {if isset($smarty.post.curr[$idx])}
    {html_options values=$curr_ids output=$curr_names selected=$smarty.post.curr[$idx]}
    {/if}
</select>
Sowohl beim Aufruf der Seite bzw. Anklicken der Tabs als auch beim Absenden des Formulars werden die vorselektierten Werte bzw. die geposteten Werte markiert.
 

Neue Beiträge

Zurück