我正在用PHP编写代码来获取数据库中的产品数量,并相应地在页面中列出它们。 这是我到目前为止的代码:
<?php
$numProds=10;
if($numProds%9 == 0) {
$numPages = $numProds/9;
} elseif ($numProds%9 != 0) { // true
$numPages = floor($numProds/9) + 1; // $numPages = 2;
}
for ($i = 1; $i < $numPages+1; $i++) {
?>
<li id="page<?php echo $i; ?>">
<?php if($numProds <= 9) {
for ($i = 1; $i < $numProds+1; $i++) { ?>
<div class="product" id="prodId<?php echo $i; ?>">
<div class="productImage"><img class="image" src="images/sampleImg.png" /></div>
<div class="prodInfo">
<h2><a href="#">Red Strawberry Keyring blabla bla bla</a></h2>
<b>Price: $2.50 |</b> <a href="#">Add to cart</a>
</div>
</div>
<?php
}
} else {
$numProds-=9;
for ($i = 1; $i < 10; $i++) { ?>
<div class="product" id="prodId<?php echo $i; ?>">
<div class="productImage"><img class="image" src="images/sampleImg.png" /></div>
<div class="prodInfo">
<h2><a href="#">Red Strawberry Keyring blabla bla bla</a></h2>
<b>Price: $2.50 |</b> <a href="#">Add to cart</a>
</div>
</div>
<?php }
}?>
</li>
<?php } ?>
我将测试值设置为10,我希望每个页面都包含9个产品
这意味着我需要2页;一页有9个产品,另一页只有1个产品
首先,我计算所需的页数,并创建页面(AKA li
)
其次,在每一页中我都有两个if语句:
1)如果numProds小于或等于9,则使用循环创建确切的产品数量
2)如果numProds大于9(即10),则创建9个产品并取出9个numProds,因此$ numProds将为1,这是应该在第二页上创建的唯一产品数。
此代码存在的问题是,无论numProds如何,所有页面都包含9个产品,因此出现了问题 我经历了几次代码并没有找到任何结果。
另一个问题是,在每个页面中,<li id="page<?php echo $i; ?>">
部分再次从0开始
我知道这是因为循环,但我的问题是,有没有办法以某种方式继续前一个$i
的循环?
答案 0 :(得分:2)
你在另一个内部循环中覆盖主$i
循环中的for
...
使用其他变量,例如$j
。
在每个内循环中,您也开始从$i = 1
循环到$i < 10
- 这就是为什么每页上有9个产品...
试试这段代码:
<?php
$numProds = 10;
if($numProds % 9 == 0) {
$numPages = $numProds/9;
} elseif ($numProds%9 != 0) { // true
$numPages = ceil($numProds/9); // $numPages = 2;
}
for ($i = 1; $i <= $numPages; $i++) {
?>
<li id="page<?php echo $i; ?>">
<?php if($numProds <= 9) {
for ($j = 1; $j <= $numProds; $j++) { ?>
<div class="product" id="prodId<?php echo $j; ?>">
<div class="productImage"><img class="image" src="images/sampleImg.png" /></div>
<div class="prodInfo">
<h2><a href="#">Red Strawberry Keyring blabla bla bla</a></h2>
<b>Price: $2.50 |</b> <a href="#">Add to cart</a>
</div>
</div>
<?php
}
} else {
$numProds-=9;
for ($j = 1; $j < 10; $j++) { ?>
<div class="product" id="prodId<?php echo $j; ?>">
<div class="productImage"><img class="image" src="images/sampleImg.png" /></div>
<div class="prodInfo">
<h2><a href="#">Red Strawberry Keyring blabla bla bla</a></h2>
<b>Price: $2.50 |</b> <a href="#">Add to cart</a>
</div>
</div>
<?php }
}?>
</li>
<?php } ?>
这个shoudl工作......
但在现实世界中,我想你会在某些数组中返回产品,因此这段代码应该更好地满足您的需求:
<?php
$numProds = count($products);
$numPages = ceil($numProds/9);
for ($i = 1; $i <= $numPages; $i++) {
?>
<li id="page<?php echo $i; ?>">
<?php for ($j = 1; $j <= 9; $j++) {
$product = array_shift($products); ?>
<div class="product" id="prodId<?php echo $product['id']; ?>">
<div class="productImage"><img class="image" src="images/<?php echo $product['image']; ?>" /></div>
<div class="prodInfo">
<h2><a href="/path/to/products/<?php echo $product['id']; ?>"><?php echo $product['title']; ?></a></h2>
<b>Price: <?php echo $product['price']; ?> |</b> <a href="/add/to/cart/?p_id=<?php echo $product['id']; ?>">Add to cart</a>
</div>
</div>
<?php } ?>
</li>
<?php } ?>
答案 1 :(得分:1)
你认为这比你需要的要复杂得多,我想;而不是每次将numProds减少9,在页面之间传递值并将其用作偏移量,以跳过您已经看过的产品。
在结果的第一页上,它将为0,因此您可以显示前9个产品。在第二页,它是9,所以你跳过前9个产品并显示下一个9.在第三页,它是18,依此类推。
答案 2 :(得分:1)
嗯,第一个问题是你在外循环和内循环中使用相同的计数器变量。 从您当前的代码开发 - 这应该是解决方案,当然可以有一个更短的解决方案。 循环内的ifs可以完全删除。 但是从你的逻辑发展 - 这是解决方案(未经测试):
<?php
$numProds=10;
if($numProds%9 == 0) {
$numPages = $numProds/9;
} elseif ($numProds%9 != 0) { // true
$numPages = floor($numProds/9) + 1; // $numPages = 2;
}
$count = 1;
for ($i = 1; $i < $numPages+1; $i++) {
?>
<li id="page<?php echo $i; ?>">
<?php if($numProds <= 9) {
for ($j = 1; $j < $numProds+1; $j++) { ?>
<div class="product" id="prodId<?php echo $j; ?>">
<div class="productImage"><img class="image" src="images/sampleImg.png" /></div>
<div class="prodInfo">
<h2><a href="#">Red Strawberry Keyring blabla bla bla</a></h2>
<b>Price: $2.50 |</b> <a href="#">Add to cart</a>
</div>
</div>
<?php
}
} else {
for ($j = $count; $j < ($i-1)*10+10; $j++, $count++) { ?>
<div class="product" id="prodId<?php echo $j; ?>">
<div class="productImage"><img class="image" src="images/sampleImg.png" /></div>
<div class="prodInfo">
<h2><a href="#">Red Strawberry Keyring blabla bla bla</a></h2>
<b>Price: $2.50 |</b> <a href="#">Add to cart</a>
</div>
</div>
<?php }
}
$numProds -= 9; ?>
</li>
<?php } ?>