Adicionar uma imagem no Produto – Magento

Como adicionar uma imagem no produto programaticamente utilizando a função nativa do Magento, “addImageToMediaGallery()”.

Neste exemplo você poderá adicionar várias imagens e definir qual delas é a principal.

adicionar uma imagem no produto programaticamente - magento

Primeiro passo, preparando a imagem

Antes de tudo, como vamos receber essa imagem?

Por uma integração (base64)

Iremos utilizar a imagem convertida na Base64.

Recebemos a imagem codificada e convertemos para seu formato original utilizando o método “base64_decode()”.

$filepath   = Mage::getBaseDir('media') . DS . 'tmp'. DS . $id . "-" . $picture_name;

$query = base64_decode( $picture_base64 );
		
file_put_contents($filepath, $query);

Temos 3 variáveis importante no código acima.

  • “id” – deverá ser o ID do produto
  • “picture_name” – nome da fota com a extensão junto, exemplo: “foto-teste.jpg”
  • “picture_base64” – foto convertida na base64.

Com a função “file_put_contents()”, salvamos a foto decodificada no diretório temporário do Magento para sua posterior utilização.

Por uma URL

$filepath = Mage::getBaseDir('media') . DS . 'tmp'. DS . $id . "-" . $picture_name;

$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL,$url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Cirkel');
$query = curl_exec($curl_handle);
curl_close($curl_handle);

file_put_contents($filepath, $query);

Mais uma vez temos 3 variáveis importante .

  • “id” – deverá ser o ID do produto
  • “picture_name” – nome da fota com a extensão junto, exemplo: “foto-teste.jpg”
  • “url” – caminho completo da imagem hospedada, exemplo: http://www.teste.com.br/produto.jpg.

Observação: não utilizar o protocolo https.

Utilizamos a biblioteca “cURL” para baixar a imagem na variável “query”.

Feito isso, salvamos ela no diretório temporário que está configurado na variável “filepath”.

Por upload

Essa é a opção mais simples.

Caso você já esteja fazendo o upload da foto no servidor aonde o Magento está instalado, basta você passar o caminho completo do arquivo da imagem para variável “filepath”.

Adicionado a imagem ao produto

Primeiro passo é carregar o objeto do produto.

Carregar o produto

$id = Mage::getModel('catalog/product')->getIdBySku($sku);

$product = Mage::getModel('catalog/product')->load($id);

No exemplo acima eu carrego o produto utilizando o “Sku”.

Com “Sku” eu consigo recuperar o “Id” do produto para utilizar no método “load()”.

Se você já tiver disponível em seu código o “Id” do produto, pular a parte do “Sku”.

Definindo os atributos da imagem no produto

$attr = array('image', 'small_image', 'thumbnail');

No array acima, estamos passando que essa imagem será utilizada como padrão para os três tipos de exibição acima.

Deixe esse array vazio, caso essa seja uma imagem complementar.

$attr = array();

Salvando o produto com a nova imagem

$product->addImageToMediaGallery($filepath, $attr , false, false);
			
$product->save();

Utilizamos o método “addImageToMediaGallery()” para adicionar a imagem a galeria de fotos do produto.

Repare no parâmetro “filepath” que é o caminho completo da foto no mesmo servidor aonde o Magento está instalado.

Verificando se a foto foi salva e limpando a bagunça

Não podemos esquecer de deletar a foto que ficou salvar no diretório temporário.

if (file_exists($filepath)){
  unlink($filepath)
}

Para listar todas as fotos de um produto você pode utilizar o exemplo abaixo.

$mediaApi = Mage::getModel("catalog/product_attribute_media_api");
$mediaApiItems = $mediaApi->items($id);		
			 
$extension = substr(strrchr($picture_name,'.'), 1);
$clean_name = str_replace( "." . $extension , "", $picture_name);
				 
$ax1 = $id . "-" .  $clean_name;
$picture_found = false;	 
foreach($mediaApiItems as $item) {
  $ax2 = $item['file'];				
  $pos = strpos($ax2, $ax1);		
  if ($pos === false) {
				
  }else{					
    $picture_found = true;
    break;
  }			
}

Passo na função “$mediaApi->items($id)” o ID do produto para retornar um array com todas as fotos do produto.

Depois faço um loop no array verificando se o nome que utilizamos está presente.

Se a foto for encontrada, “true” para variável “picture_found”, caso contrário permanecerá como “false”.

Não é necessário fazer essa verificação, pois qualquer erro no método “addImageToMediaGallery()” irá gerar uma exceção fatal.

Observação: Código acima só irá funcionar se você garantir que o nome da foto “picture_name” é único.

Links

Como remover todas as fotos de um produto no Magento

Resumo
Como adicionar imagens nos meus Produto programaticamente - Magento
Nome do Artigo
Como adicionar imagens nos meus Produto programaticamente - Magento
Descrição
Tutorial de como adicionar imagens programaticamente nos produtos dentro da plataforma de comércio eletrônico Magento.
Autor
Editor
Roger Mauricio Takemiya
Logo do Editor

Avalie este artigo!

Clique nas estrelas, para dar uma nota de 1 à 5.

Dúvidas? Faça um comentário logo abaixo ou envie uma mensagem clicando aqui.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *