Magento - API未更新

时间:2014-04-14 21:24:05

标签: php magento

之前的提供商通过多次更改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中有产品ID,在另一个var。
  2. 中有categories数组
  3. 获取类别集合,仅保留级别3中的活动类别(即树中类别的深度),其id为指定的类别。这意味着:如果提供的类别是数组(3,5,7,8)(例如,来自“245 | 3 | 5 | 7 | 8”参数,产品ID为“245”,其中一个不存在或未激活(例如7未激活且8不存在),$categorias_actuales中返回的值为[3,5]。
  4. 至于调试porpuse,将每个输入类别映射到存在和有效性。这意味着:存在&amp;&amp;&amp;&amp;&amp; level = 3类别将具有“true”作为值,而不存在或非活动类别将具有“false”作为值。对于给定的示例,返回的数组将是:array(3 =&gt; true,5 =&gt; true,7 =&gt; false,8 =&gt; false),因为7不活动且8不存在。< / LI> try-catch块中的
  5. :a。检索产品;湾将过滤后的id(在示例中为[3,5])设置为刚刚获取的产品中的产品类别; C。保存产品。
  6. 但是,我有以下问题

    1. 该函数返回true,因此返回$ result不会给我数组$ results作为返回值(我的目的是知道实际插入的产品属于哪些类别)。
    2. 在return语句中更改为false而不是$result完全没有效果:API调用中获取/显示的值仍为true
    3. 投掷new Exception("something's going on here")根本没有效果。输出时仍为true
    4. dyingdie('something's going on here'))均未生效。还在输出处看到(猜猜是什么?)true
    5. 编辑:还尝试了语法错误!! (猜猜怎么样?没有任何反应)。
    6. 我不仅尝试了这些步骤,还刷新了缓存(系统&gt;缓存管理&gt;全选并刷新,甚至点击“Flush Magento Cache”按钮)。

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

      我是一个n00b @ magento API,也许我错过了一些通常很明显的东西。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您是否禁用了编译?你可以用这两种方式之一来做。

    管理员

    中的
  1. System -> Tools -> Compilation

  2. 使用SSH / shell并导航到magento root。执行以下命令:

    • cd shell
    • php -f compiler.php disable
  3. 此外,如果您的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" *