Как я могу поместить что-то подобное в шаблон Smarty?

#php #smarty #templating

#php #smarty #создание шаблонов

Вопрос:

Я пытаюсь преобразовать ранее существующий сайт, в котором были смешаны html и php, в сайт на основе шаблона Smarty. Я никогда раньше не использовал Smarty, так что это оказывается для меня очень сложным. Я понимаю, что вы можете назначить переменную следующим образом:

 $smarty->assign('number_of_items_in_cart', $number_of_items_in_cart);
  

и использовать это в файле tpl следующим образом:

 {$number_of_items_in_cart}
  

но как насчет более сложных вещей, таких как этот блок кода, который у меня был на старом сайте:

 $query = mysql_query(" SELECT * FROM products WHERE id = '$pid' ");

if (mysql_num_rows($query) == 1) {

    while ($row = mysql_fetch_array($query)) {
        extract($row);
        echo "<h2>$name</h2>";
        echo "<img src='images/product_images/$image' alt='' width='100' />";
        echo $description;
        echo '<p>'.money($price).'</p>';
        echo "<input type='text' value='1' class='qty-$id' />";
        echo "<a href='javascript:void(0)' onClick="add_cart('$id')">Add to Cart</a>";
    }

} else {
    redirect('404.php');
}
  

Как я могу работать с этим в шаблоне Smarty, поскольку вывод выполняется в цикле while?

Ответ №1:

Вместо того, чтобы повторять это, вы можете добавить это в строковую переменную, а затем передать в smarty:

 $string = "";
while ($row = mysql_fetch_array($query)) {
        extract($row);
        $string .= "<h2>$name</h2>";
        $string .=  "<img src='images/product_images/$image' alt='' width='100' />";
        $string .=  $description;
        $string .=  '<p>'.money($price).'</p>';
        $string .=  "<input type='text' value='1' class='qty-$id' />";
        $string .=  "<a href='javascript:void(0)' onClick="add_cart('$id')">Add to Cart</a>";
    }
  

Теперь вы можете передать это в smarty

 $smarty->assign('place_holder', $string);
  

Я надеюсь, это то, что вы ищете

Комментарии:

1. это работает, но в целом я думаю, что создание шаблонов глупо. Мне просто нужно изучить это для работы, возможно, мое мнение изменится позже, когда я узнаю больше, но на первый взгляд это просто кажется ненужным и отнимающим много времени.

2. я понимаю вас, но когда вы хотите разделить свой код, а не смешивать html и php, это имеет смысл. например, допустим, вы хотите, чтобы дизайнер и разработчик работали вместе, дизайнер будет перегружен всем кодом и ему будет трудно вносить малейшие изменения. но с помощью шаблонов можно легко разделить php и html, поэтому одному не нужно знать, как работает другой

Ответ №2:

Вы можете использовать foreach встроенную функцию для перебора массива, содержащего результаты вашего запроса.
Вы также могли бы использовать foreachelse для отображения альтернативного сообщения (хотя в этом случае вы перенаправляете).

Смотрите пример 7.9 в http://www.smarty.net/docsv2/en/language.функция.foreach .

Редактировать: также есть функция while, если это то, что вы действительно хотите.