#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, если это то, что вы действительно хотите.