Jump to content

Mise à jour fiche produit à travers application tierce


Recommended Posts

Bonjour,

 

D'un coté j'ai mon fichier Excel avec mes stocks produits à jour.

De l'autre j'ai mon site avec les mêmes produits.

 

Je fais 4 fois par semaine une mise à jour du stock à travers un import CSV basé sur la référence produit.

C'est long et fastidieux.

 

Je voudrais faire une page PHP stockée sur le site que je pourrais appeler et qui mettrait à jour le stock d'un produit en particulier.

Je passerais à cette page internet PHP la référence produit que je désire changer et le stock à mettre à jour.

La page PHP récupère les paramètres (ref et stock) passés dans l'url, recherche le produit et mets à jour le stock de la fiche produit...

 

Quelqu'un pourrait m'aider sur le code ?

 

Je pourrais utiliser le webservice mais c'est tres lent et je dois faire la mise à jour de 10000 produit tous les jours :-(

 

Merci pour vos conseils/aide

 

Romuald

 

Link to comment
Share on other sites

Ok j'avance sur le sujet :

 

J'ai trouvé un code qui me permet d'ajouter ou modifier simplement un produit lisant un fichier XML :

<?php

include(dirname(__FILE__).'/config/config.inc.php');
include(dirname(__FILE__).'/init.php');

$contentxml = file_get_contents('prod.xml');
$xml = simplexml_load_string($contentxml);
foreach ($xml->Products as $product_xml)
{
    if ($product_xml->Valid_internet_product == 1)
    {
        /* Update an existing product or Create a new one */
        $id_product = (int)Db::getInstance()->getValue('SELECT id_product FROM '._DB_PREFIX_.'product WHERE reference = \''.pSQL($product_xml->Reference).'\'');

        $product = $id_product ? new Product((int)$id_product, true) : new Product();
        $product->reference = $product_xml->Reference;
        $product->price = (float)$product_xml->Price;
        $product->active = (int)$product_xml->Active_product;
        $product->weight = (float)$product_xml->Weight;
        $product->minimal_quantity = (int)$product_xml->MinOrderQty;
        $product->id_category_default = 2;
        $product->name[1] = utf8_encode($product_xml->Products_name);
		$product->name[5] = $product_xml->Products_name;
        $product->description[1] = utf8_encode($product_xml->Description);
		$product->description[5] = utf8_encode($product_xml->Description);
        $product->description_short[1] = utf8_encode($product_xml->Short_Description);
		$product->description_short[5] = utf8_decode($product_xml->Short_Description);
        $product->link_rewrite[1] = Tools::link_rewrite($product_xml->Products_name);
		$product->link_rewrite[5] = Tools::link_rewrite($product_xml->Products_name);
        if (!isset($product->date_add) || empty($product->date_add))
            $product->date_add = date('Y-m-d H:i:s');
        $product->date_upd = date('Y-m-d H:i:s');
        $id_product ? $product->updateCategories(array(2)) : $product->addToCategories(array(2));
        $product->save();

        echo 'Produit <b>'.$product->name[5].'</b> '.($id_product ? 'Mise a jour' : 'cree').'<br />';
    }
}
?>

Mon fichier prod.xml contient les informations suivantes :

<?xml version="1.0" encoding="ISO-8859-1"?>
<Document>
<Products>
<Reference>1101TEST</Reference>
<Valid_internet_product>1</Valid_internet_product>
<Products_name>dedicace épodice</Products_name>
<Price>69.95</Price>
<Active_product>1</Active_product>
<SupplierNo>08</SupplierNo>
<Weight>5</Weight>
<Description>description longue dès que j'ai terminé</Description>
<Short_Description>Description courte et sont dès maintenant en retard</Short_Description>
<MinOrderQty>1</MinOrderQty>
<Categories>
<Category>
<CategoryID>63</CategoryID>
<CategoryName>Bins\Universal</CategoryName>
<Active_category>1</Active_category>
<Changed>0</Changed>
</Category>
</Categories>
<Tax_Class_ID>1</Tax_Class_ID>
<Discount>
<Discount_percentage>percentage</Discount_percentage>
<discountprice_ex_vat>0</discountprice_ex_vat>
<Discountprice_include_vat>0</Discountprice_include_vat>
<Pct_ReductionPercent>0</Pct_ReductionPercent>
</Discount>
</Products>
</Document>

Ca marche bien !

2 problèmes restent :

 

1. Il faudrait que je puisse retrouver la category (la créer s'il elle n'existe pas) et l'associer au produit s'il est nouveau.

 

2. mon fichier XML est en ISO-8859-1 pour le nom produit c'est bon mais pour la description courte et longue je n'ai pas la bonne information. Si j'enlève le utf8_encode() j'obtient une erreur ?!

 

Merci pour votre aide.

 

Romuald

 

Link to comment
Share on other sites

Bonjour,

 

peut être que ce module pourrais vous convenir http://www.prestatoolbox.fr/outils-administration/161-synchroniser-les-quantites-des-produits.html même si il utilise encore l'import csv.

 

Salut Mediacom87,

 

Je ne veux plus utiiliser l'import CSV car je veux pouvoir mettre à jour les informations depuis une application que j'ai développé et qui va mettre les produits 1 par 1 ou 10 par 10 à travers une page PHP que j'appel.

 

Merci pour ta réponse :-)

 

Bye

Edited by RomuGb (see edit history)
Link to comment
Share on other sites

Bonjour,

 

Pour l'association des catégories le code "CategoryID" de ton XML correspond à ton id interne ou à celui Prestashop ?

Dans le cas ou c'est ton id interne, il pourrait être utile de surcharger le modèle Category et d'interfacer ce paramètre.

Cela simplifierais la vérification que la catégorie existe, car la fonction de recherche disponible dans prestashop est basée sur le nom .. ( Pas très pratique si plusieurs catégories ont le même nom )

Category::searchByName($id_lang, $query, $unrestricted = false);

Pour ajouter le produit à la catégorie si il n'existe pas tu peux ensuite utiliser la fonction suivante de la classe Product

$product->updateCategories(array('idCategory'));
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...