Php 使用soap api列出特定类别的产品并具有类似名称

Php 使用soap api列出特定类别的产品并具有类似名称,php,magento,soap,Php,Magento,Soap,我有一个类似名称的产品列表,比如耐克的10双鞋,锐步的10双鞋等等。因此,所有产品都将以nike、reebok和So(它们都属于一个名为shoes的类别)的名称开头。我需要使用soap API从鞋类中单独列出nike鞋 <?php $path="http://localhost/magento/"; try{ $proxy=new SoapClient($path.'index.php/api/soap/?wsdl=1'); $sessionId=$proxy->login('api

我有一个类似名称的产品列表,比如耐克的10双鞋,锐步的10双鞋等等。因此,所有产品都将以nike、reebok和So(它们都属于一个名为shoes的类别)的名称开头。我需要使用soap API从鞋类中单独列出nike鞋

<?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/>";   
}
?>


我尝试了上面的方法,但它列出了该类别的所有产品,是否可以发送(或添加)其他参数,以便它单独获取nike shoes?请帮助我解决这个问题,提前谢谢

您的问题的答案是不要依赖soap来提供您想要的对象,而是使用它来提供获取您想要的对象的方法。下面是如何思考的:

  • 请soap为您提供一个类别中的产品ID列表
  • 使用该列表加载产品集合
  • 根据您的需要筛选产品集合
  • 如果编写的代码将在与magento相同的服务器上执行,只需执行以下操作:

  • 创建名为“Shoes”的属性集
  • 创建一个名为shoe_type的下拉属性,并为要筛选的每种类型的鞋添加选项(nike、reebok等)。请注意下拉属性ID
  • 在magento根目录的test.php文件中使用以下代码。我已经测试过了,效果很好
  • 其思想是,您将根据类别中的内容创建一个集合,并根据某些属性对其进行过滤。
        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());
        }
    
    echo”“;
    乌马斯克(0);
    //确保将此文件放在正确的位置(MAGENTO ROOT)
    需要一次“app/Mage.php”;
    Mage::app('admin');
    $attributeSetId='26';//您的属性集id(鞋)
    $shoeTypeId='1';//要筛选的下拉项的ID(取自添加到shoe_type属性的项的ID)
    //基于目录类别创建集合。加载类别ID 196
    $products=Mage::getModel('catalog/category')->load(196)
    ->getProductCollection()
    ->addAttributeToSelect(“*”)
    ->addAttributeToFilter('状态',1)
    ->addAttributeToFilter('visibility',4)
    ->addAttributeToFilter('attribute\u set\u id',$attributeSetId)
    ->addAttributeToFilter('type\u id','simple')
    ->addAttributeToFilter('shoe_type',$shoeTypeId);
    foreach($products as$product)
    {
    //写出有用的信息!
    变量转储($product->debug());
    }
    

    不仅使用此方法的速度快了近100倍,而且您可以更清楚地使用magento的对象模型。Soap对于从服务器到服务器的对话更有用,或者如果您需要windows机器与magento linux设备对话(就像我使用同步服务一样).

    事实上,这就是我现在正在使用的,我听说如果我们使用API,过程会更快,这就是我问这个问题的原因。是否可以使用API来实现这一点。?