Перенести php код в шаблонизатор Smarty

141
13 января 2020, 15:30

Есть php код который нужно вывести в smarty, подскажите пожалуйста как это сделать, вот код:

               <option id="marka-avto">Выберите марку авто</option>
                        <?php
                            //Выводим категории и ее ID
                            while ($row=mysql_fetch_assoc($result))
                            {
                            $marka = $row['marka']; 
                            echo "<option value=\"$marka\">$marka</option>";
                            }
                        ?>
                    </select>

Этот код нужно перенести в шаблнизатор.

       {
    $sqlmy->query('SELECT DISTINCT marka FROM filtr_db');       
    $result = mysql_query($sqlmy);
        //Выводим категории и ее ID
        $row=mysql_fetch_assoc($result)
        {
        $marka = $row['marka']; 
        echo "<option value=\"$marka\">$marka</option>";
        }
    }

если делать так то передается просто $marka а не значения из бд

Answer 1

Отделение "представления (хтмл)" от логики (пхп кода) это весьма хорошо, и шаблонизаторы здесь весьма упрощают нам жизнь. Однако не стоит тащить в шаблон все, что плохо лежит. Ваша задача в пхп коде подготовить данные, и передать их в шаблон. Таким образом в пхп коде должна быть написана вся логика по выборке данных из БД, а результат передан в шаблон.

То есть в пхп файле у вас остается?

$query = "select ... ";
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result)) {
    $options[] = $row; 
}
$smarty->assign('options', $options);
$smarty->assign('current', $current); // выбранный пункт

А в tpl-шаблоне вы только выводите уже сформированные данные:

<select id="sel">
    <option id="" value="">Выберите марку авто</option>
    {foreach $options as $o}
    <option value="{$o.marka}" {if $o.marka == $current}selected{/if}>{$o.marka}    </option> 
    {/foreach} 
</select>

если вы будете пытаться в переносить работу с БД в шаблон, то лучше просто не используйте шаблоны.

Также обратите внимание, что более свежие версии пхп (7.х) гораздо эффективнее, а расширение mysql_ устарело еще лет 10 назад, и собственно в пхп 7 его уже и нет. Используйте PDO:

$sth = $pdo->query('select...');
$options = $sth->fetchAll(); 
READ ALSO
Как добавить перевод строки в Android?

Как добавить перевод строки в Android?

Пробовал \n, но пользователю так и приходит:

163
Помогите написать запрос с элокентом

Помогите написать запрос с элокентом

Всем приветПомогите написать элокент Запрос на mysql

147
Yii2 фильтр GridView использовать с creocoder/yii2-taggable?

Yii2 фильтр GridView использовать с creocoder/yii2-taggable?

Установил и привязал теги к "Клиентам" по инструкции creocoder/yii2-taggable, всё работает как нужноКак привязать фильтр к этим тегам в GridView?

132
Как заменить breadcrumb из дочерней темы?

Как заменить breadcrumb из дочерней темы?

В основной теме, не дочерней, в файле functionsphp используется код для вывода хлебных крошек без использования хуков, примерно так:

141