如何获取所有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
相关产品推荐
相关产品推荐

