之前的提供商通过多次更改Magento 1.6.2.0发行版的核心来杀死了几只小猫。
所以,为了在创纪录的时间内解决问题,我们不得不拧紧并击中小猫的笨蛋:我们仍然维护修改后的API:catalog_category.assignProduct
。
到目前为止,我们已为此方法提供此API:
public function assignProduct($categoryId, $productId, $position = null, $identifierType = null)
{
$datos = explode('|', $categoryId);
$productId = array_shift($datos);
$categorias_actuales = Mage::getModel('catalog/category')
->getCollection()
->addIsActiveFilter()
->addIdFilter($datos)
->addLevelFilter(3)
->getAllIds();
$incat = function($cat) use ($categorias_actuales) {
return in_array($cat, $categorias_actuales);
};
$result = array_combine($datos, array_map($incat, $datos));
try {
$product = Mage::helper('catalog/product')->getProduct($productId, null, $identifierType);
$product->setCategoryIds($categorias_actuales);
$product->save();
} catch (Mage_Core_Exception $e) {
$this->_fault('data_invalid', $e->getMessage());
} catch (Exception $e) {
$this->_fault('internal_error', $e->getMessage());
}
return $result;
}
API的目的是为产品分配多个类别。然而,这是一个修改版本,因为前一个版本非常慢。而奇怪的事实是,直到最近才起作用。它的目的是:
"productId|catgId1|catgId2|cargId3|..."
这样的字符串,其中第一个值是产品ID,倒数第二个值是类别ID;每个都是整数值。该参数被管道符(“|”)破坏,并弹出产品ID。通过这种方式,我们在一个var中有产品ID,在另一个var。$categorias_actuales
中返回的值为[3,5]。但是,我有以下问题:
false
而不是$result
完全没有效果:API调用中获取/显示的值仍为true
。new Exception("something's going on here")
根本没有效果。输出时仍为true
。dying
(die('something's going on here')
)均未生效。还在输出处看到(猜猜是什么?)true
。我不仅尝试了这些步骤,还刷新了缓存(系统>缓存管理>全选并刷新,甚至点击“Flush Magento Cache”按钮)。
问题: 1.在给出问题之前:我该如何调试该API调用? 2.什么可能导致产品没有与他们的类别一起保存?通过调用category.level,我可以看到给定的id(即在category.assignProduct的第一个参数中给出)。
我是一个n00b @ magento API,也许我错过了一些通常很明显的东西。任何帮助将不胜感激。
答案 0 :(得分:1)
您是否禁用了编译?你可以用这两种方式之一来做。
System -> Tools -> Compilation
使用SSH / shell并导航到magento root。执行以下命令:
cd shell
php -f compiler.php disable
此外,如果您的Web服务器运行PHP APC且apc.stat
设置为0
(您可以通过运行php -i | grep apc.stat
或在任何phpinfo()
输出处查找它来检查) ,请重新启动apache2
网络服务器,或者如果您使用php5-fpm
,请重新启动该服务器。
然后,如果所有其他方法都失败了,请尝试在app/code/local
处查找等效文件。
e.g。如果您的文件位于app/code/core/Mage/Path/ToApiFile.php
中的某个位置,请在app/code/local/Mage/Path/ToApiFile.php
处查找本地版本。
最后,一个非常有用的shell命令用于搜索代码实例:
$ cd app/code/
$ grep -rin "function assignProduct" *