Pregunta

Necesidad de ser capaz de tirar de productos de Magento en una plantilla externa. Necesidad de ser capaz de obtener todos los datos de productos (descripción, título, atributos, categorías, imágenes, etc.).

Y tiene que ser capaz de filtrar por categoría, atributo y también buscar por el nombre.

Estas llamadas se realizan desde el mismo servidor que el Magento instalación está encendido. ¿Cuál es la mejor manera de hacer esto?

Será usando PHP en Linux y ventanas (2) sitios separados.


Han intentado usar la API de Magento y jabón para el acceso de PHP, pero no han sido capaces de conseguir que trabajar todavía. Todo lo que consigo es este error cada vez.

  

error fatal: no detectada SoapFault excepción: [WSDL] de SOAP-ERROR: análisis de WSDL: No se pudo cargar desde ' http://mymagento.com/cart/index.php/api/?wsdl ': contenido extra al final del documento en .....

¿Fue útil?

Solución 2

Este es el código básico que utilizamos para obtener los productos. Mallada el código de la respuesta de Laizer con algunos ejemplos que encontramos en tablones de anuncios. Funcionado muy bien para nosotros.

Nota estamos filtrando por categoría ID 11 en el ejemplo siguiente.

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++;
        }

Otros consejos

La ruta más fácil para ir es para cargar el entorno de Magento en su script PHP, y el uso de las llamadas de Magento nativos.

Se pueden cargar hasta el medio ambiente con el siguiente código:

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

Después de eso, puede utilizar todos los métodos nativos, al igual que lo haría en un .php Magento o archivo .phtml. Por ejemplo, para obtener una colección de productos y filtrarla a sólo productos activos:

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

Referencia para la base de código Magento está en: http://docs.magentocommerce.com/

Se puede utilizar, por ejemplo, la clase Mage_CatalogInventory_Model_Stock_Item_Api.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top