#php #smarty
#php #smarty
Вопрос:
В недавнем проекте я обнаружил, что они используют smarty, и клиенту нужна группа опций из 3 уровней. Я никогда не использовал smarty, и мне кажется, что в этом конкретном случае немного сложно сделать это с нуля.
Мне нужно сделать следующее, но с помощью smarty:
<select>
<optgroup label="Level One"></optgroup>
<optgroup label="Level Two" style="padding-left:15px"></optgroup>
<option style="padding-left:30px"> A.B.1 </option>
<optgroup label="Level Two" style="padding-left:15px"></optgroup>
<option style="padding-left:30px"> A.B.2 </option>
<optgroup label="Level One"></optgroup>
<optgroup label="Level Two" style="padding-left:15px"></optgroup>
<option style="padding-left:30px"> A.B.1 </option>
<optgroup label="Level Two" style="padding-left:15px"></optgroup>
<option style="padding-left:30px"> A.B.2 </option>
</select>
Я также хотел бы знать, каков наилучший способ сообщить об этом smarty; с помощью массива из 3 уровней или как (я использую PHP), и если у меня есть опция по умолчанию, как я должен ее указать.
Заранее благодарю вас!
Обновление: код, фактически использующий
$arr['Sport'] = array(6 => 'Golf', 9 => 'Cricket',7 => 'Swim');
$arr['Rest'] = array(3 => 'Sauna',1 => 'Massage', "Test" => array(10 => 'Other', 11 => 'Option'));
$smarty->assign('lookups', $arr);
$smarty->assign('fav', 7);
На самом деле это дает мне только 2 уровня.
Обновление 2
Ответ №1:
Взгляните на {html_options} .
Редактировать
Шаблон Smarty3
{$options = [
"Level1 - 1st" => [
"Level2 - 1st" => "Level2 - 1st",
"Level2 - 2nd" => ["Hello", "World"]
],
"Level1 - 2nd" => [
"Level2 - 3rd" => "Level2 - 3rd",
"Level2 - 4th" => ["Hello" => "Hello", "other", "World"]
]
]}
<select>{html_options options=$options}</select>
генерирует следующий HTML-код (с отступом вручную)
<select>
<optgroup label="Level1 - 1st">
<option value="Level2 - 1st">Level2 - 1st</option>
<optgroup label="Level2 - 2nd">
<option value="0">Hello</option>
<option value="1">World</option>
</optgroup>
</optgroup>
<optgroup label="Level1 - 2nd">
<option value="Level2 - 3rd">Level2 - 3rd</option>
<optgroup label="Level2 - 4th">
<option value="Hello">Hello</option>
<option value="0">other</option>
<option value="1">World</option>
</optgroup>
</optgroup>
</select>
Что выглядит примерно так, как и следовало ожидать. Но, просматривая это в Firefox 7, я вижу, что правильно вложенные группы отображаются на одном уровне:
Комментарии:
1. хороший совет, но я не могу получить 3 уровня с этим. Я обновил свой код. Заранее благодарю вас!
2. Я только что обновил сообщение. {html_options} отображает вложенные <optgroup>s — ваш браузер не отображает их так, как вы ожидаете.
3. Я обновил пример моего первого отрисованного кода, а затем тот, который вы опубликовали. Что-то не получается; (
4. {html_options} не будет принимать никаких подобных аргументов, нет. Вам придется создать это самостоятельно, используя {function} .