从 OpenCart 按类别检索产品

Retrieve Products By Category from OpenCart

如何编写 PHP 片段来读取 OpenCart 数据库以按类别提取产品并将其显示在 OpenCart 框架之外?因此,例如,我为小部件 A 和 B 构建了这个漂亮的前端网站,但随后有一个名为 /cart 的子目录,其中安装了 OpenCart,在我的前端网站中,我加载了某种 OpenCart 库文件,然后读取数据库以获取产品按类别(A 和 B)。或者,也许您知道直接 SQL 本身的技术?

这个问题与 this one 不同,因为我试图不在 OpenCart 中构建新模板,而是使用 API(或直接访问数据库)来展示 OpenCart 之外的产品OpenCart的应用框架和我自己的应用框架。

我试着在 OpenCart 论坛上问过这个问题,但奇怪的是,mods 没有解释就删除了那个 post,而且从来没有告诉我为什么。所以,我别无选择,只能从代码中寻找答案,因为开发人员文档对这类问题的理解很差。我发现可以通过查看以下文件中的 class 方法或通过在其他 Web 应用程序中加载该 class 文件来访问 OpenCart 的产品目录。 (至于如何加载 class 文件,需要一些工作才能弄清楚——我还不知道。)

在您的 OpenCart 2.x 目录中,查找此文件:

catalog/model/catalog/product.php

您将从 SQL 代码中了解 OpenCart 如何获取产品列表以及如何获取单个产品的产品详细信息。

如果你想要最快的方式,建立链接如

https://your-shop.com.au/index.php?route=product/product&product_id=1579

您可以获得类别“230”的 product_id,如下所示:

SELECT `oc_product`.`product_id`,`name`,`description`,`image` 
FROM `oc_product`,`oc_product_description` 
JOIN `oc_product_to_category` 
    ON `oc_product_to_category`.`product_id` = `oc_product_to_category`.`product_id`  
WHERE
    `oc_product_to_category`.`category_id` = '230' 
    AND `oc_product`.`status` = '1'

如果您希望 SEO 链接使用产品 ID 数组并处理此查询:

SELECT * 
FROM `oc_url_alias` 
WHERE 
    `query` LIKE '%PRODUCT_ID%' 
ORDER BY `url_alias_id` DESC

那你可以做

https://your-shop.com.au/keyword

这里是从商店 0、制造商 17、类别 230 获取产品的另一个查询,以及构建友好 SEO 网址的可能性:

 SELECT `oc_product`.`product_id`,`name`,`description`,`image`,`keyword`FROM `oc_product`
LEFT JOIN `oc_product_to_category`
   ON `oc_product_to_category`.`product_id` = `oc_product`.`product_id`
LEFT JOIN `oc_product_description`
   ON `oc_product_description`.`product_id` = `oc_product`.`product_id`
LEFT JOIN `oc_product_to_store`
   ON `oc_product_to_store`.`product_id` = `oc_product`.`product_id`
LEFT JOIN `oc_url_alias`
   ON (`oc_url_alias`.`query` LIKE  CONCAT('%',`oc_product`.`product_id`,'%'))
WHERE `oc_product_to_category`.`category_id` = '230' AND `oc_product`.`status` = '1' AND `oc_product`.`date_available` <= NOW() AND `oc_product`.`manufacturer_id`='17' AND `oc_product_to_store`.`store_id` = '0'
ORDER BY `oc_product`.`product_id` DESC LIMIT 10