Jump to content

RomuGb

Members
  • Posts

    45
  • Joined

  • Last visited

Profile Information

  • Activity
    Agency

RomuGb's Achievements

Newbie

Newbie (1/14)

5

Reputation

  1. Ok if you find a solution for 1.6 version please post it here. It will help others. Thanks. Romu
  2. 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
  3. 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
  4. Salut, J'aimerais moi aussi pouvoir mettre à jour mes 10000 articles à travers le webservice. Plutot que d'envoyer un fichier, ne puis-je pas envoyer la reférence produit à ma page PHP qui recherche le produit et mets à jour le stock avec la quantité que j'ai passé en paramètre dans l'url à l'aide du web service ? Aurais-tu un bout de code pour m'aider à faire cela ? Merci. Romuald
  5. 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
  6. Hi everyone ! i have been searching hard to add the remarketing google script in prestashop 1.5.3 : Here is my solution, hope this will help many !!! In /httpdocs/themes/yourtheme/footer.tpl At the end of the code, just before </body> : <!-- google remarketing script --> <script type='text/javascript'> var google_tag_params = { {if $page_name == 'index'} ecomm_pagetype: 'home' {elseif $page_name == 'order'} ecomm_prodid: [{foreach from=$products item=product name=prodid}'{$product.id_product}'{if $smarty.foreach.prodid.last}{else},{/if}{/foreach}], ecomm_pagetype: 'cart', ecomm_totalvalue: '{convertPrice price=$cart->getOrderTotal(true)}' {elseif $page_name == 'product'} ecomm_prodid: '{$product->id}', ecomm_pagetype: 'product', ecomm_totalvalue: '{$product->getPrice(false, $smarty.const.NULL, $priceDisplayPrecision)}' {elseif $page_name == 'order-confirmation'} ecomm_pagetype: 'purchase', ecomm_totalvalue: '{$total_to_pay}' {elseif $page_name == 'category'} ecomm_pagetype: 'category' {else} {/if} }; </script> {literal} <script type="text/javascript"> /* <![CDATA[ */ var google_conversion_id = xxxx mettre ici votre code xxxxxx; var google_custom_params = window.google_tag_params; var google_remarketing_only = true; /* ]]> */ </script> <script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js"> </script> <noscript> <div style="display:inline;"> <img height="1" width="1" style="border-style:none;" alt="" src="//googleads.g.doubleclick.net/pagead/viewthroughconversion/xxxxmettre_ici_votre code_xxxxxx/?value=0&guid=ON&script=0"/> </div> </noscript> {/literal} </body> </html> In /httpdocs/controllers/front/OrderConfirmationController.php (Its better to add this in the override OrderConfirmationController.php but i dont know how to do it, if i could have some help on this ?) public function initContent() { parent::initContent(); $this->context->smarty->assign(array( 'is_guest' => $this->context->customer->is_guest, 'HOOK_ORDER_CONFIRMATION' => $this->displayOrderConfirmation(), 'HOOK_PAYMENT_RETURN' => $this->displayPaymentReturn() )); if ($this->context->customer->is_guest) { $this->context->smarty->assign(array( 'id_order' => $this->id_order, 'reference_order' => $this->reference, 'id_order_formatted' => sprintf('#%06d', $this->id_order), 'email' => $this->context->customer->email )); /* If guest we clear the cookie for security reason */ $this->context->customer->mylogout(); } /* google remarketing */ $order = new Order($this->id_order); $cart = new Cart($order->id_cart); $this->context->smarty->assign(array( 'total_to_pay'=>$order->getOrdersTotalPaid() )); /* google remarketing */ $this->setTemplate(_PS_THEME_DIR_.'order-confirmation.tpl'); } Enjoy !!!
  7. Thanks DevNet. In fact it's 7000 product ^^ I dont know the native module that can import in background and close your browser !!! I use the import function in prestashop backoffice. Its not automatique at all... And it requires a execution time very long which is not accepted by providers... Can you tell me more about your module ? Where do you fid it ? Thanks Bye
  8. Hi Devnet, Thanks for your reply. I already use the prestashop's import function with CSV file but it takes 1 hour because i have 7000 thousand product. And i have to do it Twice a week so its king of a pain in the a... Thanks anyway. romu
  9. Hi, I'd like to create a php page, in prestashop, that can be called with a http get/send request. I will send parameters (stock, price, description, product reference i have in my Excel file ...) to the php page that will look for the product with the manufacturer product reference, and update the product. I guess that will be much faster than the prestashop webservices. Do you have any model of php page that can help me to begin ? Or maybe a module that can do that ? Thanks for your help.
  10. Bon pour info, j'ai mis la fonction getAllMessage(); dans classes/orders.php et cela marche comme cela mais j'ai du toucher au coeur de Prestashop, alors il faudrait soit faire un override soit faire la fonction dans module/mailalerts/mailalerts.php mais je n'y arrive pas... Ca ne marchait pas quand je faisais le code ci-dessous dans la page mailalerts.php : public function getAllMessage() { return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT `message` FROM `'._DB_PREFIX_.'message` WHERE `id_order` = '.(int)$this->id.' ORDER BY `id_message` '); } $TousMessages = this->getAllMessage(); foreach ($TousMessages as $value) { $message.= $value['message'] . '<br />'; } je n'avais pas les bonnes informations. Si quelqu'un sait comment faire pour mettre la requète dans la page mailalerts.php ?? Merci.
  11. Ok Domi, j'ai bien compris les manips. $value['message'] => message est le champ extrait de la requête SQL, ça c'est bon... J'ai mis la fonction getAllMessage() dans la page mailalerts : public function getAllMessage() { return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT `message` FROM `'._DB_PREFIX_.'message` WHERE `id_order` = '.(int)$this->id.' ORDER BY `id_message` '); } à la suite des fonctions déjà présentes. Mon code d'appel à la fonction : $TousMessages = getAllMessage(); foreach ($TousMessages as $value) { $message.= $value['message'] . '<br />'; } Ca marche pas, il ne trouve pas la fonction ?! Il faut définir ou se trouve la fonction ? $TousMessages = ??->getAllMessage(); Merci d'avance.
  12. Salut domi, Ok j'essai cette manip. Mais pourquoi message dans indice tableau ??? foreach ($TousLesMessages as $value) { $messages .= $value['message'] . '<br />'; } D'où vient ce 'message' ?? Merci.
  13. Hello Domi, bon ça marche pas, il n'y a rien dans le commentaire c'est vide. Voici le code : Dans classes/order/order.php à la ligne 500 j'ai rajouter la fonction getAllMessage() avec tous les messages issue de la requète : public function getAllMessage() { return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT `message` FROM `'._DB_PREFIX_.'message` WHERE `id_order` = '.(int)$this->id.' ORDER BY `id_message` '); } Dans MailAlerts.php vous avez dans ligne 275 : $TousMessages = $order->getAllMessage(); foreach ($TousLesMessages as $value) { $message .= $value['TousLesMessages '] . '<br />'; } J'ai aussi essayé ça : $TousMessages = $order->getAllMessage(); foreach ($TousMessages as $cle => $element) { $message .= $element[$cle] . '<br />'; } Puis plus dans dans la même page, j'ai l'attribution des variables pour l'email à envoyer : $template_vars = array( '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{delivery_block_txt}' => MailAlert::getFormatedAddress($delivery, "\n"), '{invoice_block_txt}' => MailAlert::getFormatedAddress($invoice, "\n"), '{delivery_block_html}' => MailAlert::getFormatedAddress($delivery, '<br />', array( 'firstname' => '<span style="color:#DB3484; font-weight:bold;">%s</span>', 'lastname' => '<span style="color:#DB3484; font-weight:bold;">%s</span>')), '{invoice_block_html}' => MailAlert::getFormatedAddress($invoice, '<br />', array( 'firstname' => '<span style="color:#DB3484; font-weight:bold;">%s</span>', 'lastname' => '<span style="color:#DB3484; font-weight:bold;">%s</span>')), '{delivery_company}' => $delivery->company, '{delivery_firstname}' => $delivery->firstname, '{delivery_lastname}' => $delivery->lastname, '{delivery_address1}' => $delivery->address1, '{delivery_address2}' => $delivery->address2, '{delivery_city}' => $delivery->city, '{delivery_postal_code}' => $delivery->postcode, '{delivery_country}' => $delivery->country, '{delivery_state}' => $delivery->id_state ? $delivery_state->name : '', '{delivery_phone}' => $delivery->phone, '{delivery_other}' => $delivery->other, '{invoice_company}' => $invoice->company, '{invoice_firstname}' => $invoice->firstname, '{invoice_lastname}' => $invoice->lastname, '{invoice_address2}' => $invoice->address2, '{invoice_address1}' => $invoice->address1, '{invoice_city}' => $invoice->city, '{invoice_postal_code}' => $invoice->postcode, '{invoice_country}' => $invoice->country, '{invoice_state}' => $invoice->id_state ? $invoice_state->name : '', '{invoice_phone}' => $invoice->phone, '{invoice_other}' => $invoice->other, '{order_name}' => sprintf('%06d', $order->id), '{shop_name}' => Configuration::get('PS_SHOP_NAME'), '{date}' => $order_date_text, '{carrier}' => (($carrier->name == '0') ? Configuration::get('PS_SHOP_NAME') : $carrier->name), '{payment}' => Tools::substr($order->payment, 0, 32), '{items}' => $items_table, '{total_paid}' => Tools::displayPrice($order->total_paid, $currency), '{total_products}' => Tools::displayPrice($order->getTotalProductsWithTaxes(), $currency), '{total_discounts}' => Tools::displayPrice($order->total_discounts, $currency), '{total_shipping}' => Tools::displayPrice($order->total_shipping, $currency), '{total_wrapping}' => Tools::displayPrice($order->total_wrapping, $currency), '{currency}' => $currency->sign, '{message}' => $message ); Je n'optiens rien, alors que je voudrais dans l'email avoir : Message du client : message 1 <br /> message 2 <br /> message 3 <br /> Une idée ? Merci.
  14. Merci Domi, Bon n'étant pas un très fort en php, je suppose que les données tableau retournée par la requête Db::getInstance()->ExecuteS('requete SELECT SQL') revient dans $message Faut-il déclarer $message comme un tableau ? Je dois maintenant faire foreach ($message as $i => $value) { $TousLesMessages.= $value . "<br>"; } la variable $TousLesMessages devrait contenir : message 1+<br>message2<br>... ? c'est bon ? Merci.
×
×
  • Create New...