0

我有类似名称的产品清单,比如耐克的 10 款鞋,锐步的 10 款等等。所以所有的产品都会以 nike、reebok 等名字开头(它们都在一个叫做鞋子的类别中)。我需要从使用肥皂 api 的类别鞋中单独列出耐克鞋。

<?php
$path="http://localhost/magento/";
try{
$proxy=new SoapClient($path.'index.php/api/soap/?wsdl=1');
$sessionId=$proxy->login('apiuser','apikey');
echo $sessionId;
$result=$proxy->call($sessionId,'catalog_category.assignedProducts','4');
print_r($result);
}
catch (SoapFault $e)
{
    $msg = "Could not connect to the site".$e->getMessage();
    echo $msg."<br/>";   
}
?>

我尝试了上述方法,但它列出了该类别的所有产品,是否可以发送(或添加)另一个参数以便它单独获取耐克鞋?帮我解决这个问题,在此先感谢

4

1 回答 1

0

你的问题的答案是不要依赖肥皂来提供你想要的对象,而是用它来提供获得你想要的对象的方法。这是如何思考的:

  1. 让soap给你一个类别中的产品ID列表
  2. 使用该列表加载产品集合
  3. 根据您的需求过滤产品集合

如果您正在编写将在与 magento 相同的服务器上执行的代码,只需执行以下操作:

  1. 创建一个名为“Shoes”的属性集
  2. 创建一个名为 shoe_type 的下拉属性,并为您要过滤的每种鞋子类型(耐克、锐步等)添加选项。请注意下拉属性 ID。
  3. 在您的 magento 根目录中的 test.php 文件中使用以下代码。我已经对其进行了测试,并且可以正常工作。

这个想法是,您将根据“IN”类别创建一个集合,并根据某些属性过滤它们。

    echo "<PRE>";
    umask(0);

    // MAKE SURE TO PUT THIS FILE IN THE RIGHT PLACE (MAGENTO ROOT)
    require_once 'app/Mage.php';

    Mage::app('admin');

    $attributeSetId = '26'; // Your attribute set id (shoes)
    $shoeTypeId = '1'; // The ID of the dropdown item to filter on (taken from the ids of the items you added to the shoe_type attribute

    // Create a collection based on a catalog category. Load category ID 196
    $products = Mage::getModel('catalog/category')->load(196)
        ->getProductCollection()
        ->addAttributeToSelect('*')
        ->addAttributeToFilter('status', 1)
        ->addAttributeToFilter('visibility', 4)
        ->addAttributeToFilter('attribute_set_id', $attributeSetId)
        ->addAttributeToFilter('type_id', 'simple')
        ->addAttributeToFilter('shoe_type', $shoeTypeId);

    foreach ($products as $product)
    {
        // Write out the useful info!
        var_dump($product->debug());
    }

使用这种方法不仅快了近 100 倍,而且您可以更清楚地使用 magento 的对象模型。Soap 对于从服务器到服务器的通信更有用,或者如果您需要一台 Windows 机器与您的 magento linux 机器通信(就像我使用同步服务一样)。

于 2013-02-20T15:22:26.347 回答