Autor | Zpráva | ||
---|---|---|---|
Obr_na Profil * |
#1 · Zasláno: 20. 7. 2015, 16:29:55
Nějak nemůžu přijit na kloub, jak bych mohl vypsat stejné položky a udělat z toho select - option.
V mySQL mám v tabulce atributy ... id, typ, nazev TYP: NAZEV: Délka kabelu 5 metrů Délka kabelu 10 metrů Délka kabelu 2 metry Délka kabelu 1 metr Napájecí zdroj bez napájecího adaptéru Napájecí zdroj adaptér 230V-50Hz/12Vdc Napájecí zdroj bez napájecího adaptéru Napájecí zdroj adaptér 230V-50Hz/12Vdc Jde mně o to, udělat z toho: <p>Délka kabelu: <select name="nazev[]"><option value="">5 metrů</option><option value="">10 metrů</option><option value="">2 metry</option><option value="">1 metr</option></select></p> <p>Napájecí zdroj: <select name="nazev[]"><option value="">bez napájecího adaptéru</option><option value="">adaptér 230V-50Hz/12Vdc</option><option value="">bez napájecího adaptéru</option><option value="">adaptér 230V-50Hz/12Vdc</option></select></p> Moc díky za pomoc. |
||
juriad Profil |
#2 · Zasláno: 20. 7. 2015, 16:34:21
|
||
Obr_na Profil * |
#3 · Zasláno: 20. 7. 2015, 20:27:50
juriad díky moc. Maximálně přišlo vhod a pomohlo. Ještě malý detail ..., když script bude na konci stejného výpisu, jak tam vůbec vložím ukončení "</select></p>"? Napadlo mně vložit počítání, ale nevím kolik stejných tam je. Pak mně napadlo vložit to hned na začátek, kdy dám </select></p> a hned <select> .... první bude špatně ... druhý, třetí OK, ale u posledního by to taky chybělo.
Ještě jednou díkec za radu. |
||
Keeehi Profil |
#4 · Zasláno: 20. 7. 2015, 20:46:28
<p><select> před cyklus
</select></p><p><select> do ifu
</select></p> za cyklus
|
||
Obr_na Profil * |
#5 · Zasláno: 20. 7. 2015, 22:06:56
Keeehi: před cyklus to dát nemohu
<p><select> , protože tam potřebuji vložit už název, který se nachází v IFu :(
|
||
Taps Profil |
#6 · Zasláno: 20. 7. 2015, 22:18:33
Obr_na:
určitě to nějak půjde:-) Tak select musí být mimo cyklus |
||
Alphard_ Profil * |
#7 · Zasláno: 20. 7. 2015, 22:35:45
U složitějších konstrukcí může být přímé použití uvedeného algoritmu zbytečně nepřehledné.
Zmíněný postup lze použít pro předpřipravení asociativního pole (nebo i složitější objektové struktury) a teprve to pak vypisovat. Tím se dá vyhnout strukturám jako [#4], přepíší se na vnořené cykly foreach ($groups as $group) { echo '<p>'. $group->name; echo '<select>'; foreach ($group->options as $option) { echo '<option />'; } echo '</select>'; echo '</p>'; } |
||
Keeehi Profil |
#8 · Zasláno: 20. 7. 2015, 23:28:33
$pamet = null; while ($line = …) { if ($line['typ'] !== $pamet) { if($pamet !== null) { echo "</select></p>"; } $pamet = $line['typ']; echo "<p>$line[typ]: <select name=\"nazev[]\">"; } echo "<option value=\"\">$line[nazev]</option>"; } echo "</select></p>"; |
||
Alphard Profil |
[#8] tohle je určitě možné, ale je to přesně ta nepřehledná kontrukce, kterou jsem měl na mysli. Editor v tom nezobrazí párové tagy, nezkontroluje syntaxi, kdyby to bylo v šabloně, nefungují tam pokročilejší prvky vyžadující přehledný DOM.
Kdysi jsem např. do šablon přepsal generování menu v tomto stylu. Dnes už bych, pokud by nebyl dobrý důvod dělat to jinak, v šablonách použil rekurzivně volané makro {% macro menu_level(levelItem) %} <li> <a href=""><span>{{levelItem.name|e}}</span></a> {% if levelItem.hasSubitems %} <ul> {% for item in ... %} {{menu_level(item)}} {% endfor %} </ul> {% endif %} </li> {% endmacro %} Zde řešený problém by šel snad obejít nějak takto, aby se šetřil procesor, paměť a finální výpis zůstal přehledný. $input = [ ['key' => 'Arabske', 'val' => '1'], ['key' => 'Arabske', 'val' => '2'], ['key' => 'Arabske', 'val' => '3'], ['key' => 'Arabske', 'val' => '4'], ['key' => 'Rimske', 'val' => 'I'], ['key' => 'Rimske', 'val' => 'II'], ['key' => 'Abeceda', 'val' => 'a'], ['key' => 'Abeceda', 'val' => 'b'], ['key' => 'Abeceda', 'val' => 'c'], ]; function iterateGroup($iter) { $line = each($iter); while ($line) { $val = $line[1]; yield $val['key'] => function() use ($val, &$iter, &$line) { yield $val['val']; while (($line = each($iter)) && ($line[1]['key'] === $val['key'])) { yield $line[1]['val']; } }; } } foreach (iterateGroup($input) as $name => $group) { echo $name, ':', PHP_EOL; foreach ($group() as $item) { echo '- ', $item, PHP_EOL; } echo PHP_EOL; } Finální výpis Arabske: - 1 - 2 - 3 - 4 Rimske: - I - II Abeceda: - a - b - c Záměrně jsem při procházení pole všude používal výhradně while a each, aby to bylo nahraditelné za databázove fetch(). Teď jsem si všiml, že když se nezavolá iterace zanořené skupiny, tak se to zacyklí. To není ideální :-), psal jsem to v rychlosti jen jako demonstraci. Jestli to někdo chcete použít, tak to upravte. |
||
Keeehi Profil |
Ano není to hezké. S šablonami bych to napsal asi nějak takto:
{var $it = new ArrayIterator($options);} <p n:while="$it->valid()"> {var $pamet = $it->current()['typ']} {$pamet} <select name="nazev[]" n:inner-while="$it->valid() && $it->current()['typ'] === $pamet"> <option value="">{$it->current()['nazev']}</option> {? $it->next();} </select> </p> Ale já bych se k takovému problému nedostal. Neboť data bych v databázi měl ve dvou tabulkách a ptal bych se zvlášť na kategorie a zvlášť na produkty. |
||
Časová prodleva: 9 let
|
0