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.
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

