Jump to content
rferrero

Importar productos desde cvs con script (No sube imagenes)

Recommended Posts

Hola,

tengo un script que genera un fichero cvs con los productos a subir a la web, este cvs
se carga perfectamente desde el BO Importar->Productos las imagenes se suben perfectamente y
todo está ok, el problema es cuando lanzo el cvs con el script de abajo, los productos cargan bien pero la imagen no
sube.

A que se puede deber?

Un saluso

Url del script: http://programadorphp.es/script-para-importar-productos-y-categorias-en-prestashop

<?php

define('PS_ADMIN_DIR', getcwd());

include(PS_ADMIN_DIR.'/../config/config.inc.php');
include(PS_ADMIN_DIR.'/functions.php');
include_once './tabs/AdminImport.php';


if (!isset($_GET['entity']))
die();

$import = New AdminImport();

switch ($_GET['entity']) {
case 0:
loadCategoriesPost();
$import->categoryImport();
break;

case 1:
loadProductsPost();
$import->productImport();
break;

default:
die();
break;
}


function loadCategoriesPost() {
$_POST = array (
'tab' => 'AdminImport',
'skip' => '0',
'csv' => 'cat.csv',
'convert' => '',
'entity' => '0',
'separator' => ';',
'multiple_value_separator' => ',',
'import' => 'Importar datos CSV',
'type_value' =>
array (
0 => 'id',
1 => 'active',
2 => 'name',
3 => 'parent',
4 => 'description',
5 => 'meta_title',
6 => 'meta_keywords',
7 => 'meta_description',
8 => 'link_rewrite',
9 => 'image',
),
);
}

function loadProductsPost() {
$_POST = array (
'tab' => 'AdminImport',
'skip' => '0',
'csv' => 'pro.csv',
'convert' => '',
'entity' => '1',
'separator' => ';',
'multiple_value_separator' => ',',
'import' => 'Importar datos CSV',
'type_value' =>
array (
0 => 'id',
1 => 'active',
2 => 'name',
3 => 'category',
4 => 'price_tex',
5 => 'tax_rate',
6 => 'wholesale_price',
7 => 'on_sale',
8 => 'reduction_price',
9 => 'reduction_percent',
10 => 'reduction_from',
11 => 'reduction_to',
12 => 'reference',
13 => 'supplier_reference',
14 => 'supplier',
15 => 'manufacturer',
16 => 'ean13',
17 => 'ecotax',
18 => 'weight',
19 => 'quantity',
20 => 'description_short',
21 => 'description',
22 => 'tags',
23 => 'meta_title',
24 => 'meta_keywords',
25 => 'meta_description',
26 => 'available_now',
27 => 'available_later',
28 => 'image',
29 => 'no',
30 => 'link_rewrite',
),
);
}
?>

Share this post


Link to post
Share on other sites

No puedo ayudarte porque mis conocimientos no dan para tanto pero debo decirte que es una pasada los scripts que te curras, ¿Con ese mismo script que indicas en tu web es posible que solo se actualicen los productos de tarifas csv que tengan el mismo numero de referencia de proveedor que le asignaste a tus articulos en el BO descartando el resto de productos en vez de que se creen nuevos?
saludos

Share this post


Link to post
Share on other sites

Hola, con este script se crean nuevos productos, antes de lanzar el Import lo que hago es verificar si existe el producto para actualizarlo y si no existe lo envío al cvs para que se lea con el
loadProductsPost();
$import->productImport();

Para actualizar los que ya existen hago algo como esto: LA VARIABLE $art es leida de un xml que contiene los datos de cada producto que sincronizo, la cargo con simpleloadxml


if ($art->ELIMINAR==1)//Si está a 1 lo desactivamos
{
$qry = "UPDATE ps_product SET ".
"quantity = $cantidad, ".
"price = $art->PVP, ".
"reduction_percent= $art->DESCUENTO, ".
"active = 0 ".
" WHERE supplier_reference = '$art[ref]'";
}
else
{
$qry = "UPDATE ps_product SET ".
"quantity = $art->EXISTENCIAS, ".
"price = $art->PVP, ".
"reduction_percent= $art->DESCUENTO, ".
"active = 1 ".
" WHERE supplier_reference = '$art[ref]'";
}
$result = mysql_query($qry) or die(mysql_error());
}

Share this post


Link to post
Share on other sites

Problema solucionado!!!

En el php AdminImport.php línea 718 se supone que $product->Image es un array, si ejecutamos la importación desde fuera del bo (no es un array) por lo que modifico el código

/*if (isset($product->image) AND is_array($product->image) and sizeof($product->image))*/
if (isset($product->image) AND sizeof($product->image))
{
$productHasImages = (bool)Image::getImages(3, intval($product->id));
/*$productHasImages = (bool)Image::getImages(intval($cookie->id_lang), intval($product->id));
foreach ($product->image AS $key => $url)*/
$url=$product->image;
if (!empty($url))
{


De esta forma solo podremos importar una foto, no una lista de fotos aunque a mi me basta, supongo que con una lista si que funcionaria.

Share this post


Link to post
Share on other sites

Hola a todos,
felicidades por hacer este script. Lo necesitamos!
Soy un principiante a PHP: ¿cómo puedo usar este script (http url)? ¿Cómo se escribe el comando para insertarlo en cron?
Me dio algunos ejemplos?

Gracias.
Carlo Alberto.

PD: lo siento mi mal español, pero soy italiano y utiliza traductor de Google ...

Share this post


Link to post
Share on other sites

bastaría con programar el cron para que se ejecute cada x minutos

Para ejecutarlo desde http solo tienes que irte a la carpeta del server donde tienes el php

http://www.tu_dominio.com/carpeta_admin/nombrephp.php

el comando para cron es php /home/ruta_del_php/nombrephp.php > log.txt, si tienes un hosting con cpanel
es mucho mas facil
Apartado Avanzado-->Cron jobs

Metes los minutos */15 por ejemplo y la instrucción php /home/ruta_del_php/nombrephp.php > log.txt

Espero serte de ayuda

Un saludo

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More