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

如何获取所有PrestaShop商品的名称、描述与价格?求代码示例

获取PrestaShop所有商品的名称、描述与价格的实现方法

嘿,我来帮你搞定这个需求!在PrestaShop里获取所有商品的核心信息,有两种比较常用的实现方式,下面给你详细的代码示例和说明:

方法一:使用PrestaShop官方ObjectModel API(推荐)

这种方式完全遵循PrestaShop的开发规范,兼容性更好,还能自动处理多语言、价格转换这些细节,是官方推荐的做法。你可以在PrestaShop的根目录下新建一个脚本文件(比如get_products.php),然后写入以下代码:

<?php
// 初始化PrestaShop运行环境
require_once(dirname(__FILE__).'/config/config.inc.php');
require_once(dirname(__FILE__).'/init.php');

// 获取所有已启用商品的ID列表
$product_ids = Product::getProductsId();

// 用来存储最终商品数据的数组
$products_data = [];

foreach ($product_ids as $id_product) {
    // 实例化商品对象,指定加载对应语言的内容
    $product = new Product($id_product, true, Context::getContext()->language->id);
    
    // 获取商品的含税价格(第二个参数改为false即可获取不含税价格)
    $price = Product::getPriceStatic($id_product, true);
    
    // 整理需要的字段
    $products_data[] = [
        '商品ID' => $id_product,
        '商品名称' => $product->name,
        '简短描述' => $product->description_short,
        '详细描述' => $product->description,
        '含税价格' => number_format($price, 2, '.', '')
    ];
}

// 以JSON格式输出结果,方便后续处理(也可以改成写入CSV文件等格式)
header('Content-Type: application/json');
echo json_encode($products_data, JSON_PRETTY_PRINT);
?>

代码说明:

  • 开头的两行代码是初始化PrestaShop的环境,这样才能调用官方提供的类和方法。
  • Product::getProductsId()默认返回所有已启用商品的ID,如果需要包含禁用商品,可以传递参数false,即Product::getProductsId(false)。
  • 实例化Product对象时,第三个参数指定了当前语言ID,确保获取的名称和描述是对应语言的内容。
  • Product::getPriceStatic()会自动处理价格的折扣、促销等逻辑,比直接查数据库更准确。

方法二:直接查询数据库(快速场景适用)

如果你需要更高效的获取方式,也可以直接查询PrestaShop的数据库,但要注意不同版本的表结构可能有细微差异(比如数据库表前缀,默认是ps_,你的店铺可能不一样)。同样在根目录新建脚本文件,代码如下:

<?php
// 初始化PrestaShop数据库连接
require_once(dirname(__FILE__).'/config/config.inc.php');

// 获取数据库表前缀(自动适配你的店铺配置)
$table_prefix = _DB_PREFIX_;

// 构建查询语句,关联商品表和多语言描述表
$query = "
SELECT 
    p.id_product AS '商品ID',
    pl.name AS '商品名称',
    pl.description_short AS '简短描述',
    pl.description AS '详细描述',
    ROUND(p.price * (1 + (p.tax_rate / 100)), 2) AS '含税价格'
FROM {$table_prefix}product p
LEFT JOIN {$table_prefix}product_lang pl 
    ON p.id_product = pl.id_product 
    AND pl.id_lang = ".(int)Context::getContext()->language->id."
WHERE p.active = 1  -- 只查询已启用商品,去掉则包含禁用商品
ORDER BY p.id_product ASC
";

// 执行查询并获取结果
$products_result = Db::getInstance()->executeS($query);

// 输出JSON格式的结果
header('Content-Type: application/json');
echo json_encode($products_result, JSON_PRETTY_PRINT);
?>

代码说明:

  • 这里用了PrestaShop自带的Db类来执行查询,无需手动配置数据库连接信息。
  • 通过关联product和product_lang表,获取对应语言的商品描述信息。
  • 价格计算是通过基础价格乘以税率得到含税价格,如果你需要不含税价格,直接取p.price即可。

一些重要注意事项

  • 脚本执行完成后,一定要删除或者修改文件权限,避免被恶意访问带来安全风险。
  • 如果你的店铺商品数量非常多(比如上万件),建议采用分页查询的方式(比如在循环或SQL中加入LIMIT),避免内存溢出。
  • 多语言店铺中,你可以手动指定语言ID(比如1代表英文,2代表中文,根据你的店铺设置调整),替换Context::getContext()->language->id即可。
  • 如果需要包含促销价、会员价等特殊价格,建议使用方法一的Product::getPriceStatic(),它会自动处理这些逻辑;方法二的话需要额外关联specific_price表进行计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:04:23