Извлечение определенных значений из массива в Smarty

Я пробовал это часами. Если бы это был просто PHP, я бы уже сделал это, но для этого требуется Smarty 3, поэтому все немного по-другому. Мне трудно получить определенные ключи во множественном числе из массива. Массив выглядит так

Array
(
    [0] => Array
        (
            [id] => 1
            [client] => Jane Doe
            [email] => [email protected]
        )
   [1] => Array
        (
            [id] => 2
            [client] => John Doe
            [email] => [email protected]
        )
   [2] => Array
        (
            [id] => 3
            [client] => Jim Doe
            [email] => [email protected]
        )

Я могу получить доступ к этому, используя PHP, просто отлично, Smarty меня сбивает с толку, файлов два

  • клиенты.php
  • client.tpl ‹- умный

Я назначаю массив в файле .php со следующим

$totalEntries = $results['products']['product'];
$ca->assign('innerArray', $totalEntries);

$results['products']['product'] — это то, что выводит массив, показанный выше.

Теперь в файле .tpl у меня есть следующее

  <select class="form-control" id="sel1">
   {foreach $innerArray as $results} 
    {foreach from=$results.client item=label}
    <option value="{$label}">{$label}</option>
    {/foreach}
  {/foreach}
  </select>

Это работает для вывода в раскрывающийся список

  • Джейн Доу
  • Джон Доу
  • Джим Доу

Я понял эту часть правильно, и я искал по всему Интернету, чтобы понять это. Мой план состоял в том, чтобы ввести в выпадающий список что-то вроде

Однако, когда я пытаюсь это сделать, используя что-то вроде следующего, где я удаляю часть .client из from=

  <select class="form-control" id="sel1">
   {foreach $innerArray as $results} 
    {foreach from=$results item=label}
    <option value="{$label.client}">{$label.client} - {$label.email}</option>
    {/foreach}
  {/foreach}
  </select>

Меня встречает список, который выглядит так

  • 1 - 1
  • J - J
  • j - j
  • 2 - 2
  • J - J
  • j - j
  • 3 - 3
  • J - J
  • j - j

Я понимаю, что это в основном первые буквы и цифры, но я вижу множество примеров в Интернете, показывающих, что я могу взять из массива то, что мне нужно, но когда я пытаюсь $label.client - $label.email Это не сработает.

Что я делаю неправильно?


person Steini Petur    schedule 22.10.2017    source источник
comment
Прочитайте это: stackoverflow.com/ вопросы/19276200/   -  person David Hope    schedule 22.10.2017
comment
Это похоже на мою проблему, но на самом деле это не так, поскольку я использую WHMCS, и я ничего не извлекаю, используя подключение к личной базе данных, я получаю уже созданные WHMCS переменные, такие как $userid и так далее. Однако я пришел к своему решению как раз перед тем, как после нескольких часов работы пришел ответ, но его решение оказалось настолько чище, что я выбросил свое в окно :)   -  person Steini Petur    schedule 22.10.2017


Ответы (2)


Это не так, как вы, но использование {section} подойдет:

<select class="form-control" id="sel1">
{section name=seq loop=$innerArray}
  <option value="{$innerArray[seq].id}">{$innerArray[seq].client} - $innerArray[seq].email}</option>
{/section}
</select>
person sianipard    schedule 22.10.2017
comment
Такое красивое решение.. Большое вам спасибо! Я был почти готов, но мой был таким вшивым.. {foreach $innerArray as $results} {foreach from=$results key=key item=label} {if $key == client} ‹option value={$results.client} - {$results.email}›{$results.client} - {$results.email}‹/option› {/if} {/foreach} {/foreach} - person Steini Petur; 22.10.2017
comment
Ваша версия, такая чистая! мой выдал 100 результатов, пока я не нажал клавишу if, чтобы остановить его при определенном количестве результатов. Принято без рук. - person Steini Petur; 22.10.2017

Smarty 3 позволяет вам использовать «foreach» в стиле php, но поддерживает старый стиль Smarty 2, поэтому вы можете просто сделать следующее:

{foreach $arr as $idx => $person}
  <option value="{$person.client}">{$person.client} - {$person.email}</option>
{/foreach}

Кроме того, согласно руководству Smarty 3:

Цикл {foreach} может делать все то же, что и цикл {section}, и имеет более простой и легкий синтаксис. Обычно это предпочтительнее, чем цикл {section}.

person Juanga Covas    schedule 15.01.2018