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

PrestaShop 1.7.8.6如何通过分类ID获取指定分类产品

PrestaShop 1.7.8.6 按指定分类ID取产品的实现方案

Smarty模板层没有可直接调用的、支持按分类ID拉取产品的原生函数,你现在遍历$products输出全站产品,是因为你覆写模块时没有对这个默认模板变量做正确的筛选赋值——模板层只负责渲染已经传入的变量,不适合直接写数据查询逻辑。

正确实现步骤

  • 所有产品查询逻辑放在你覆写的模块/控制器PHP代码中完成,使用PrestaShop原生的Category类内置的getProducts()方法拉取指定分类下的产品,这个方法原生兼容1.7.8.6版本,会自动处理语言关联、店铺权限、产品上下架状态的过滤。
  • PHP层示例代码:
// 传入你需要展示的指定分类ID,实例化分类对象
$targetCategory = new Category(
    $specified_category_id, // 替换成你自己的目标分类ID
    $this->context->language->id,
    $this->context->shop->id
);
// 拉取分类下的产品
$targetProducts = $targetCategory->getProducts(
    $this->context->language->id,
    1, // 页码,取全量可传1后把每页数量设为足够大的值
    100, // 单页产品数量
    null, // 排序字段,默认按后台设置排序传null即可
    null, // 排序方向
    false, // 过滤已下架产品
    true, // 统计产品总数
    true, // 关联读取产品属性等必要信息
    false // 不返回分页相关的附加数组
);
// 把查询结果赋值给模板变量
$this->context->smarty->assign('target_category_products', $targetProducts);
  • 模板层(.tpl文件)修改:不要直接复用全局默认的$products变量,遍历你自己传入的新变量即可:
{foreach from=$target_category_products item=product name=products}
    {$product.name|escape:'htmlall':'UTF-8'}
{/foreach}

注意事项

  • getProducts()方法默认会递归读取目标分类下所有子分类关联的产品,如果只需要展示当前分类直属的产品,可在调用方法时将递归查询参数设为false。
  • 不要直接在Smarty模板中嵌入PHP代码调用类查询数据,会破坏MVC结构,容易出现上下文不匹配、权限校验遗漏的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:27:21