sebwvs Posted January 9, 2018 Share Posted January 9, 2018 Bonjour à tous, je viens de remarquer quelque chose qui me perturbe... je créé un code promo, je le paramètre et je décide de ne pas le mettre en avant ! (code qui sera donné au coup par coup après une inscription sur instagram) le code ne s'affiche donc pas sous le champs "bon de réduction" dans le récapitulatif de commande ! jusque la normal c'est ce que je veux ! par contre le code s'affiche dans la section "mon compte" > "mes bons de réductions" ! perso ça je trouve pas ça normal "vue que on ne souhaite pas le "mettre en avant" alors l'idée serait "je pense" aller modifier le fichier "discount.tpl" en y ajoutant une condition d'affichage à la ligne : <td class="discount_code">{$discountDetail.code}</td> et remplacer par <td class="discount_code">{if $xxxxx == 1}{$discountDetail.code}{/if}</td> le problème, c'est que je ne trouve pas la variable utilisé lorsque l'on paramètre le bouton "mettre en avant" si je ne me trompe, ce bouton devrait enregistrer un 1 ou 0 dans la bdd et pourrait donc être récupéré et utilisé en condition d'affichage ? non ? merci pour votre aide ou vos pistes version presta: 1.6.0.11 Link to comment Share on other sites More sharing options...
Eolia Posted January 9, 2018 Share Posted January 9, 2018 Sujet déjà répondu il y a plus d'un an et corrigé 1 Link to comment Share on other sites More sharing options...
sebwvs Posted January 9, 2018 Author Share Posted January 9, 2018 il y a 1 minute, Eolia a dit : Sujet déjà répondu il y a plus d'un an et corrigé merci Eolia, ça fait plus de 2h que je cherche avant de poster! tu n as plus le lien du post par hasard ou une idée ou le retrouver ? francophone, english, ..? merci d'avance Eolia Link to comment Share on other sites More sharing options...
Eolia Posted January 9, 2018 Share Posted January 9, 2018 https://www.prestashop.com/forums/topic/552166-règle-panier-pb-code-promo-visible/ https://www.prestashop.com/forums/topic/596662-resolu-bon-de-réduction-visible-de-tous-bug-1616/ https://www.prestashop.com/forums/topic/552703-mise-en-avant-bon-de-réduction/ https://www.prestashop.com/forums/topic/615446-affichage-des-bons-de-réduction/ J'arrête là^^ Link to comment Share on other sites More sharing options...
sebwvs Posted January 9, 2018 Author Share Posted January 9, 2018 il y a 39 minutes, Eolia a dit : https://www.prestashop.com/forums/topic/552166-règle-panier-pb-code-promo-visible/ https://www.prestashop.com/forums/topic/596662-resolu-bon-de-réduction-visible-de-tous-bug-1616/ https://www.prestashop.com/forums/topic/552703-mise-en-avant-bon-de-réduction/ https://www.prestashop.com/forums/topic/615446-affichage-des-bons-de-réduction/ J'arrête là^^ Eolia, Avant tout un grand merci pour ton aide rapide et pertinente ! le 3em liens proposé correspond +/- à ma recherche : explication : en appliquant le remplacement de code dans "DiscountController.php" comme tu le proposes, cela va effectivement faire "disparaître" tous les bons de réductions non nominatif de l'affichage dans mes bon de réductions grâce à la condition d'affichage qui contrôle je suppose "si le client a ou non un bon de réduction nominatif" Mais je me demandai, si ce n'était pas "mieux" de laisser afficher tous les codes de réductions au quel un client a droit "pour autant que le bouton "mettre en avant" est été coché et de faire l’exception d'affichage lorsque ce n'est pas le cas ! je sais pas si je suis clair dans ma logique ? et je reviens donc sur ma question > pour quoi n'utilise ton pas la même condition d'affichage que dans le récapitulatif de commande qui lui est géré avec le bouton "mettre en avant" et sur oui ou non j’espère que tu me comprend dans mon petit chinois.... Link to comment Share on other sites More sharing options...
Eolia Posted January 9, 2018 Share Posted January 9, 2018 c'est la propriété highlight, donc $discount['highlight'] devrait vous convenir 1 Link to comment Share on other sites More sharing options...
sebwvs Posted January 9, 2018 Author Share Posted January 9, 2018 il y a 9 minutes, Eolia a dit : c'est la propriété highlight, donc $discount['highlight'] devrait vous convenir c'est totalement ça ! Bravo Eolia ! tu es super fortiche maintenant cela colle avec ma logique et j espère que se sera utile a d'autre ! je l'avais survolé en vérifiant le name du input dans le bo mais pas osé l'essayé ! donc en gros celui qui cherche la même solution que moi voici le code à remplacer dans le fichier "DiscountController.php" class DiscountControllerCore extends FrontController { public $auth = true; public $php_self = 'discount'; public $authRedirection = 'discount'; public $ssl = true; /** * Assign template vars related to page content * @see FrontController::initContent() */ public function initContent() { parent::initContent(); $cart_rules = CartRule::getCustomerCartRules($this->context->language->id, $this->context->customer->id, true, false); $nb_cart_rules = count($cart_rules); foreach ($cart_rules as $key => &$discount ) { if ($discount['quantity_for_user'] == 0 || $discount['gift_product'] != 0 || !$discount['highlight']) { unset($cart_rules[$key]); } $discount['value'] = Tools::convertPriceFull( $discount['value'], new Currency((int)$discount['reduction_currency']), new Currency((int)$this->context->cart->id_currency) ); } $this->context->smarty->assign(array( 'nb_cart_rules' => (int)$nb_cart_rules, 'cart_rules' => $cart_rules, 'discount' => $cart_rules, 'nbDiscounts' => (int)$nb_cart_rules) ); $this->setTemplate(_PS_THEME_DIR_.'discount.tpl'); } } encore un énorme merci à Eolia Link to comment Share on other sites More sharing options...
Eolia Posted January 9, 2018 Share Posted January 9, 2018 1 Link to comment Share on other sites More sharing options...
DrOSX Posted March 23, 2018 Share Posted March 23, 2018 Merci pour ces indications. SuR Prestashop. 1.6.1, je n'ai pas de fichier discountcontroller.php mais uniquement Discount.php (dans /www/classes/Discount.php) avec le code ci-dessous. Est-ce bien le code à remplacer ? Merci d'avance, <?php /* * 2007-2015 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/osl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2015 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ /** * @deprecated 1.5.0.1 */ class DiscountCore extends CartRule { const PERCENT = 1; const AMOUNT = 2; const FREE_SHIPPING = 3; public function __get($key) { Tools::displayAsDeprecated(); if ($key == 'id_group') { return 0; } if ($key == 'id_discount_type') { if ($this->free_shipping) { return Discount::FREE_SHIPPING; } if ($this->reduction_percent > 0) { return Discount::PERCENT; } if ($this->reduction_amount > 0) { return Discount::AMOUNT; } } if ($key == 'name') { return $this->code; } if ($key == 'value') { if ($this->reduction_percent > 0) { return $this->reduction_percent; } if ($this->reduction_amount > 0) { return $this->reduction_amount; } } if ($key == 'cumulable') { return $this->cart_rule_restriction; } if ($key == 'cumulable_reduction') { return false; } if ($key == 'minimal') { return $this->minimum_amount; } if ($key == 'include_tax') { return $this->reduction_tax; } if ($key == 'behavior_not_exhausted') { return $this->partial_use; } if ($key == 'cart_display') { return true; } return $this->{$key}; } public function __set($key, $value) { Tools::displayAsDeprecated(); if ($key == 'id_discount_type') { if ($value == Discount::FREE_SHIPPING) { $this->free_shipping = true; $this->reduction_percent = false; $this->reduction_amount = false; } if ($value == Discount::PERCENT) { $this->free_shipping = false; $this->reduction_percent = true; $this->reduction_amount = false; } if ($value == Discount::AMOUNT) { $this->free_shipping = false; $this->reduction_percent = false; $this->reduction_amount = true; } } if ($key == 'code') { $this->name[Configuration::get('PS_LANG_DEFAULT')] = $value; } if ($key == 'value') { if ($this->reduction_percent) { $this->reduction_percent = $value; } if ($this->reduction_amount) { $this->reduction_amount = $value; } } if ($key == 'cumulable') { $this->cart_rule_restriction = 1; } if ($key == 'minimal') { $this->minimum_amount = $value; } if ($key == 'include_tax') { $this->reduction_tax = $value; } if ($key == 'behavior_not_exhausted') { $this->partial_use = $value; } $this->{$key} = $value; } public function __call($method, $args) { Tools::displayAsDeprecated(); $obj = $this->parent; if (in_array($method, array('add', 'update', 'getIdByName', 'getCustomerDiscounts', 'getValue', 'discountExists', 'createOrderDiscount', 'getVouchersToCartDisplay', 'display'))) { $obj = $this; } return call_user_func_array(array($obj, $method), $args); } /** * @deprecated 1.5.0.1 */ public function add($autodate = true, $nullValues = false, $categories = null) { $r = parent::add($autodate, $nullValues); // Todo : manage categories return $r; } /** * @deprecated 1.5.0.1 */ public function update($autodate = true, $nullValues = false, $categories = null) { $r = parent::update($autodate, $nullValues); // Todo : manage categories return $r; } /** * @deprecated 1.5.0.1 */ public static function getIdByName($code) { return parent::getIdByCode($code); } /** * @deprecated 1.5.0.1 */ public static function getCustomerDiscounts($id_lang, $id_customer, $active = false, $includeGenericOnes = true, $hasStock = false, Cart $cart = null) { return parent::getCustomerCartRules($id_lang, $id_customer, $active, $includeGenericOnes, $hasStock, $cart); } /** * @deprecated 1.5.0.1 */ public static function getVouchersToCartDisplay($id_lang, $id_customer) { return CartRule::getCustomerCartRules($id_lang, $id_customer); } /** * @deprecated 1.5.0.1 */ public function getValue($nb_discounts = 0, $order_total_products = 0, $shipping_fees = 0, $id_cart = false, $useTax = true, Currency $currency = null, Shop $shop = null) { $context = Context::getContext(); if ((int)$id_cart) { $context->cart = new Cart($id_cart); } if (Validate::isLoadedObject($currency)) { $context->currency = $currency; } if (Validate::isLoadedObject($shop)) { $context->shop = $shop; } return parent::getContextualValue($useTax, $context); } /** * @deprecated 1.5.0.1 */ public static function discountExists($discountName, $id_discount = 0) { return parent::cartRuleExists($discountName); } /** * @deprecated 1.5.0.1 * @param Order $order * @return Discount */ public static function createOrderDiscount($order, $productList, $qtyList, $name, $shipping_cost = false, $id_category = 0, $subcategory = 0) { $products = $order->getProducts(false, $productList, $qtyList); // Totals are stored in the order currency (or at least should be) $total = $order->getTotalProductsWithTaxes($products); $discounts = $order->getDiscounts(true); $total_tmp = $total; foreach ($discounts as $discount) { if ($discount['id_discount_type'] == Discount::PERCENT) { $total -= $total_tmp * ($discount['value'] / 100); } elseif ($discount['id_discount_type'] == Discount::AMOUNT) { $total -= ($discount['value'] * ($total_tmp / $order->total_products_wt)); } } if ($shipping_cost) { $total += $order->total_shipping; } // create discount $voucher = new Discount(); $voucher->id_discount_type = Discount::AMOUNT; foreach (Language::getIDs((bool)$order) as $id_lang) { $voucher->description[$id_lang] = strval($name).(int)($order->id); } $voucher->value = (float)($total); $voucher->name = 'V0C'.(int)($order->id_customer).'O'.(int)($order->id); $voucher->id_customer = (int)($order->id_customer); $voucher->id_currency = (int)($order->id_currency); $voucher->quantity = 1; $voucher->quantity_per_user = 1; $voucher->cumulable = 1; $voucher->cumulable_reduction = 1; $voucher->minimal = (float)($voucher->value); $voucher->active = 1; $voucher->cart_display = 1; $now = time(); $voucher->date_from = date('Y-m-d H:i:s', $now); $voucher->date_to = date('Y-m-d H:i:s', $now + (3600 * 24 * 365.25)); /* 1 year */ if (!$voucher->validateFieldsLang(false) || !$voucher->add()) { return false; } // set correct name $voucher->name = 'V'.(int)($voucher->id).'C'.(int)($order->id_customer).'O'.$order->id; if (!$voucher->update()) { return false; } return $voucher; } /** * @deprecated 1.5.0.1 */ public static function display($value, $type, $currency = null) { if ((float)$value && (int)$type) { if ($type == 1) { return $value.chr(37); } // ASCII #37 --> % (percent) elseif ($type == 2) { return Tools::displayPrice($value, $currency); } } return ''; // return a string because it's a display method } } Link to comment Share on other sites More sharing options...
Eolia Posted March 23, 2018 Share Posted March 23, 2018 Non, vous n'êtes pas du tout dans le bon fichier. Regardez dans le répertoire /controllers/front svp^^ Link to comment Share on other sites More sharing options...
DrOSX Posted March 23, 2018 Share Posted March 23, 2018 56 minutes ago, Eolia said: Non, vous n'êtes pas du tout dans le bon fichier. Regardez dans le répertoire /controllers/front svp^^ Merci Link to comment Share on other sites More sharing options...
Nordine B Posted March 31, 2021 Share Posted March 31, 2021 Bonjour, Ayant la version 1.7.5.2 de Prestashop, j'ai le même besoin de masquer les codes promos avec le paramètre ''mettre en avant'' = NON. Le code contenu dans le fichier .../controllers /front/DiscountController.php est très différent du fichier en v1.6. Auriez vous svp la solution ? Link to comment Share on other sites More sharing options...
Nordine B Posted April 1, 2021 Share Posted April 1, 2021 Bonjour, J'ai finalement trouvé une solution à mon problème d'affichage des codes promos sur le compte client. -> Je partage. Je ne sais pas si cela est la meilleure solution (ex : risque de pb lors des montées de versions), mais cette solution est très simple à faire. La solution consiste à modifier le fichier suivant ... /themes /classic /templates /customer / discount.tpl Dans les 2 boucles (foreach) permettant le construire la liste des codes promos, il faut encadrer le bloc d'instruction avec une condition (if). Cette condition est que l'option ''Mettre en avant'' (highlight) de la réduction soit activée (valeur 1). 2 fois 2 lignes (cf ci-dessous en gras) de code suffisent pour ne plus voir apparaitre la réduction qui ne doit pas être mise en avant dans la rubrique ''Bons de réduction'' du compte client. Il est important de faire l'ajout dans les 2 boucles (foreach) car l'une est utilisée pour l'affichage desktop, et l'autre pour l'affichage smartphone. Quote {foreach from=$cart_rules item=cart_rule} {if $cart_rule.highlight == 1} .... {/if} {/foreach} 18 hours ago, Nordine B said: Bonjour, Ayant la version 1.7.5.2 de Prestashop, j'ai le même besoin de masquer les codes promos avec le paramètre ''mettre en avant'' = NON. Le code contenu dans le fichier .../controllers /front/DiscountController.php est très différent du fichier en v1.6. Auriez vous svp la solution ? 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