gpt4 book ai didi

php - Opencart地址页分页

转载 作者:搜寻专家 更新时间:2023-10-31 20:39:49 25 4
gpt4 key购买 nike

我试图将 opencart 地址列表分解为每页 20 个,但它仍然显示第 1 页和第 2 页上的所有列表。请看一下代码,我一定是做错了什么。

分页看起来不错

1 2 > >|
Showing 1 to 20 of 31 (2 Pages)

protected function getList() 中 Controller 帐户 address.php 页面上的代码(我也尝试了 public function index()) .

if (isset($this->request->get['page'])) {
$page = $this->request->get['page'];
} else {
$page = 1;
}

$data = array(
'start' => ($page - 1) * 20,
'limit' => 20
);

$address_total = $this->model_account_address->getTotalAddresses($data);
$results = $this->model_account_address->getAddresses();

$pagination = new Pagination();
$pagination->total = $address_total;
$pagination->page = $page;
$pagination->limit = 20;
$pagination->text = $this->language->get('text_pagination');
$pagination->url = $this->url->link('account/address', 'page={page}', 'SSL');

$this->data['pagination'] = $pagination->render();

和模型账户上的代码address.php

public function getDetails($data = array()) {
$sql = $this->db->query("SELECT * FROM `" . DB_PREFIX . "address` WHERE customer_id = '" . (int)$this->customer->getId() . "'");

if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}

if ($data['limit'] < 1) {
$data['limit'] = 20;
}

$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
}

$query = $this->db->query($sql);

$details = $query->rows;

return $details;
}

这是在 View address_list.tpl

<?php echo $pagination; ?>

请指教。

最佳答案

问题出在您的模型中。在填写 LIMITOFFSET 之前运行查询,将模型更改为:

public function getDetails($data = array()) {
$sql = 'SELECT * FROM `' . DB_PREFIX . 'address` WHERE customer_id = ' . (int)$this->customer->getId();

if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}

if ($data['limit'] < 1) {
$data['limit'] = 20;
}

$sql .= ' LIMIT ' . (int)$data['start'] . ',' . (int)$data['limit'];
}

$query = $this->db->query($sql);

return $query->rows;
}

应该这样做。

实际上,在您第一次调用 $sql = $this->db->query("...");(模型方法的第一行)之后,$sql 变量不包含 SQL 查询,但 OpenCart DB 资源对象 包含属性 row(第一行)、rows(所有检索到的行)和 num_rows(检索到的行数)。因此你的第二次调用 $query = $this->db->query($sql); 应该给你一个错误 - 如果它没有显示可能你已经隐藏了 PHP 错误。检查您的 PHP 错误日志(或 OpenCart 的错误日志)以找出答案。

编辑:

然后在你的 Controller 中你有这个逻辑错误:你正在为 getTotalAddresses($data) 设置 LIMITOFFSET 这应该计算地址的 ALL - 但这将始终返回数字 20。另一方面,应该获取这些参数的方法却没有获取它们:getAddresses();

因此请修复您的 Controller 以执行此操作:

$address_total = $this->model_account_address->getTotalAddresses();
// no $data here as we want all the addresses to be counted ----^^
$results = $this->model_account_address->getAddresses($data);
// we pass $data here so the LIMIT is applied --------^^^^^

还有一件事:在您的 Controller 中您调用了 getAddresses 但在您的模型中定义了 getDetails。 .. 您确定不想将 getDetails 重命名为 getAddresses 吗?

关于php - Opencart地址页分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25322171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com