我一直坚持在我的PHP MVC应用程序中实现分页。 这就是我展示产品的方法,现在我完全陷入了困境,因为我不知道如何在我的代码中实现分页。 我希望有人向我展示我的代码示例,以便将来我可以学习;
我的控制器-> Products.php
<?php
/**
*
*/
class Products extends Controller
{
public function __construct()
{
if(!isLoggedIn()){
redirect('users/login');
}
$this->productModel = $this->model('Product');
}
public function index(){
$products = $this->productModel->getProducts();
$data=[
'products' => $products
];
$this->view('products/index', $data);
}
}
我的模型-> Product.php
<?php
/**
*
*/
class Product
{
public function __construct()
{
$this->db = new Database();
# code...
}
public function getProducts(){
$this->db->query('SELECT *,
products.id as productId,
users.id as userId,
products.productCreated as productCreated,
users.created_at as userCreated
FROM products
INNER JOIN users
ON products.user_id = users.id
ORDER BY products.productCreated DESC
');
$results = $this->db->resultSet();
return $results;
}
}
和我的视图Product-> Index.php
<?php require APPROOT . '/views/inc/header.php'; ?>
<style type="text/css">
#abc {
line-height: 2px;
}
#productName {
font-size: 14px;
font-weight: bold;
line-height: 10px;
padding-top: 6px;
}
#cardid {
margin-top: 15px;
}
#buybtn {
width: 100px;
height: 30px;
margin-top: -10px;
padding: 2px;
}
</style>
<div class="container-fluid">
<h1> PRODUCTS</h1>
<div class="row">
<div class="col-lg-10">
<?php foreach ($data['products'] as $product) : ?>
<div class="card" style="width: 150px; text-align:center;display:inline-block;" id="cardid">
<h4 class="card-title text-center" id="productName"><?php echo $product->productName; ?></h4>
<img class="card-img-top" src="img/img_avatar1.png" alt="Card image" style="width:100%">
<div class="card-block">
<p class="card-text">Some example text some example text. John Doe is an architect and engineer</p>
<p class="card-text" id="abc" style="color:red">125</p>
<a href="#" class="btn btn-primary stretched-link" id="buybtn">Buy now</a>
</div>
</div>
<?php endforeach; ?>
</div>
<div class="col-lg-2 jumbotron">
Container Right
</div>
</div>
</div>
<?php require APPROOT . '/views/inc/footer.php'; ?>
我看到了很多有关分页的主题,但是我不知道如何在这里实现它,因此我每页只能显示10种产品...
答案 0 :(得分:0)
您可以做的是向getProducts($args)
添加过滤器。您可以过滤产品名称,价格范围等。但是,您也可以选择发送$args['page']
和$args['items_per_page']
。然后,您可以计算SQL偏移量和限制。不过请检查类型,并提供默认值,并始终使用mysqli::real_escape_string
之类的功能来防御XSS攻击。
这样,您可以计算SQL LIMIT和OFFSET:
$limit = $items_per_page;
$offset = $items_per_page * $page;
您可以在链接中添加参数:
<a href="{YOUR_URL}?page=2&items_per_page=11>Previous Page</a>
<a href="{YOUR_URL}?page=4&items_per_page=11>Next Page</a>
然后您可以使用$ _GET检索这些并将它们发送到您的getProducts($args)
方法。