Воспроизведение группы опций из 3-х уровней с помощью smarty - PullRequest
2 голосов
/ 25 октября 2011

В недавнем проекте я обнаружил, что они используют 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>

Я бы тоже хотелзнать, как лучше всего сообщить об этом умнице;с массивом из 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

enter image description here enter image description here

1 Ответ

1 голос
/ 25 октября 2011

Посмотрите на {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, я вижу, что правильно вложенные группы отображаются на одном уровне:

opened select

...