0

我正在用 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 个产品。
首先,我计算所需的页面数,并创建页面(AKAli的)。
其次,在每个页面中,我有两个 if 语句:
1) 如果 numProds 小于或等于 9,则使用循环创建确切数量的产品。
2) 如果 numProds 大于 9(即 10),则创建 9 个产品并从 numProds 中取出 9 个,因此 $numProds 将为 1,这是应该在第二页上创建的唯一产品数。

这段代码的问题是所有页面都包含 9 个产品,而不管 numProds,所以有问题。
我浏览了几次代码,一无所获。

另一个问题是,在每一页中,该<li id="page<?php echo $i; ?>">部分再次从 0 开始。
我知道这是因为循环,但我的问题是,有没有办法以某种方式从前一个循环继续$i

4

3 回答 3

2

您在另一个内部循环中覆盖$i来自主for循环的...使用另一个变量,例如$j。在每个内部循环中,您还开始循环 from $i = 1to $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 } ?>

这应该工作...

但在现实世界中,我想您将在某个数组中返回产品,因此此代码应该更适合您的需求:

        <?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 } ?>
于 2012-06-18T15:17:00.720 回答
1

我认为,您使这比您需要的要复杂一些;不是每次将 numProds 减少 9,而是在页面之间传递值并将其用作偏移量,以跳过您已经看过的产品。

在结果的第一页上,它将为 0,因此您可以显示前 9 个产品。在第二页上是 9,因此您跳过前 9 个产品并显示下一个 9。在第三页上,它是 18,依此类推。

于 2012-06-18T15:11:29.827 回答
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 } ?>
于 2012-06-18T15:19:17.050 回答