Saltar al contenido
Codif铆ca.me | Desarrollo web | Programaci贸n

C贸mo a帽adir productos a tu Prestashop 1.6 por c贸digo.

18 octubre, 2016

En esta entrada vamos a ver como a帽adir productos a tu tienda online hecha con Prestashop, la versi贸n para lo que corre bien es 1.6 y 1.7, no he probado en m谩s versiones as铆 que es posible que tengas que realizar algunos ajustes si te sales de estas versiones.

La idea es que recibas los productos desde algun servicio web y despu茅s modifiques las variables a tu gusto, subas o bajes los precios, cambies los titulos, las descripciones o lo que quieras. Esto ya queda a tu gusto.

Esto ser铆a as铆, creamos la instancia $object , qu茅 ser谩 un objeto tipo Product, y le a帽adiremos los atributos necesarios para poder “volcar” el producto a tu tienda.

Los atributos son f谩ciles de entender, os dejo un ejemplo de como lo he subido yo. Aunque es obvio que tendr谩s que cambiarlo por los datos que tu quieras.

Las variables que encuentres a la derecha $ean13, $referencia… … previamente las he asignado el valor que quiero que tengan.


ean13 = $ean13;
name =array((int)(Configuration::get('PS_LANG_DEFAULT')) => $name);
id_manufacturer = $numero;
sku = $referencia;
reference = $referencia;
quantity = 0;
minimal_quantity = 1;
additional_shipping_cost = 0; 
wholesale_price = 0;
ecotax = 0;
width = 0;
height = 0;
depth = 0;
weight = 0;
out_of_stock = 0;
active = 0;

id_category_default = (int)$numeroC;
category = (Array)((int)$numeroC);

