Magento

Como exportar produtos no formato JSON – Magento

Como exportar produtos no formato JSON é um post que irá ensinar a como criar uma lista de produtos e disponibiliza-la no formato JSON no Magento, versão 1.9.x.

Sobre exportando os produtos em JSON

Este tutorial é útil para integrações, aonde você deseja exibir em widgets alguns produtos de sua loja virtual Magento em outros sites.

Você também pode utilizar este código como base para uma integração.

Criando o arquivo

Crie o arquivo PHP “produtos.php” na raiz da instalação Magento.

Inicie com seguinte código:

 header("Access-Control-Allow-Origin: *");

Este Header irá permitir que sites externos acessem este arquivo (ex: via ajax..)

Carregando Magento no arquivo externo

Iremos utilizar um arquivo “fora” do Magento, para que possamos acessar as funções, classes, etc, devemos incluir em nosso arquivo:

 require_once '../app/Mage.php';

 umask(0);

 Mage::app('default');

Não vamos complicar a coisa, nem tudo precisa de um módulo, ainda mais para a versão 1.9.x que logo será descontinuada.

Montando a collection

Neste parte montamos nossa collection.

 $collection_aux = Mage::getModel('catalog/product')->getCollection();

 $collection_aux->joinField(

 'qty',

 'cataloginventory/stock_item',

 'qty',

 'product_id=entity_id',

 '{{table}}.stock_id=1',

 'left'

 );

 

Utilizo o “joinField” para agregar na nossa collection o estoque do produto.

Neste parte estou adicionando alguns atributos para filtrar a collection “addAttributeToFilter”, como Status, Tipo…

 $collection_aux->addAttributeToFilter('qty', array('neq' => 0));

 $collection_aux->addAttributeToFilter('type_id','simple');

 $collection_aux->addAttributeToFilter('status', 1);

 $collection_aux->addAttributeToFilter('visibility', 4);

 $collection_aux->addAttributeToSelect('price');

 $collection_aux->addAttributeToSelect('special_price');

 $collection_aux->addAttributeToSelect('name');

 $collection_aux->addAttributeToSelect('url');

 $collection_aux->addAttributeToSelect('image');

 $collection_aux->joinField('category_id',

 'catalog/category_product',

 'category_id',

 'product_id=entity_id',

 null,

 'left'

 );

E com addAttributeToSelect os campos que desejo.

Utilizo o joinField mais uma vez para incluir também a categoria.

Nesta parte estou definindo o modo de ordenação aleatório, você pode comentar ou alterar de acordo com suas necessidades.

$collection_aux->getSelect()->order(new Zend_Db_Expr('RAND()'));

Defino a quantidade de registros que desejo. Você pode montar uma paginação utilizando setPageSize e setCurPage.

$collection_aux->setPageSize(20)->setCurPage(1);

Parte Final, loop e output JSON

Percorremos os produtos e trabalhamos os valores em um array que será convertido para formato JSON.

 $products = array();

 $_coreHelper =  Mage::helper('core');

 foreach ($collection_aux as $product){


  $price = $product->getPrice();

  $specialprice = $product->getFinalPrice();


  if( ((int) $price) == ((int) $specialprice)){

  $price = $price;

  }else{  

  $price = $specialprice;  

  }
  

 $products[] = array("name" => $product->getName(), "sku" => $product->getSku(), "url" => $product->getProductUrl(), "picture" => (string)Mage::helper('catalog/image')->init($product, 'image')->resize(197, 167), "price" => $price );

}

 

 echo json_encode($products);

Conclusão do como exportar produtos no formato JSON

Você pode montar uma simples integração utilizando este tutorial, análise o código e faça as melhorias.

Qualquer dúvida ou erro, por favor faça um comentário.

Código completo

<?php

 header("Access-Control-Allow-Origin: *");

 require_once '../app/Mage.php';

 umask(0);

 Mage::app('default');

 

 $collection_aux = Mage::getModel('catalog/product')->getCollection();

 $collection_aux->joinField(

 'qty',

 'cataloginventory/stock_item',

 'qty',

 'product_id=entity_id',

 '{{table}}.stock_id=1',

 'left'

 );

 

 

 

 $collection_aux->addAttributeToFilter('qty', array('neq' => 0));

 $collection_aux->addAttributeToFilter('type_id','simple');

 $collection_aux->addAttributeToFilter('status', 1);

 $collection_aux->addAttributeToFilter('visibility', 4);

 $collection_aux->addAttributeToSelect('price');

 $collection_aux->addAttributeToSelect('special_price');

 $collection_aux->addAttributeToSelect('name');

 $collection_aux->addAttributeToSelect('url');

 $collection_aux->addAttributeToSelect('image');

 $collection_aux->joinField('category_id',

 'catalog/category_product',

 'category_id',

 'product_id=entity_id',

 null,

 'left'

 );

 

$collection_aux->getSelect()->order(new Zend_Db_Expr('RAND()'));



$collection_aux->setPageSize(20)->setCurPage(1);

 

 

 $products = array();

 $_coreHelper =  Mage::helper('core');

 foreach ($collection_aux as $product){


  $price = $product->getPrice();

  $specialprice = $product->getFinalPrice();


  if( ((int) $price) == ((int) $specialprice)){

  $price = $price;

  }else{  

  $price = $specialprice;  

  }
  

 $products[] = array("name" => $product->getName(), "sku" => $product->getSku(), "url" => $product->getProductUrl(), "picture" => (string)Mage::helper('catalog/image')->init($product, 'image')->resize(197, 167), "price" => $price );

}

 

 echo json_encode($products);

 

?>

 

Post Recentes

Bloquear .env e .git no nginx: as regras que ainda deixam o arquivo vazar

Negar /.env no nginx parece resolvido até alguém pedir /wp-content/uploads/.env ou backup.sql. As regras que testei e os furos que…

14 horas atrás

Canonical errado no Yoast: corrigindo pelo filtro wpseo_canonical

O Search Console marca suas páginas 2, 3 e 4 como alternativas da página 1? Ajuste a tag canônica do…

17 horas atrás

Layout XML do Magento 2: remover bloco de módulo de terceiro

Um módulo de terceiro plantou um banner no topo da loja e você não quer desinstalar nada: tire o bloco…

1 dia atrás

Restaurar dump do Magento 2 em outro servidor: trocar a base_url no SQL

Importou o banco de produção e o site pula para o domínio antigo? Rode o UPDATE em core_config_data, limpe o…

2 dias atrás

Criar exceção customizada em PHP: quando estender Exception compensa

Seu catch trata pedido inexistente e banco fora do ar do mesmo jeito. Veja como criar exceção customizada em PHP…

3 dias atrás

DataProvider Magento 2: form do admin abre com campos vazios ao editar

O form do admin salva mas abre em branco na edição: veja o getData() indexado pelo id da entidade e…

4 dias atrás