Доступ к продуктам / категориям / информации об атрибутах с php с помощью Magento API - PullRequest
1 голос
/ 18 марта 2010

Необходимо иметь возможность извлекать продукты Magento во внешний шаблон. Необходимо иметь возможность получать данные обо всех товарах (описание, заголовок, атрибуты, категории, изображение и т. Д.).

И нужно иметь возможность фильтровать по категории, атрибуту, а также искать по имени.

Эти вызовы будут осуществляться с того же сервера, на котором установлена ​​установка Magento. Какой лучший способ сделать это?

Будет использовать php на Linux и Windows (2 отдельных сайта).


Попытались использовать Magento API & Soap для доступа с php, но пока не смогли заставить это работать. Все, что я получаю, это эту ошибку каждый раз.

Неустранимая ошибка: необработанное исключение SoapFault: [WSDL] SOAP-ERROR: синтаксический анализ WSDL: невозможно загрузить из 'http://mymagento.com/cart/index.php/api/?wsdl': дополнительное содержимое в конце документа в .....

Ответы [ 3 ]

2 голосов
/ 19 марта 2010

Самый простой путь - это загрузить среду Magento в свой PHP-скрипт и использовать вызовы Magento.

Вы можете загрузить среду с помощью следующего кода:

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

После этого вы можете использовать все нативные методы, как если бы вы использовали файл .php или .phtml в Magento. Например, чтобы получить коллекцию продуктов и отфильтровать ее только по активным продуктам:

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

Ссылка на базу кода Magento: http://docs.magentocommerce.com/

1 голос
/ 19 марта 2010

Вот основной код, который мы использовали для получения продуктов. Сочетал код из ответа Лайзера с некоторыми примерами, которые мы нашли на досках объявлений. Работали очень хорошо для нас.

Обратите внимание, что мы фильтруем по 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++;
        }
0 голосов
/ 18 марта 2010

Вы можете использовать, например, класс Mage_CatalogInventory_Model_Stock_Item_Api.

...