available_for_order = 0;
show_price = 1;
on_sale = 0;
online_only = 1;
meta_keywords = $name;
link_rewrite = array((int)(Configuration::get('PS_LANG_DEFAULT')) => $referencia);//
description_short = array((int)(Configuration::get('PS_LANG_DEFAULT')) => $name);
description = array((int)(Configuration::get('PS_LANG_DEFAULT')) => $name.'
'. $description;

logo-2015

Y este ser铆a el ejemplo completo para poder subir productos “por c贸digo“:

                $defaultLanguage = new Language((int)(Configuration::get('PS_LANG_DEFAULT')));  
		/* A帽adiendo un nuevo producto */
		$object = new Product();
		$object->price = 1000;
		$object->id_tax_rules_group = 0;
		$object->ean13 = $ean13;
		$object->name =array((int)(Configuration::get('PS_LANG_DEFAULT')) => $name);
		$object->id_manufacturer = $numero;
		$object->sku = $referencia;
		$object->reference = $referencia;
		$object->quantity = 0;
		$object->minimal_quantity = 1;
		$object->additional_shipping_cost = 0; 
		$object->wholesale_price = 0;
		$object->ecotax = 0;
		$object->width = 0;
		$object->height = 0;
		$object->depth = 0;
		$object->weight = 0;
		$object->out_of_stock = 0;
		$object->active = 0;
 
		$object->id_category_default = (int)$numeroC;
		$object->category = (Array)((int)$numeroC);
 
		$object->available_for_order = 0;
		$object->show_price = 1;
		$object->on_sale = 0;
		$object->online_only = 1;
		$object->meta_keywords = $name;
		$object->link_rewrite = array((int)(Configuration::get('PS_LANG_DEFAULT')) => $referencia);//notincludes
		$object->description_short = array((int)(Configuration::get('PS_LANG_DEFAULT')) => $name);
		$object->description = array((int)(Configuration::get('PS_LANG_DEFAULT')) => $name.'<br><h3>'.$attribute.'</h3><br><h3>Incluye:</h3><br>'.$includes.'<br> <h3>No Incluye:</h3><br>'.$notincludes.'<br>');
 
		$object->save();
 
 
		//A帽ade una imagen principal
 
		$id_product = $object->id;
 
		echo '<br>id_product:'.$id_product .'<br>';
 
		$url = 'http://donde-esta-la-imagen.com/img/'.$imagenReferencia.'.jpg';
		echo '<br>imagen:'.$url .'<br>';// traza para ver la ruta e imagen
		$shops = Shop::getShops(true, null, true);    
		$image = new Image();
		$image->id_product = $id_product;
		$image->position = Image::getHighestPosition($id_product) + 1;
		$image->cover = true; // or false;
		if (($image->validateFields(false, true)) === true &&
		($image->validateFieldsLang(false, true)) === true && $image->add())        {
		    $image->associateTo($shops);
		    if (!AdminImportController::copyImg($id_product, $image->id, $url, 'products', false))
		    {
			echo '<br>Borrando!';  //Si quieres borrar la imagen despu茅s 
			$image->delete();
		    }
		}
 
                // A帽ade una categor铆a Principal
 
		$object->id_category_default = (int)$numeroC;
		$object->category = (Array)((int)$numeroC);
		$object->addToCategories(array($numeroC,2));
		$object->save();
Consideraciones:

He hecho un save() var铆as veces porque para poder asignar una imagen principal y una categor铆a principal el producto tiene que estar salvado previamente, es por ello que a帽ado el producto con un save() y despu茅s a帽ado el resto de par谩metros que quiero a帽adir a ese producto.

Y voil谩! listo, a帽adido tu producto a tu flamante tienda Prestashop.

Entradas relacionadas

Deja una respuesta

Tu direcci贸n de correo electr贸nico no ser谩 publicada.

Comentarios (10)

Buenas! Tengo un ligero problemilla a帽adiendo la imagen a mi producto. Parece que la a帽ade bien, pero la deja en blanco… 驴puede ser por temas de permisos o algo? Un saludo crack!

Responder

Buenas,

Despu茅s de a帽adirlas que tienes que regenerar las im谩genes para que las coja tu theme del tama帽o que tenga puesto.

Dentro del administrador , d贸nde tienes las im谩genes , tienes que darle a regenerar.

Estoy en el m贸vil no recuerdo la ruta exacta pero ese es el paso que te quedar铆a para las im谩genes

Responder

Nada, parece ser otro problema, al regenerar me salta el error:

Falta la imagen original o est谩 vac铆a (/img/p/3/3/1/5/1/33151.jpg) para el producto ID 5493

Menudo dolor de cabeza me est谩 dando esto ya.. 馃檨

Responder

ummm,
cuando le indicas la imagen en esta linea ,
aseg煤rate de que est谩 correcta la ruta: (aqu铆 puse .jpg pero no tienen por qu茅 ser jpg)
(aseg煤rate de mayusculas y min煤sculas, tambi茅n http o https www o sin www.)

$url = \'http://donde-esta-la-imagen.com/img/\'.$imagenReferencia.\'.jpg\';

como en la l铆nea siguiente mostrar谩 el echo visita la imagen y mira que est茅 visible:
echo \'imagen:\'.$url ;

a ver si alguna regla de Apache o nginx hace que no tengas acceso o una redirecci贸n, o que no est茅 visible.

Responder

Nada, la ruta es totalmente correcta y desde el servidor es accesible 馃檨
Ya no se qu茅 puede ser…

ummm, prueba con la soluci贸n que te comenta mi compa帽ero Alex.
Y nos cuentas , a ver si te vale

Saludos

La soluci贸n:

Edita el archivo controllers/admin/AdminImagesController.php

busca:

鈥. // No need to display the old image system if the install has been made later than 2013-03-26

鈥. $this->display_move = (!Configuration::get(‘PS_LEGACY_IMAGES’) && defined(‘_PS_CREATION_DATE_’) && strtotime(_PS_CREATION_DATE_) > strtotime(‘2013-03-26’)) ? false : true $this->

display_move = false;

y cambia lo 煤ltimo por $this->display_move = true;

Despu茅s ve dentro de Preferencias -> Im谩genes

Ya aparece la opci贸n de poner el almacenamiento por defecto como lo ten铆as en la anterior versi贸n.

Marca usar almacenamiento por defecto.

Ahora debes usar una copia de seguridad de la carpeta img antes de actualizar y la reemplazas por la que tienes en la actualizaci贸n.

Despu茅s de recuperar la carpeta img debes ir a preferencias, im谩genes y pulsa en mover im谩genes al nuevo tipo de almacenamiento.

Y por 煤ltimo desmarca usar almacenamiento por defecto y regenera miniaturas…..

Espero que te valga

Responder

Gracias Alex por aportar tu soluci贸n

Responder

Creo que no se aplica a mi problema, estoy usando la versi贸n 1.7 y adem谩s no encuentro ese c贸digo por ning煤n sitio

Responder

no claro, entonces no te valdr铆a, esto es para 1.5 cuando migran a 1.6
En 1.7, igual no te vale el c贸digo, muchas veces si vale pero tendr铆as que debugar el codigo para ver si da alg煤n problema.
Yo lo prob茅 con 1.6 con 1.7 no sabr铆a decirte si vale o si hay que cambiar alguna cosilla.

suerte!, y cualquier cosa estamos por aqu铆

Saludos

Responder