Magento - API not being updated


Magento - API not being updated

之前的提供者通过多次更改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的意图是为一个产品同时分配多个类别。然而,这是一个修改过的版本,因为之前的速度慢得令人望而却步。奇怪的事实是,直到最近才起作用。它的意图是:

  1. 只使用第一个参数,而不是整数值,在这里杀死了一只小猫,API现在期望一个类似"productId|catgId1|catgId2|cargId3|..."的字符串,其中第一个值是产品id,倒数第二个值是类别id;它们中的每一个都是整数值。参数由管道字符("|")打断,并弹出产品id。通过这种方式,我们在一个var中有product id,在另一个变量中有categories数组
  2. 获取categories集合,该集合只保留级别3(即树中类别的深度)中的活动类别,这些活动类别的id在指定的类别中。这意味着:如果提供的类别是数组(3,5,7,8)(例如来自"245|3|5|7|8"参数,即产品id"245"),并且其中一个类别不存在或不活动(例如7不活动,8不存在),则$categorias_actuales中的返回值为[3,5]
  3. 对于调试porpuse,将每个输入类别映射到存在性和有效性。这意味着:存在的&活动&level=3类别的值为"true",而不存在或不活动的类别的值将为"false"。对于给定的示例,返回的数组将是:array(3=>true,5=>true,7=>false,8=>false),因为7不是活动的,8不存在
  4. 在try-catch块中:a.检索产品;b.将过滤后的id(在示例中:[3,5])设置为刚刚获取的产品中的产品类别;c.保存产品

但是,我有以下问题

  1. 函数返回true,所以返回$result不会给我返回值的数组$results(我的意图是知道产品实际插入了哪些类别)
  2. 在返回语句中更改为false而不是$result根本没有效果:从API调用获取/显示的值仍然是true
  3. 抛出new Exception("something's going on here")根本没有效果。输出端仍为true
  4. CCD_ 9和CCD_。还在输出端看到(你猜怎么着?)true
  5. 编辑:还尝试了语法错误!!(你猜怎么着?什么都没发生)

我不仅尝试了这些步骤,还刷新了缓存(系统>缓存管理>全选并刷新,甚至单击"刷新Magento缓存"按钮)。

问题:1.考虑到之前的问题:如何调试API调用?2.是什么原因导致产品没有与其类别一起保存?通过调用category.level,我可以看到给定的id(即在category.assignProduct的第一个参数中给定的id)存在。

我是一个n00b@magento API,也许我错过了一些通常显而易见的东西。如有任何帮助,我们将不胜感激。

您禁用编译了吗?你可以用这两种方法中的一种。

  1. 管理员中的System -> Tools -> Compilation

  2. 使用SSH/shell并导航到您的magento根目录。执行以下命令:

    • cd shell
    • php -f compiler.php disable

此外,如果您的web服务器在apc.stat设置为0的情况下运行PHP APC(您可以通过运行php -i | grep apc.stat或在任何phpinfo()输出中查找它来检查这一点),请重新启动您的apache2 web服务器,或者如果您使用php5-fpm,也要重新启动该服务器。

然后,如果所有其他操作都失败了,请尝试在app/code/local中查找等效文件。

例如,如果您的文件位于app/code/core/Mage/Path/ToApiFile.php中的某个位置,请在app/code/local/Mage/Path/ToApiFile.php中查找本地版本。

最后,一个非常有用的shell命令用于搜索代码实例:

$ cd app/code/ 
$ grep -rin "function assignProduct" *