Jump to content

Importar productos desde cvs con script (No sube imagenes)


rferrero

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',
),
);
}
?>

Link to comment
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

Link to comment
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());
}

Link to comment
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.

Link to comment
Share on other sites

  • 4 weeks later...

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

Link to comment
Share on other sites

  • 2 weeks later...

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

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...