Magento

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.

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

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…

13 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…

16 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