Содержимое тележки должно отображаться вне зависимости от страницы, на которой был произведен щелчок на кнопке Посмотреть корзину. В общем случае, как только посетитель щелкнет на Посмотреть корзину, единственной строкой кода, которая выполняется, будет следующая:
if($_SESSION['cart']&&array_count_values($_SESSION['cart']))
display_cart($_SESSION['cart']);
else
{
echo '<p>Ваша тележка пуста</p>';
}
Из этого видно, что если тележка не пуста, вызывается функция display_cart(). Если же тележка пуста, кнопка Посмотреть тележку, посетителю не доступна.
Функция display_cart() всего лишь выводит содержимое тележки в читабельном HTML-формате. Код функции содержится в библиотеке output_fns.php. Хотя это функция отображения HTML-содержимого, она достаточно сложна и заслуживает отдельного рассмотрения.
Функция display_cart() —вывод содержимого покупательской тележки
<?php
function display_cart($cart, $change = true, $images = 1)
{
// Выводит элементы, находящиеся в покупательской тележке.
// Дополнительно получает параметр $change, разрешающий (true)
// или запрещающий (false) внесение изменений.
// Дополнительно получает параметр $images, разрешающий (true)
// или запрещающий (false) вывод изображений товаров.
echo '<table border="0" width="100%" cellspacing="0">
<form action="show_cart.php" method="post">
<tr><th colspan="'. (1+$images) .'" bgcolor="#cccccc">Товар</th>
<th bgcolor="#cccccc">Цена</th><th bgcolor="#cccccc">Количество</th>
<th bgcolor="#cccccc">Всего</th></tr>';
// Отобразить каждый элемент в виде строки таблицы
foreach ($cart as $isbn => $qty)
{
$book = get_book_details($isbn);
echo '<tr>';
if($images ==true)
{
echo '<td align="left">';
if (file_exists("images/$isbn.jpg"))
{
$size = GetImageSize('images/'.$isbn.'.jpg');
if($size[0]>0 && $size[1]>0)
{
echo '<img src="images/'.$isbn.'.jpg" border=0 ';
echo 'width = '. $size[0]/3 .' height = ' .$size[1]/3 . '>';
}
}
else
echo ' ';
echo '</td>';
}
echo '<td align="left">';
echo '<a href="show_book.php?isbn='.$isbn.'">'.$book['title'].
'</a> автор '.$book['author'];
echo '</td><td align="center">'.number_format
($book['price'], 2).' руб';echo '</td><td align="center">';
// Если разрешены изменения, представить количества в текстовых полях ввода
if ($change == true)
echo "<input type='text' name=\"$isbn\" value=\"$qty\" size=\"3\">";
else
echo $qty;
echo '</td><td align="center">'.number_format($book['price']*$qty,2)." руб</td></tr>\n";
}
// Вывести строку общего количества и суммы заказа
echo "<tr>
<th colspan=". (2+$images) ." bgcolor=\"#cccccc\"> </td>
<th align = \"center\" bgcolor=\"#cccccc\">
".$_SESSION['items']."
</th>
<th align = center bgcolor=\"#cccccc\">".number_format($_SESSION['total_price'], 2).
' руб</th>
</tr>';
// Вывести кнопку сохранения изменений
if($change == true)
{
echo '<tr>
<td colspan="'. (2+$images) .'"> </td>
<td align="center">
<input type="hidden" name="save" value="true">
<input type="image" src="images/save-changes.png"
border="0" alt="Сохранить изменения">
</td>
<td> </td>
</tr>';
}
echo '</form></table>';
}
?>
Рассмотрим базовые алгоритмические конструкции, которые реализует данная функция:
- Циклический обход каждого элемента тележки и передача его номера ISBN в функцию get_book_details(), что позволяет получить итоговую информацию по каждой книге.
- Для каждой книги выводится изображение, если оно существует. Здесь при помощи HTML-дескрипторов высоты и ширины изображение немного уменьшается в размерах. В результате изображения слегка искажаются, однако они достаточно малы, чтобы это не особенно бросалось в глаза и создавало проблемы.
- Преобразование каждой записи тележки в ссылку на соответствующую книгу, то есть на вызов сценария show_book.php с передачей ему в качестве параметра номера ISBN.
- Если функция вызывается, тогда параметр $chande получает значение true (либо вообще не получает значения, так как true принимается по умолчанию), для представления заказанных количеств выводятся текстовые поля ввода. Вместе они образуют форму, в которую входит и кнопка Сохранить изменения. При повторном вызове функции display_cart() после осуществления окончательного расчета нельзя допустить, чтобы пользователь смог еще раз изменить свой заказ.
Эта функция не содержит ничего особо сложного, тем не менее, выполняет множество операций. Именно поэтому стоит очень внимательно изучить ее код.
Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться