Cacahouet Posted March 3, 2017 Share Posted March 3, 2017 Bonjour à tous, Je sollicite votre aide car je bloque... HELP ! J'utilise un service web pour le stock de mes produits (simplement pour afficher la quantité) qui fonctionne avec la référence produit. J'ai donc créé une fonction dans FrontController.php en override comme ceci : <?php class FrontController extends FrontControllerCore { public function initHeader(){ $clienttest = new SoapClient('webservice.awws?wsdl'); $reftest = $this->product->reference; $paramstest = array('codeart'=>$reftest); $responsetest = $clienttest->__soapCall('quantite', array($paramstest)); foreach($responsetest as $valeurtest) { } self::$smarty->assign('testtest', $valeurtest); return parent::initHeader(); } } J'arrive bien a afficher $valeurtest dans product.tpl mais pas dans product-list.tpl, il faudrait en fait que je puisse récupérer la référence du produit de product-list.tpl pour l'inclure dans ma fonction et je ne sais pas comment faire. Quelqu'un aurait une idée ? Merci Link to comment Share on other sites More sharing options...
Cacahouet Posted March 3, 2017 Author Share Posted March 3, 2017 Ma version de Prestashop : 1.6.1.9 Link to comment Share on other sites More sharing options...
Cacahouet Posted March 3, 2017 Author Share Posted March 3, 2017 Je ne pense pas que ce soit la bonne solution d'utiliser le frontcontroller. Tu n'as pas toujours un $product dedans. Regardes la class Product.php et la methode getProductsProperties Tu pourras set ton stock partout. Merci de ta réponse Je me doutais un peu qu'il fallait passer par Product.php. Une idée pour le mettre en place ? Je suis largué.. surtout pour la fonction a utiliser... Link to comment Share on other sites More sharing options...
Cacahouet Posted March 3, 2017 Author Share Posted March 3, 2017 Tu fais pareils tu overrides la classe Product.php Et ici par exemple : https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/classes/Product.php#L4390 Tu mets en dessous : $clienttest = new SoapClient('webservice.awws?wsdl'); $reftest = $row['reference']; $paramstest = array('codeart'=>$reftest); $responsetest = $clienttest->__soapCall('quantite', array($paramstest)); $row['quantity_from_webserice'] = $responsetest; Pas besoin d'assigner à smarty vu que $row est ensuite assigné. Désolé je suis novice, donc en gros je colle (ligne 4390 de Product.php) ça : $clienttest = new SoapClient('webservice.awws?wsdl'); $reftest = $row['reference']; $paramstest = array('codeart'=>$reftest); $responsetest = $clienttest->__soapCall('quantite', array($paramstest)); $row['quantity_from_webserice'] = $responsetest; et ensuite dans l'override comment ça se passe ? Quelle valeur dois je mettre dans mes tpl ? Merci encore Link to comment Share on other sites More sharing options...
Cacahouet Posted March 3, 2017 Author Share Posted March 3, 2017 J'ai pas pensé à te poser la question mais tu as pas une limite avec ton web service ? Moi je ferais une tâche cron toutes les X heures Je n'ai pas encore vu avec mon web service, mais merci du conseil Link to comment Share on other sites More sharing options...
Cacahouet Posted March 3, 2017 Author Share Posted March 3, 2017 Aie c'est pas évident, j'ai essayé de passer comme tu m'as dit Product.php en override avec ce code : <?php class Product extends ProductCore { public static function getProductProperties($id_lang, $row, Context $context = null) { if (!$row['id_product']) { return false; } if ($context == null) { $context = Context::getContext(); } $id_product_attribute = $row['id_product_attribute'] = (!empty($row['id_product_attribute']) ? (int)$row['id_product_attribute'] : null); // Product::getDefaultAttribute is only called if id_product_attribute is missing from the SQL query at the origin of it: // consider adding it in order to avoid unnecessary queries $row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']); if (Combination::isFeatureActive() && $id_product_attribute === null && ((isset($row['cache_default_attribute']) && ($ipa_default = $row['cache_default_attribute']) !== null) || ($ipa_default = Product::getDefaultAttribute($row['id_product'], !$row['allow_oosp'])))) { $id_product_attribute = $row['id_product_attribute'] = $ipa_default; } if (!Combination::isFeatureActive() || !isset($row['id_product_attribute'])) { $id_product_attribute = $row['id_product_attribute'] = 0; } // Tax $usetax = Tax::excludeTaxeOption(); $cache_key = $row['id_product'].'-'.$id_product_attribute.'-'.$id_lang.'-'.(int)$usetax; if (isset($row['id_product_pack'])) { $cache_key .= '-pack'.$row['id_product_pack']; } if (isset(self::$producPropertiesCache[$cache_key])) { return array_merge($row, self::$producPropertiesCache[$cache_key]); } // Datas $row['category'] = Category::getLinkRewrite((int)$row['id_category_default'], (int)$id_lang); $row['link'] = $context->link->getProductLink((int)$row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']); $row['attribute_price'] = 0; if ($id_product_attribute) { $row['attribute_price'] = (float)Product::getProductAttributePrice($id_product_attribute); } $row['price_tax_exc'] = Product::getPriceStatic( (int)$row['id_product'], false, $id_product_attribute, (self::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6) ); if (self::$_taxCalculationMethod == PS_TAX_EXC) { $row['price_tax_exc'] = Tools::ps_round($row['price_tax_exc'], 2); $row['price'] = Product::getPriceStatic( (int)$row['id_product'], true, $id_product_attribute, 6 ); $row['price_without_reduction'] = Product::getPriceStatic( (int)$row['id_product'], false, $id_product_attribute, 2, null, false, false ); } else { $row['price'] = Tools::ps_round( Product::getPriceStatic( (int)$row['id_product'], true, $id_product_attribute, 6 ), (int)Configuration::get('PS_PRICE_DISPLAY_PRECISION') ); $row['price_without_reduction'] = Product::getPriceStatic( (int)$row['id_product'], true, $id_product_attribute, 6, null, false, false ); } $row['reduction'] = Product::getPriceStatic( (int)$row['id_product'], (bool)$usetax, $id_product_attribute, 6, null, true, true, 1, true, null, null, null, $specific_prices ); $row['specific_prices'] = $specific_prices; $row['quantity'] = Product::getQuantity( (int)$row['id_product'], 0, isset($row['cache_is_pack']) ? $row['cache_is_pack'] : null ); $row['quantity_all_versions'] = $row['quantity']; if ($row['id_product_attribute']) { $row['quantity'] = Product::getQuantity( (int)$row['id_product'], $id_product_attribute, isset($row['cache_is_pack']) ? $row['cache_is_pack'] : null ); } $row['id_image'] = Product::defineProductImage($row, $id_lang); $row['features'] = Product::getFrontFeaturesStatic((int)$id_lang, $row['id_product']); $row['attachments'] = array(); if (!isset($row['cache_has_attachments']) || $row['cache_has_attachments']) { $row['attachments'] = Product::getAttachmentsStatic((int)$id_lang, $row['id_product']); } $row['virtual'] = ((!isset($row['is_virtual']) || $row['is_virtual']) ? 1 : 0); // Pack management $row['pack'] = (!isset($row['cache_is_pack']) ? Pack::isPack($row['id_product']) : (int)$row['cache_is_pack']); $row['packItems'] = $row['pack'] ? Pack::getItemTable($row['id_product'], $id_lang) : array(); $row['nopackprice'] = $row['pack'] ? Pack::noPackPrice($row['id_product']) : 0; if ($row['pack'] && !Pack::isInStock($row['id_product'])) { $row['quantity'] = 0; } $row['customization_required'] = false; if (isset($row['customizable']) && $row['customizable'] && Customization::isFeatureActive()) { if (count(Product::getRequiredCustomizableFieldsStatic((int)$row['id_product']))) { $row['customization_required'] = true; } } $clienttest = new SoapClient('webservice.awws?wsdl'); $reftest = $row['reference']; $paramstest = array('codeart'=>$reftest); $responsetest = $clienttest->__soapCall('quantite', array($paramstest)); $row['quantity_from_webserice'] = $responsetest; $row = Product::getTaxesInformations($row, $context); self::$producPropertiesCache[$cache_key] = $row; return self::$producPropertiesCache[$cache_key]; } } J'ai ensuite essayé d'utiliser les variables $responsetest et $quantity_from_webserice dans product.tpl mais j'ai toujours un message d'erreur "Undefined index" Link to comment Share on other sites More sharing options...
Cacahouet Posted March 3, 2017 Author Share Posted March 3, 2017 Tu as réussi à faire un override de frontcontroller Tu fais pareil pour la class Product Dedans tu mets la méthode getProductsProperties Et en bas tu mets ton code http://doc.prestashop.com/display/PS16/Overriding+default+behaviors Tu aurais une idée de ce qui bloque avec le code que je viens de faire ? Link to comment Share on other sites More sharing options...
Cacahouet Posted March 3, 2017 Author Share Posted March 3, 2017 Dans ton tpl product tu vois $product['xxxxxx'] Essayes $product['quantity_from_webserice]; Non tjs pas, d'ailleurs dans mon tpl je n'ai pas $product['xxxxxx'] j'ai essayé : {$product->quantity_from_webserice} , $product['quantity_from_webserice'] dans le tpl mais rien ne passe J'ai un message "Undefined index" ou "Undefined property: Product::$quantity_from_webserice" Merci de ton aide Link to comment Share on other sites More sharing options...
Cacahouet Posted March 3, 2017 Author Share Posted March 3, 2017 Tu as supprimé le class index ? Oui a chaque modifs Link to comment Share on other sites More sharing options...
Cacahouet Posted March 3, 2017 Author Share Posted March 3, 2017 Hum c'est vendredi je l'accorde mais logiquement ça devrait fonctionner si ton code au dessus est bon. en dessous de : $row['quantity_from_webserice'] = $responsetest; Tu ajoutes $row['quantity_from_webserice'] = 'montest'; Dans ton tpl tu mets : {$product.quantity_from_webserice|@var_dump} J'ai suivi scrupuleusement tes indications mais tjs un soucis : Fatal error: Cannot use object of type Product Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now