Cómo crear un producto descargable en Magento 2

magento-descargables

En magento 2 tenemos 6 tipos de productos:

  • Productos simple
  • Productos configurable
  • Productos agrupado
  • Productos virtual
  • Productos bundle
  • Productos descargables

Cada uno está pensado para una cosa distinta, mientras los virtuales son aquellos que no requieren envío, los simples son los que no tienen ningún tipo de variable que influye en su precio y por lo contrario los configurables si las tienen, en la cuales controlamos distintos precio o stocks por talla, color, etc.

Hoy trataremos sobre qué es un producto descargable y cómo crearlo mediante código

¿Qué son los productos descargables de Magento 2?

Los productos descargables son aquellos pensados para artículos como puedan ser ebooks, música, vídeos, archivos de texto o software.

Cuando nuestro cliente lo compra tendrá acceso a su descarga desde el panel de administración de usuarios.

¿Cómo crear un producto descargable en Magento 2 mediante código?

Sin extendernos mucho más vamos a explicar paso por paso como crear un producto descargable en Magento 2 mediante un ejemplo simple. Creamos un archivo php en la raíz de la instalación de nuestro Magento con estos parámetros:

<?php
use Magento\Framework\App\Bootstrap;
include('app/bootstrap.php');
$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$state = $objectManager->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$producto = $objectManager->create('\Magento\Catalog\Model\Product');

// TODO LO ESCRITO ANTERIORMENTE ES LO MÍNIMO QUE NECESITAMOS TENER CARGADO PARA PODER TRABAJAR CON LA CREACIÓN DE PRODUCTOS EN MAGENTO2

try {
$producto->setSku('SKU'); // INTRODUCIMOS EL SKU DE EST PRODUCTO
$producto->setName('PNOMBRE'); // NOMBRE DEL PRODUCTO
$producto->setAttributeSetId(4); // SELECCIONAMOS EL CONJUNTO DE ATRIBUTO QUE USEMOS (POR DEFECTO ES EL 4)
$producto->setStatus(1); // ESTADO DEL PRODUCTO, HABILITADO = 1
$producto->setWeight(10); // PESO DEL PRODUCTO
$producto->setVisibility(4); // VISIBLIDAD DEL PRODUCTO EN LA TIENDA, EL VALOR 4 ES VISIBLE EN EL CATÁLOGO Y EN LA VISTA PROPIA DE PRODUCTO DE FORMA INDIVIDUAL
$producto->setTaxClassId(0); // TIPO DE IVA QUE APLICA
$producto->setTypeId('downloadable'); // TIPO DE PRODUCTO
$producto->setPrice(5); // PRECIO
$producto->setLinkType('url'); // TIPO DE ENLACE
$producto->setLinkUrl('path of url'); // ENLACE DE DESCARGA
$producto->setSampleType('url'); // TIPO DE ENLACE DE PREVIEW
$producto->setSampleUrl('url'); // ENLACE DE DESCARGA DE PREVIEW
$producto->setStockData( // INTRODUCIMOS EL STOCK QUE TENEMOS DE NUESTRO PRODUCTO
array(
'use_config_manage_stock' => 0,
'manage_stock' => 1,
'is_in_stock' => 1,
'qty' => 40
)
);

// AÑADIMOS UNA IMAGEN DE PRODUCTO
$mediaDir = $objectManager->get('Magento\Framework\App\Filesystem\DirectoryList')->getPath('media');
$imagePath = "image.jpg"; // path of the image
$imageFilename = basename($imagePath);
$image_type = substr(strrchr($imageFilename, "."), 1); // OBTENEMOS LA EXTENSIÓN DE LA IMAGEN
$filename = md5($imagePath . strtotime('now')) . '.' . $image_type; // LE DAMOS UN NUEVO NOMBRE
if (!file_exists($mediaDir)) mkdir($mediaDir, 0777, true);
else chmod($mediaDir, 0777);
$filepath = $mediaDir . '/catalog/product/' . $filename; // SELECCIONAMOS UN PATH TEMPORAL
file_put_contents($filepath, file_get_contents(trim($imagePath))); // OBTENEMOS LA IMAGEN DE UNA URL EXTENA
$imgUrl = $filepath;
$producto->addImageToMediaGallery($imgUrl, ['image', 'small_image', 'thumbnail'], false, false);
$producto->save();

// AÑADIMOS LAS OPCIONES PERSONALIZABLES DEL PRODUCTO
$options = array(
array(
"sort_order" => 1,
"number_of_downloads" => 10,
"is_shareable" => 1,
"link_url" => "http://example.com",
"link_type" => "url",
"sample_url" => "http://example.com",
"sample_type" => "url"
)
);
foreach ($options as $arrayOption) {
$producto->setHasOptions(1);
$producto->getResource()->save($producto);
$option = $objectManager->create('\Magento\Catalog\Model\Product\Option')
->setProductId($producto->getId())
->setStoreId($producto->getStoreId())
->addData($arrayOption);
$option->save();
$producto->addOption($option);
}

} catch (\Exception $e) {
print_r($e->getMessage());
}
?>

Y con esto ya tendríamos un producto descargable creado.



Escribir un comentario