You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopware 6:自定义证书列表分页按钮失效问题求助

Shopware 6自定义证书插件分页无响应问题排查与修复

我开发了一个Shopware 6自定义插件,包含certificate实体,用于在前台展示证书列表。已完成列表视图和分页组件开发,但点击分页按钮无响应、无法跳转。以下是问题代码及修复方案:

核心问题分析及修复

1. Controller中偏移量未根据页码动态计算

当前代码固定设置$criteria->setOffset(1);,未结合page参数动态计算偏移量,导致无论点击哪一页,都只会返回第一页的数据,分页跳转后内容无变化。

修复后的CertificateController.php关键代码:

<?php declare(strict_types=1);

namespace Certificate\Storefront\Controller;

use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
use Shopware\Storefront\Controller\StorefrontController;
use Certificate\Service\ReadingData;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

/**
 * @Route(defaults={"_routeScope"={"storefront"}})
 */
class CertificateController extends StorefrontController
{
    private ReadingData $readingData;
    private EntityRepository $certificateReposiitory;

    public function __construct(ReadingData $readingData, EntityRepository $certificateReposiitory)
    {
        $this->readingData = $readingData;
        $this->certificateReposiitory = $certificateReposiitory;
    }

    /**
     * @Route("/certificate", name="frontend.certificate.certificate", methods={"GET"})
     */
    public function index(Request $request, Context $context): Response
    {
        $searchQuery = $request->query->get('search', '');
        $currentPage = (int)$request->query->get('page', 1);
        $limit = 25;
        $offset = ($currentPage - 1) * $limit;

        $criteria = new Criteria();
        $criteria->setOffset($offset);
        $criteria->setLimit($limit);
        $criteria->addSorting(new FieldSorting('name', FieldSorting::ASCENDING));

        $result = $this->certificateReposiitory->search($criteria, $context);
        $total = $result->getTotal();
        $pages = ceil($total / $limit);

        $results = [];
        if (!empty($searchQuery)) {
            $results = $this->readingData->readData($searchQuery, $context, $currentPage, $limit);
        } else {
            $results = $result->getEntities();
        }

        return $this->renderStorefront('@Certificate/storefront/page/certificate.html.twig', [
            'searchQuery' => $searchQuery,
            'results' => $results,
            'pages' => $pages,
            'currentPage' => $currentPage,
            'limit' => $limit,
            'total' => $total
        ]);
    }
}

2. 搜索逻辑未兼容分页参数

当存在搜索查询时,ReadingData::readData方法未接收分页参数,导致搜索结果无法分页,点击分页按钮后仍显示全部搜索结果。

修改ReadingData服务的readData方法:

// Certificate\Service\ReadingData.php
public function readData(string $searchQuery, Context $context, int $currentPage = 1, int $limit = 25)
{
    $criteria = new Criteria();
    $offset = ($currentPage - 1) * $limit;
    $criteria->setOffset($offset);
    $criteria->setLimit($limit);
    // 添加搜索过滤逻辑,示例:
    $criteria->addFilter(new \Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\ContainsFilter('name', $searchQuery));
    
    return $this->certificateRepository->search($criteria, $context)->getEntities();
}

3. Twig模板中路由参数错误

模板中searchRoute设置为不存在的frontend.certificate.index,需替换为实际路由frontend.certificate.certificate,否则分页跳转链接生成错误。

修复后的Twig分页代码:

{% sw_include '@Storefront/storefront/component/pagination.html.twig' with {
    prev_link: currentPage > 1 ? path('frontend.certificate.certificate', {page: currentPage - 1, search: searchQuery}) : null,
    next_link: currentPage < pages ? path('frontend.certificate.certificate', {page: currentPage + 1, search: searchQuery}) : null,
    'currentPage': currentPage,
    'total': total,
    'limit': limit,
    'pages': pages,
    'searchRoute': 'frontend.certificate.certificate',
    'searchQuery': searchQuery
} %}

4. 移除无用参数传递

原代码向Twig传递的criteria变量并非Shopware默认分页组件所需,移除后可避免潜在冲突。

内容的提问来源于stack exchange,提问作者Mahmoud Abdelsattar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:17:56