0

我目前安装了 Magento 1.7 CE。我想使用 Magento 产品模型,但我想从外部 API 获取产品价格(我们的定价存在于 Magento 之外)。

我知道我可以使用 Magento API 从我们现有的数据库中导入所有价格,但是我们的价格经常变化,然后我们需要维护两个数据库。

基本上我想知道 Magento 中是否有一些东西我可以覆盖来调用我们的 API 而不是 DB?

我知道如何覆盖 Magento 核心(创建您自己的模块并使用正确的重写标签设置您的 config.xml)。我可以通过调用我们的 API 覆盖 Product->getPrice 方法来使其工作,但是每次调用 Product->getPrice 时都会调用 API。我宁愿在创建对象时(当它调用数据库并将数据放入对象时)注入对我们 API 的调用,但我对 magento 不够熟悉,不知道发生在哪里,或者如果这是甚至可能。

4

2 回答 2

1

可能您可以设置一个自定义模块,该模块将包含一个带有 updateCatalogPrices() 方法的 Observer。此方法可以通过模块中的计划 cron 运行:

粗略的逻辑可以是:

$productCollection = Mage::getModel('catalog/product')->getCollection();
foreach $product in $productCollection
$priceFromAPI = ?//your logic to get the price using API
$product->setPrice($priceFromAPI)
        ->save();

计划的 Cron 将取决于:价格更新的频率。数据库中的产品数量。

但对于 40000 多种产品的目录,上述方法可能需要 1 天或更长时间才能完成。可以不使用产品模型,而是使用直接 sql 查询来减少更新时间。我遇到了这样一段似乎很有希望的代码,这是链接http://www.blog.magepsycho.com/updating-product-prices-in-magento-in-easier-faster-way/

于 2013-11-10T09:48:29.013 回答
0

使用下面的代码,您可以将 php 文件放入 magento 根目录中获取产品价格

<?php
require_once 'app/Mage.php';
umask(0);
Mage::app();
$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->load();
foreach ($collection as $_product)
{
echo $_product->getPrice();
}
?>
于 2013-11-09T12:56:17.850 回答