使用Magento API从php访问产品/类别/属性信息

时间:2010-03-18 18:49:12

标签: magento soap soap-client php

需要能够将Magento产品拉入外部模板。需要能够获得所有产品数据(描述,标题,属性,类别,图像等)。

并且需要能够按类别,属性进行过滤,还可以搜索名称。

这些调用将来自Magento安装所在的同一台服务器。最好的方法是什么?

将在Linux和Linux上使用php窗户(2个独立的网站)。


尝试过使用Magento API&肥皂从PHP访问,但还没有能够让它工作。我得到的只是每次都是这个错误。

  

致命错误:未捕获的SoapFault异常:[WSDL] SOAP-ERROR:解析WSDL:无法从“http://mymagento.com/cart/index.php/api/?wsdl”加载:文档末尾的额外内容.....

3 个答案:

答案 0 :(得分:2)

最简单的方法是在PHP脚本中加载Magento环境,并使用本机Magento调用。

您可以使用以下代码加载环境:

require_once("path_to_magento/app/Mage.php");
Mage::app();

之后,您可以使用所有本机方法,就像在Magento .php或.phtml文件中一样。例如,要获取产品集合并将其过滤为仅有效产品:

$products = Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToFilter('status', 1); 

Magento代码库的参考位于:http://docs.magentocommerce.com/

答案 1 :(得分:1)

以下是我们用于获取产品的基本代码。使用我们在留言板上找到的一些示例来描述Laizer的答案中的代码。为我们工作得很好。

注意我们在下面的示例中按类别ID 11进行过滤。

require_once("app/Mage.php");
Mage::app();


$category = new Mage_Catalog_Model_Category();
$category->getAllChildren(11);

$products = Mage::getModel('catalog/product')->getCollection();
        $products->addAttributeToFilter('status', 1);//enabled
        $products->addCategoryFilter($category);
        $products->addAttributeToSelect('*');
        $prodIds=$products->getAllIds();


        $product = Mage::getModel('catalog/product');
        $count=1;
        foreach($prodIds as $productId)
        {


            echo "$count <br>";
            $product->load($productId);

            $product_data = array();
            $product_data['sku']=$product->getSku();
            $product_data['title']=$product->getName();
            $product_data['description']=$product->getDescription();
            $product_data['link']=$product->getProductUrl();
            $product_data['image_link']=Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
            $product_data['price']=$product->getPrice();
            $product_data['brand']=$product->getResource()->getAttribute('manufacturer')->getFrontend()->getValue($product);
            $product_data['product_type']='';

            //get the product categories
                    foreach($product->getCategoryIds() as $_categoryId){
            $category = Mage::getModel('catalog/category')->load($_categoryId);
            $product_data['product_type'].=$category->getName().', ';
            }
            $product_data['product_type']=rtrim($product_data['product_type'],', ');





echo "<pre>";
            var_dump($product_data);

            //echo 'Loop end: '.memory_get_usage(false).'<br>';
            //flush();
            $count++;
        }

答案 2 :(得分:0)

您可以使用例如Mage_CatalogInventory_Model_Stock_Item_Api类。