我正在制作一个演示餐厅菜单订单页面。每个选定的菜单项都被推入一个会话数组(仅存储项目 ID)。然后我显示订单以进行确认。
我通过从数据库中提取行来动态创建和填充具有菜单项详细信息的 div,其中 1 行进入 1 个 div(彼此堆叠)。在每 4 个项目之后,我开始一个新的“列” - 一个浮动在第一个“列”/包含 div 旁边的包含 div,接下来的 4 个项目放在这个包含 div 中。每 12 个项目后,我开始一个新页面(比如开始一个新表)。所以页面上的排列是 3 列,每列 4 行。
我提供了从订单中删除菜单项的选项。我可以从数组中删除项目,但是当页面重新加载时,项目所在的位置有一个空白空间,并且我用于跟踪每 4 行或 12 行的计数系统不会重置,因此添加新项目或删除项目会搞砸我设置的 4 行系统。
有没有办法在每次删除项目时“移动”项目/重新填充 div,以便没有空格并且每个“列”总是最多 4 个项目?
我也可以使用一个实际的表格来显示项目(而不是 div),如果这样可以更容易地“移动”项目。
我是 PHP 新手,所以我编写的代码可能不是最好的方法(我还在学习!)
<section data-state="order">
<div class="pageContainer">
<div class="menuColumn">
<?php
// loop through session order array
foreach ($_SESSION['order'] as $key => $value) {
// get info from db for items in array
$query = "SELECT id, name, price, image FROM tblMenuItems WHERE id = '$value'";
$result = @mysqli_query($connect_db,$query);
while ($row = mysqli_fetch_row($result)) {
// store data in variables
$id = stripslashes($row[0]);
$name = stripslashes($row[1]);
$price = stripslashes($row[2]);
$image = stripslashes($row[3]);
$total += $price;
// after 4 items, start a new 'column'
if ($key % 4 == 0 && $key != 0) {
echo '
</div> <!-- end .menuColumn -->
<div class="menuColumn">
';
}
// after 12 items, start a new section (page)
if ($key % 12 == 0 && $key != 0) {
echo '
</div> <!-- end .menuColumn -->
</div> <!-- end .pageContainer -->
</section> <!-- end section -->
<section data-state="order">
<div class="pageContainer">
<div class="menuColumn">';
}
// display ordered items and info on page
echo '
<form action="#" method="post">
<div class="menuItem">
<img class="imgMenuItem" src="images/'.$image.'" alt="Menu Item">
<h4>'.$name.'</h4>
<h5>$'.$price.'</h5>
<input type="submit" name="btnRemoveItem" class="btnRemoveItem" value="Remove Item">
<input type="hidden" name="remove" value="'.$id.'">
</div> <!-- end .menuItem -->
</form>
<br class="clear">
';
} // end while
} // end foreach
?>
</div> <!-- end .menuColumn -->
</div> <!-- end .pageContainer -->
要从数组中删除一个项目,我在页面顶部有这个:
<?php
if (isset($_POST['btnRemoveItem'])) {
// remove menu item from array (including all multiples)
foreach (array_keys($_SESSION['order'], $_POST['remove']) as $remove) {
unset($_SESSION['order'][$remove]);
}
}
?>