[SI-LINDER-PARTNER-2][OSC] - Refonte du site Internet pour supporter le Responsive Design /* ATTENTION - le design du site ne peut pas être passé en doctype html (html 5) dans la révision 1 du design. bien qu'une révision 2 sera instanciée plus tard (l'année prochaine), il faudra se contenter de nombreux workaround en restant en HTML TRANSITIONAL 4.01 Du fait du nombre massif des éléments DE CETTE PAGE (et de ce qui en découlerait) qui seront à revoir pour transformer le design en design responsive.. .. il est alors plus judicieux de globaliser un TAG unique pour cette tâche pour ne pas alourdir de commentaires le code déjà suffisemment alourdi comme cela! En gros, ici, pour cette méga-tâche, je vais utiliser un format maison de commentaires pour cette tâche précise: --> pour en comprendre les méandres, voir le fichier /[!] - Saphyra-Interactive-TaskList-Explanations/[SI-LINDER-PARTNER-2][OSC]--semantic.php */ // <- [SI-LINDER-PARTNER-2][OSC] - Refonte du site Internet pour supporter le Responsive Design class PriceFormatter { function PriceFormatter() { $this->thePrice = -1; $this->taxClass = -1; $this->qtyBlocks = 1; $this->price_breaks = array(); $this->hasQuantityPrice = false; $this->hiPrice = -1; $this->lowPrice = -1; $this->hasSpecialPrice = false; //tep_not_null($this->specialPrice); $this->specialPrice = NULL; //$prices['specials_new_products_price']; // -> OSC-94 - Prix par palier reservé aux professionnels if ( is_pro_customer() or ! is_null($price_breaks_from_listing) ) // on fournit une liste dans $price_breaks_from_listing, on doit donc autoriser les prix par palier $this->price_breaks_allowed = true; else $this->price_breaks_allowed = false; // <- OSC-94 - Prix par palier reservé aux professionnels $this->Partner_price = -1; } function loadProduct($product_id, $language_id = 1, $listing = NULL, $price_breaks_from_listing = NULL) { global $pfs ,$coeff_partner; $product_id = tep_get_prid($product_id); // only use integers here // returns NULL if the price break information is not yet stored $price_formatter_data = $pfs->getPriceFormatterData($product_id); if (tep_not_null($price_formatter_data)) { //Use data from the cache with some conversions // -> OSC-87 - liste d'articles : ajouter un champ quantité en haut du bouton ajouter if (tep_not_null($price_formatter_data['specials_new_products_price'])) { $price_formatter_data['products_special_price'] = $price_formatter_data['specials_new_products_price']; } if (tep_not_null($price_formatter_data['products_qty_blocks'])) { $price_formatter_data['qtyBlocks'] = $price_formatter_data['products_qty_blocks']; } // <- OSC-87 - liste d'articles : ajouter un champ quantité en haut du bouton ajouter } elseif ($listing == NULL) { //Collect required data $sql = "select pd.products_name, p.products_model, p.products_image, p.products_id," . " p.manufacturers_id, p.products_price, p.products_weight, p.products_quantity," . // -> MARP256 " p.products_cost," . // <- MARP256 " p.products_qty_blocks, p.products_tax_class_id," . " IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price," . " ptdc.discount_categories_id from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on " . " p.products_id = s.products_id left join " . TABLE_PRODUCTS_TO_DISCOUNT_CATEGORIES . " ptdc on " . " p.products_id = ptdc.products_id, " . " " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1'" . " and pd.products_id = p.products_id " . " and p.products_id = '" . (int)$product_id . "'" . " and pd.language_id = '". (int)$language_id ."'"; $product_info_query = tep_db_query($sql); $product_info = tep_db_fetch_array($product_info_query); //Price-breaks $price_breaks_array = array(); $price_breaks_query = tep_db_query("select products_price, products_qty from " . TABLE_PRODUCTS_PRICE_BREAK . " where products_id = '" . (int)$product_id . "' order by products_qty"); while ($price_break = tep_db_fetch_array($price_breaks_query)) { $price_breaks_array[] = $price_break; } //Compose cachable structure $price_formatter_data = array( 'products_price' => $product_info['products_price'], // -> MARP256 'products_cost' => $product_info['products_cost'], // <- MARP256 'products_special_price' => $product_info['specials_new_products_price'], 'products_tax_class_id' => $product_info['products_tax_class_id'], 'discount_categories_id' => $product_info['discount_categories_id'], 'products_name' => $product_info['products_name'], 'products_model' => $product_info['products_model'], 'products_image' => $product_info['products_image'], 'products_weight' => $product_info['products_weight'], 'products_quantity' => $product_info['products_quantity'], 'price_breaks' => $price_breaks_array, 'qtyBlocks' => $product_info['products_qty_blocks']); //Add to cache $pfs->addPriceFormatterData(tep_get_prid($product_id), $price_formatter_data); } else { // data from product listing //Compose cachable structure $price_formatter_data = array( 'products_price' => $listing['products_price'], // -> MARP256 'products_cost' => $listing['products_cost'], // <- MARP256 'products_special_price' => $listing['specials_new_products_price'], 'products_tax_class_id' => $listing['products_tax_class_id'], 'discount_categories_id' => $listing['discount_categories_id'], 'products_name' => $listing['products_name'], 'products_model' => $listing['products_model'], 'products_image' => $listing['products_image'], 'products_weight' => $listing['products_weight'], 'products_quantity' => $listing['products_quantity'], 'price_breaks' => $price_breaks_from_listing, 'qtyBlocks' => $listing['products_qty_blocks']); //Add to cache $pfs->addPriceFormatterData(tep_get_prid($product_id), $price_formatter_data); } //Assign members $this->thePrice = $price_formatter_data['products_price']; $this->taxClass = $price_formatter_data['products_tax_class_id']; $this->qtyBlocks = $price_formatter_data['qtyBlocks']; $this->discount_categories_id = $price_formatter_data['discount_categories_id']; $this->price_breaks = $price_formatter_data['price_breaks']; $this->specialPrice = $price_formatter_data['products_special_price']; $this->hasSpecialPrice = tep_not_null($this->specialPrice); $this->theCost = $price_formatter_data['products_cost']; //Custom $this->hasQuantityPrice = false; $this->hiPrice = $this->thePrice; $this->lowPrice = $this->thePrice; if (count($this->price_breaks) > 0) { $this->hasQuantityPrice = true; foreach($this->price_breaks as $price_break) { $this->hiPrice = max($this->hiPrice, $price_break['products_price']); $this->lowPrice = min($this->lowPrice, $price_break['products_price']); } } /* Change support special prices If any price level has a price greater than the special price lower it to the special price If product is in the shopping_cart $this->price_breaks can be empty */ if (true == $this->hasSpecialPrice && is_array($this->price_breaks)) { foreach($this->price_breaks as $key => $price_break) { $this->price_breaks[$key]['products_price'] = min($price_break['products_price'], $this->specialPrice); } } //end changes to support special prices } function computePrice($qty, $nof_other_items_in_cart_same_cat = 0) { /* **********************************************GESTION DES PARTENAIRE*************************thibautPHILIPPS******/ $partner_price = $this->theCost*$coeff_partner; //Calcule le prix partenaire du produit /* ***********************************************GESTION DES PARTENAIRE*************************thibautPHILIPPS*******/ $qty = $this->adjustQty($qty); // Add the number of other items in the cart from the same category to see if a price break is reached $qty += $nof_other_items_in_cart_same_cat; // Compute base price, taking into account the possibility of a special $price = (true == $this->hasSpecialPrice) ? $this->specialPrice : $this->thePrice; // -> OSC-94 - Prix par palier reservé aux professionnels if (is_array($this->price_breaks) && count($this->price_breaks) > 0 && $this->price_breaks_allowed ) { // <- OSC-94 - Prix par palier reservé aux professionnels foreach($this->price_breaks as $price_break) { if ($qty >= $price_break['products_qty']) { $price = $price_break['products_price']; } } } // end if (is_array($this->price_breaks) && count($this->price_breaks) > 0) return $price; } function adjustQty($qty, $qtyBlocks = NULL) { // Force QTY_BLOCKS granularity if(!tep_not_null($qtyBlocks)) { $qtyBlocks = $this->getQtyBlocks(); } if ($qty < 1) $qty = 1; if ($qtyBlocks >= 1) { if ($qty < $qtyBlocks) $qty = $qtyBlocks; if (($qty % $qtyBlocks) != 0) $qty += ($qtyBlocks - ($qty % $qtyBlocks)); } return $qty; } function getQtyBlocks() { return $this->qtyBlocks; } function get_discount_category() { return $this->discount_categories_id; } function getPrice() { return $this->thePrice; } function getPartnerPrice($coeff_partner){ $partner_price =$this->theCost*$coeff_partner; if ($partner_price > $this->lowPrice) { $price = $this->lowPrice; }else { $price =$partner_price; } return $price; } function getLowPrice() { return $this->lowPrice; } function getHiPrice() { return $this->hiPrice; } function hasSpecialPrice() { return $this->hasSpecialPrice; } function hasQuantityPrice() { return $this->hasQuantityPrice; } function getDiscountSaving($original_price, $discount_price) { if ( $original_price == 0 ) { return '-'; } // VD : avoid div0 error $difference = $original_price - $discount_price; return round (($difference / $original_price) * 100) . '%'; } // -> VDQPBPP135 : possibilité d'aligner les prix à gauche/droite /************************************************************************ [VTAB-TEAM-LINDER-PARTNER-1][OSC][MultiTaskDescriptions]:{ - 1/ comme cette ancienne méthode de classe peut encore être utilisée, on va faire quelques ajustements - 2/ on n'affiche plus jamais de prix barré, on met le nouveau prix avec "promotion" en dessous, donc on supprime définitivement les balises HTML on les efface, on ne les commente pas! mais on conserve entres commentaires PHP la référence PHP des prix promotionnels, dans le cas d'un besoin éventuel, pour ne pas chercher midi à quatorzes heures en cas de besoins */ // ([1])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN function getPriceString($style='productPriceInBox', $align='right') { // <- VDQPBPP135 global $currencies; // If you want to change the format of the price/quantity table // displayed on the product information page, here is where you do it. if(true == $this->hasQuantityPrice) { // -> VDQPBPP135 : affichage de nom de la catégorie entre parenthèse dans le tableau des prix et de la quantité minimum $qt_category = ""; if ( $this->qtyBlocks > 1 ) { $qt_category = " - lot de " . $this->qtyBlocks . " mini"; } if ( $this->get_discount_category() > 0 ) { $sql = tep_db_query("select discount_categories_name from " . TABLE_DISCOUNT_CATEGORIES . " where discount_categories_id = '" . (int)$this->get_discount_category() . "' "); if ( ($tmp = tep_db_fetch_array($sql)) ) { $qt_category .= "
(" . $tmp['discount_categories_name'] . ")"; } } // <- VDQPBPP135 $lc_text = '
'; // -> VDQPBPP135 : affichage de nom de la catégorie entre parenthèse dans le tableau des prix $lc_text .= ''; foreach($this->price_breaks as $price_break) { $lc_text .= ''; } // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Modification informative du texte d'une ligne dans le tableau des prix par palliers * (renommage de l'ancienne constante: "TEXT_PRICE_PER_PIECE" par "TEXT_PRICE_PER_PIECE__HT"). * De fait l'on se sert d'un texte prévenant que dans cette ligne du tableau, les prix affichés sont en HT. * En 2022, cette constante n'est plus utilisée, on utilise à la place "TEXT_PRICE_PER_PIECE_PARTNER__HT". * */ $lc_text .= ''; } else { $lc_text .= '' . $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) . ''; } // -> OSC-94 - Prix par palier reservé aux professionnels if ( ! $this->price_breaks_allowed ) $lc_text .= ''; else // <- OSC-94 - Prix par palier reservé aux professionnels foreach($this->price_breaks as $price_break) { $lc_text .= ''; } $lc_text .= ''; // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Ajout d'une ligne pour le prix TTC dans le tableau des prix par palliers * (utilisation de la nouvelle constante: "TEXT_PRICE_PER_PIECE__TTC"). * */ $lc_text .= ''; } else { // Aucun prix spécial n'existe : $lc_text .= '' . $currencies->afficher_prix_ttc($this->thePrice, tep_get_tax_rate($this->taxClass)) . ''; } // <- OSC-70 : Gestion HT/TTC : affichage prix HT et TTC // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Ajout des colonnes en boucle '; } // Fermeture de la ligne du tableau pour les prix normaux / prix par palliers ET prix spéciaux pour les prix TTC $lc_text .= ''; // Le reste concerne la remise en pourcentage, que ce soit HT ou TTC le pourcentage sera forcément le même, donc on ne touche pas. // // <- OSC-70 : Gestion HT/TTC : affichage prix HT et TTC // Begin saving calculation $lc_text .= ''; if (true == $this->hasSpecialPrice) { $lc_text .= ''; } else { $lc_text .= ''; } // -> OSC-94 - Prix par palier reservé aux professionnels if ( $this->price_breaks_allowed ) // <- OSC-94 - Prix par palier reservé aux professionnels foreach($this->price_breaks as $price_break) { $lc_text .= ''; } $lc_text .= '
' . TEXT_ENTER_QUANTITY . $qt_category . '1+' // <- VDQPBPP135 . '' . $price_break['products_qty'] .'+ 
' . TEXT_PRICE_PER_PIECE_PARTNER__HT . ''; // <- OSC-70 : Créér un double-affichage des prix pour les produits (HT/TTC) if (true == $this->hasSpecialPrice) { // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) $lc_text .= '' . $currencies->display_price($this->specialPrice, tep_get_tax_rate($this->taxClass)) . '' // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END .'zone pro, offres réservées aux professionnels' . $currencies->display_price($price_break['products_price'], tep_get_tax_rate($this->taxClass)) .'
' . TEXT_PRICE_PER_PIECE__TTC . ''; // <- OSC-70 : Gestion HT/TTC : affichage prix HT et TTC // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Ajout de l'information du prix spécial ( est une balise html qui barre un texte). * Prise en charge des prix spéciaux (promotions, soldes, et outlets) s'il en existe ou pas: * Utilisation de la méthode 'afficher_prix_ttc()' de la classe objet currencies au lieu de 'display_price()' * (affichera le prix TTC en gras, d'où la balise ) * */ if (true == $this->hasSpecialPrice) { // Un prix spécial existe : $lc_text .= '' . $currencies->afficher_prix_ttc($this->thePrice, tep_get_tax_rate($this->taxClass)) . '  ' . $currencies->afficher_prix_ttc($this->specialPrice, tep_get_tax_rate($this->taxClass)) . ' ' .' * Prise en charge des prix par palliers s'il en existe ou pas: * Utilisation de la méthode 'afficher_prix_ttc()' de la classe objet currencies au lieu de 'display_price()' * (affichera le prix TTC en gras, d'où la balise ) * */ // -> OSC-94 - Prix par palier reservé aux professionnels if ( $this->price_breaks_allowed ) // <- OSC-94 - Prix par palier reservé aux professionnels foreach($this->price_breaks as $price_break) { $lc_text .= '' . $currencies->afficher_prix_ttc($price_break['products_price'], tep_get_tax_rate($this->taxClass)) .'
' . TEXT_SAVINGS_PERCENT . '' . $this->getDiscountSaving($this->thePrice, $this->specialPrice) .'- ' . $this->getDiscountSaving($this->thePrice, $price_break['products_price']) .'
'; } else { if (true == $this->hasSpecialPrice) { $lc_text = ' ' . $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) . '  ' . $currencies->display_price($this->specialPrice, tep_get_tax_rate($this->taxClass)) . ' '; } else { $lc_text = ' ' . $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) . ' '; } } return $lc_text; } // ([1])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END /* [VTAB-TEAM-LINDER-PARTNER-1][OSC][MultiTaskDescriptions] ************************************************************************/ /* ***********************************************GESTION DES PARTENAIRE*************************thibautPHILIPPS*******/ function getPricePartner($style='productPriceInBox', $align='right') { // <- VDQPBPP135 global $currencies, $coeff_partner; //$coeff_partner = $account['coeff_partner']; $partner_price_precal = $this->theCost*$coeff_partner; if (true == $this->hasSpecialPrice) { $partner_price = min($partner_price_precal, (float)$this->thePrice,(float)$this->specialPrice); } else { $partner_price = min($partner_price_precal, (float)$this->thePrice,(float)$this->lowPrice); } // If you want to change the format of the price/quantity table // displayed on the product information page, here is where you do it. $lc_text = '
'; // -> VDQPBPP135 : affichage de nom de la catégorie entre parenthèse dans le tableau des prix $lc_text .= ''; $lc_text .= ''; // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Modification informative du texte d'une ligne dans le tableau des prix par palliers * (renommage de l'ancienne constante: "TEXT_PRICE_PER_PIECE" par "TEXT_PRICE_PER_PIECE__HT"). * De fait l'on se sert d'un texte prévenant que dans cette ligne du tableau, les prix affichés sont en HT. * */ $lc_text .= ''; } else { $lc_text .= '' . $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) . ''; } // -> OSC-94 - Prix par palier reservé aux professionnels if ( ! $this->price_breaks_allowed ) $lc_text .= ''; if ($partner_price > $this->specialPrice && $this->specialPrice> 0) { $lc_text .=''; /* ***********************************************GESTION DES PARTENAIRE*************************thibautPHILIPPS*******/ } else{ $lc_text .= ''; } $lc_text .= ''; // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Ajout d'une ligne pour le prix TTC dans le tableau des prix par palliers * (utilisation de la nouvelle constante: "TEXT_PRICE_PER_PIECE__TTC"). * */ $lc_text .= ''; } else { // Aucun prix spécial n'existe : $lc_text .= '' . $currencies->afficher_prix_ttc($this->thePrice, tep_get_tax_rate($this->taxClass)) . ''; } // <- OSC-70 : Gestion HT/TTC : affichage prix HT et TTC // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Ajout des colonnes en boucle '; } else { $lc_text .= '';} // Fermeture de la ligne du tableau pour les prix normaux / prix par palliers ET prix spéciaux pour les prix TTC $lc_text .= ''; // Le reste concerne la remise en pourcentage, que ce soit HT ou TTC le pourcentage sera forcément le même, donc on ne touche pas. // // <- OSC-70 : Gestion HT/TTC : affichage prix HT et TTC // Begin saving calculation $lc_text .= ''; if (true == $this->hasSpecialPrice) { $lc_text .= ''; } else { $lc_text .= ''; } // -> OSC-94 - Prix par palier reservé aux professionnels $lc_text .= '
' . TEXT_ENTER_QUANTITY . $qt_category . '1+' // <- VDQPBPP135 . 'Prix partenaire:
' . TEXT_PRICE_PER_PIECE__HT . ''; // <- OSC-70 : Créér un double-affichage des prix pour les produits (HT/TTC) if (true == $this->hasSpecialPrice) { $lc_text .= '' . $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) . '  ' . $currencies->display_price($this->specialPrice, tep_get_tax_rate($this->taxClass)) . ' ' .'zone pro, offres réservées aux professionnels' . $currencies->display_price($this->specialPrice, tep_get_tax_rate($this->taxClass)) . ''.$currencies->display_price($partner_price, tep_get_tax_rate($this->taxClass)).'
' . TEXT_PRICE_PER_PIECE__TTC . ''; // <- OSC-70 : Gestion HT/TTC : affichage prix HT et TTC // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Ajout de l'information du prix spécial ( est une balise html qui barre un texte). * Prise en charge des prix spéciaux (promotions, soldes, et outlets) s'il en existe ou pas: * Utilisation de la méthode 'afficher_prix_ttc()' de la classe objet currencies au lieu de 'display_price()' * (affichera le prix TTC en gras, d'où la balise ) * */ if (true == $this->hasSpecialPrice) { // Un prix spécial existe : $lc_text .= '' . $currencies->afficher_prix_ttc($this->thePrice, tep_get_tax_rate($this->taxClass)) . '  ' . $currencies->afficher_prix_ttc($this->specialPrice, tep_get_tax_rate($this->taxClass)) . ' ' .' * Prise en charge des prix par palliers s'il en existe ou pas: * Utilisation de la méthode 'afficher_prix_ttc()' de la classe objet currencies au lieu de 'display_price()' * (affichera le prix TTC en gras, d'où la balise ) * */ if($partner_price > $this->specialPrice && $this->specialPrice >0 ){ $lc_text .= ''.$currencies->afficher_prix_ttc($this->specialPrice, tep_get_tax_rate($this->taxClass)).' '.$currencies->afficher_prix_ttc($partner_price, tep_get_tax_rate($this->taxClass)).'
' . TEXT_SAVINGS_PERCENT . '' . $this->getDiscountSaving($this->thePrice, $partner_price) .'-
'; if (true == $this->hasSpecialPrice) { $lc_text = ' ' . $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) . '  ' . $currencies->display_price($partner_price, tep_get_tax_rate($this->taxClass)) . ' '; } return $lc_text; } // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Ajoute un mode $type_de_prix à la méthode 'calculate()' de la classe 'shoppingCart'. * * Si l'on ne spécifie pas de valeur à $type_de_prix lorsque l'on appelle cette méthode, on aura par défaut le calcul du PANIER en HT. * Si l'on spécifie 'HT' : le mode de calcul du PANIER sera en calculé en HT (via la fonction tep_add_tax() située dans includes/functions/general.php) * Si l'on spécifie 'TTC' : le mode de calcul du PANIER sera en calculé en TTC (via la fonction prix_avec_taxes() située dans includes/functions/general.php) * */ function getPriceStringShort( $type_de_prix = 'HT' ) { // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC global $currencies; // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * pour les nouveaux produits, page d'index AINSI que les listes de produits (catalogue): * Vérifie si on calcule en HT (via (tep_add_tax()) ou en TTC (via prix_avec_taxes()) * reformatage, retraits de balises HTML superflues, ajouts de styles, restructuration. * */ switch ($type_de_prix) { case 'HT': // sans le calcul des taxes : // Dispose d'un prix promotionnel: if (true == $this->hasSpecialPrice) { $lc_text = ' ' . '' . $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) . '  HT    ' . TEXT_ON_SALE . ' ' . $currencies->display_price($this->specialPrice, tep_get_tax_rate($this->taxClass)) . '  HT '; // Dispose d'un prix démarrant à un pallier (exemple: includes/modules/new_products.php) // -> OSC-94 - Prix par palier reservé aux professionnels } elseif (true == $this->hasQuantityPrice and $this->price_breaks_allowed ) { // <- OSC-94 - Prix par palier reservé aux professionnels $lc_text = '' . TEXT_PRICE_BREAKS . ' ' . $currencies->display_price($this->lowPrice, tep_get_tax_rate($this->taxClass)) . '  HT'; // Dispose d'un prix base à l'unité (exemple: includes/modules/product_listing.php -> index.php) } else { $lc_text = ' ' . $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) . '  HT'; } break; case 'TTC': // avec le calcul des taxes : // Dispose d'un prix promotionnel: if (true == $this->hasSpecialPrice) { $lc_text = '    ' . '' . $currencies->afficher_prix_ttc($this->thePrice, tep_get_tax_rate($this->taxClass)) . '  TTC   ' . TEXT_ON_SALE . ' ' . $currencies->afficher_prix_ttc($this->specialPrice, tep_get_tax_rate($this->taxClass)) . '  TTC '; // Dispose d'un prix démarrant à un pallier (exemple: includes/modules/new_products.php) // -> OSC-94 - Prix par palier reservé aux professionnels } elseif (true == $this->hasQuantityPrice and $this->price_breaks_allowed ) { // <- OSC-94 - Prix par palier reservé aux professionnels // on retire l'espace avant le prix : $lc_text = '' . TEXT_PRICE_BREAKS . '' . $currencies->afficher_prix_ttc($this->lowPrice, tep_get_tax_rate($this->taxClass)) . '  TTC'; // Dispose d'un prix base à l'unité (exemple: includes/modules/product_listing.php -> index.php) } else { $lc_text = '' . $currencies->afficher_prix_ttc($this->thePrice, tep_get_tax_rate($this->taxClass)) . '  TTC'; } break; } return $lc_text; } /************************************************************************ [SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions]:{ - 1/ nouvelle méthode de la classe PriceFormatter pour créér le tableau de prix unitaire (EN LIGNES !) la nouvelle méthode créé pour cette version du design plus en bas passe évidemment aussi par la classe PriceFormatter (ce fichier) la nouvelle méthode sera développée sur la méthode basée ci-dessous: ->getPriceStringShort() pour trouver les lignes de prix unitaires Standard la nouvelle méthode sera nommée getPriceStringShortVersion2() - 2/ usage de symbole € plutôt d'EUR qui vont servir à reformater le prix avec le nouveau design de reformatage de monnaie euros pour cela, on va simplement trouver et remplacer EUR par €, avec en outre une classe CSS pour cibler! - 3/ ici, on va reformater un peu la structure du code pour la rendre plus claire à relire et ajouter un petit avec une classe afin de cibler le texte BRUT: TEXT_ON_SALE d'ailleurs, TEXT_ON_SALE subira une petite transformation logique de "VENTE" en "SOLDE".. car, mince, ça dit "En vente", c'est débile! plutôt faire, dire "En solde", c'est logique! - 4/ - ATTENTION depuis octobre, suite à une demande tardive du client, on renomme "A partir de" (contenu dans TEXT_PRICE_BREAKS) en "Dès
" on pourrait le faire dans la constante PHP, sans str_replace, mais, cela nous obligerait à nous assurer que partout ce texte serait correct, tandis que là, on fait selon l'utilité, c'est mieux! le
ici est purement ajouté par esthétique d'aération. - 5/ - ATTENTION depuis décembre 2020, suite à une demande tardive du client, on renomme à nouveau "Dès
" (contenu dans TEXT_PRICE_BREAKS) en "Quantité
" on pourrait le faire dans la constante PHP, sans str_replace, mais, cela nous obligerait à nous assurer que partout ce texte serait correct, tandis que là, on fait selon l'utilité, c'est mieux! le
ici est purement ajouté par esthétique d'aération. - 6/ - ATTENTION depuis janvier 2021, suite à une demande tardive du client, on renomme à nouveau "Quantité
" (contenu dans TEXT_PRICE_BREAKS) en "Prix dès
" on pourrait le faire dans la constante PHP, sans str_replace, mais, cela nous obligerait à nous assurer que partout ce texte serait correct, tandis que là, on fait selon l'utilité, c'est mieux! le
ici est purement ajouté par esthétique d'aération. - 7/ - ATTENTION depuis janvier 2021, suite à une demande tardive du client, on va devoir afficher désormais les prix différemments selon le profil du client de un masquer les prix HT aux clients PARTICULIERS et non-identifiés (donc VISITEURS), et donc, afficher le prix TTC uniquement à ces clients. de deux masquer les prix TTC aux clients PROFESSIONNELS et PARTENAIRES (ils doivent êtres identifiés au préalable comme tels), et donc, afficher le prix HT uniquement à ces clients. pour ce faire, rien de plus simple, on créé déjà deux variables vierges qui sera valorisée au travers d'une condition PHP qui sera construite tout au début de la méthode (fonction) de la classe, pour détecter le profil du client puis, on se servira de ces variables, qui contiendront à terme le nom d'une classe CSS qui sera stylisée (affichée/ou non) par des règles CSS depuis le fichier de styles CSS principal.. - 8/ - ATTENTION depuis janvier 2021, suite à une demande tardive du client, on va devoir barrer le prix ancien (si le produit est en solde/promotion/à prix réduit) par une barre oblique au lieu de horizontale la version horizontale pose problème car le symbole € y est barré différemment (à une hauteur différente), c'est logique, il s'agit de la balise qui utilise le font-kerning par défaut du symbole € on va donc remplacer le et par une autre structure composée de et (à la place de et ) le tout contenant un
qui s'ouvre et se ferme autour de l'élément puis, styliser tout cela à travers une classe CSS que l'on donnera au nouveau et
- 9/ - ATTENTION depuis janvier 2021, suite à une demande tardive du client, on va devoir revoir le terme (si le produit est en solde/promotion/à prix réduit) par un autre on renomme à nouveau le terme (contenu dans TEXT_PRICE_BREAKS) en "Promotion" on pourrait le faire dans la constante PHP, sans str_replace, mais, cela nous obligerait à nous assurer que partout ce texte serait correct, tandis que là, on fait selon l'utilité, c'est mieux! à noter que ce terme est aussi à remplacer par le même terme dans le fichier: includes/modules/product_listing.php (voir CODETAG[TEXT_ON_SALE_RENAMED_PREGMATCHED_HERE]) [VTAB-TEAM-LINDER-PARTNER-1][OSC][MultiTaskDescriptions] - Revue de la charte Graphique: - 1/ on va modifier quelque peu la mention de "Promotion" une fois encore, de "Promotion" on va passer en un élément HTML balisé et accessible depuis une classe CSS la mention restera toutefois "Promotion" et enfin, cela servira plus tard pour la cibler depuis une règle CSS afin de la restyliser proprement sous forme d'étiquette maison, non gérée par UIKit - 2/ changement de la span en div afin de faciliter sa "stylisation" en css - 3/ suppression de saut(s) de ligne HTML ici - 4/ suppression des   superflus - 5/ suite à la demande du client, on commente l'ancien prix barré - 6/ suite à la demande du client, on modifie le terme 'Prix dès' par 'Dès' - 7/ on place le nouveau prix avant l'affichage du texte "Promotion". déplacé de là (voir CODETAG[VTAB_1_PRICE_FORMATTER_NEW_PRICE_MOVED_FROM]) vers là (voir CODETAG[VTAB_1_PRICE_FORMATTER_NEW_PRICE_MOVED_INTO]) - 8/ dans le but de davantage pouvoir avoir en [10] et valorisé en [9] un granularité beaucoup plus précise dans le ciblage CSS on ajoute une variable spéciale PHP qui nous aidera à délimiter le profil commercial du client - 9/ on va valoriser la variable déclarée en [8] selon si le client est un partenaire ou bien si le client est un professionnel à travers une petite vérification qui trouvera le profil du client si le client est un partenaire : pf:Partenaire si le client est un professionnel : pf:Professionnel si le client n'est ni l'un ni l'autre : pf:Standard l'instruction (else if) évite le cas où le client est en même temps un Professionnel qui est un Partenaire: si le client est un Partenaire, la vérification sera résultante en Partenaire, peu importe si il est Professionnel. le 'pf:' indique juste que nous passons par la classe PriceFormatter quand à l'origine de l'injection de la nouvelle donnée dynamique. - 10/ on injecte la nouvelle donnée dynamique renseignée en [9] de manière à donner à chaque colonne un ciblage bien plus précis du profil client cela pourra ensuite servir dans une règle CSS pour cibler l'élément généré - 11/ ISSUE - BUG : $is_partner renvoie NULL parfois dans certains cas où l'on est pourtant partenaire: en cause: la variable n'est pas existante.. BUGFIX: globaliser la variable $is_partner (cette variable est définie depuis le /includes/application_top.php suite à une requête SQL), et ici, il faut donc la passer à la classe modifier les arguments de la méthode serait risqué, donc, le mieux c'est de globaliser la variable $is_partner pour s'en servir NOTE: pour informations, lorsque l'on tape: global $var PHP déclare cela : $GLOBALS['var'] = VALEUR DANS LA PILE MEMOIRE DE PHP DE LA VARIABLE INITIALE: $var Cela fonctionne aussi qu'importe l'espace de noms PHP (namespace) À l'époque ça fonctionnait sans globalisation manuelle, car la directive PHP register_globals = on faisait la globalisation de toute les variables, ( sauf que c'était une très mauvaise pratique et PHP a supprimé la directive dans de nouvelles versions de PHP ici donc on doit manuellement déclarer notre variable comme étant désormais globale AU SEIN DE LA METHODE ATTENTION - cependant il sagit d'une référence: modifier la variable modifiera la référence ET non la variable initiale ) - 12/ conservation du terme 'Dès' */ // ([1])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN function getPriceStringShortVersion2( $type_de_prix = 'HT' ) { // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC global $currencies; // ([10])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END global $is_partner; // ([8])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $customerProfile = 'pf:Standard'; // ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $cssClassOfPriceDisplay_HT = ''; $cssClassOfPriceDisplay_TTC = ''; if (tep_session_is_registered('customer_id')) { if ($is_partner == true OR is_pro_customer() == true) { $cssClassOfPriceDisplay_HT = '--pleaseDisplayMyPriceString'; $cssClassOfPriceDisplay_TTC = '--pleaseNotDisplayMyPriceString'; // ([10])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // echo '$is_partner = '; var_dump($is_partner); die ('
STOP'); // ([9])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN if ($is_partner == true) { $customerProfile = 'pf:Partenaire'; } else if (is_pro_customer() == true) { $customerProfile = 'pf:Professionnel'; } // ([9])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END } else { $cssClassOfPriceDisplay_HT = '--pleaseNotDisplayMyPriceString'; $cssClassOfPriceDisplay_TTC = '--pleaseDisplayMyPriceString'; } } else { $cssClassOfPriceDisplay_HT = '--pleaseNotDisplayMyPriceString'; $cssClassOfPriceDisplay_TTC = '--pleaseDisplayMyPriceString'; } // ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * pour les nouveaux produits, page d'index AINSI que les listes de produits (catalogue): * Vérifie si on calcule en HT (via (tep_add_tax()) ou en TTC (via prix_avec_taxes()) * reformatage, retraits de balises HTML superflues, ajouts de styles, restructuration. * */ switch ($type_de_prix) { case 'HT': // sans le calcul des taxes : // Dispose d'un prix promotionnel: if (true == $this->hasSpecialPrice) { // ([3])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN // ([4])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text = '' // ([7])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END . '' // ([8])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN . '' . '
' . $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) . '  HT' . '
' // ([8])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([4])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END . '' // [VTAB_1_PRICE_FORMATTER_NEW_PRICE_MOVED_FROM] . '' . $currencies->display_price($this->specialPrice, tep_get_tax_rate($this->taxClass)) . '  HT' . '' // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // ([7])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // [VTAB_1_PRICE_FORMATTER_NEW_PRICE_MOVED_INTO] . '
' // ([9])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // [TEXT_ON_SALE_BASED_HERE] // ([1])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([4])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END . '' . str_replace(TEXT_ON_SALE, 'Promotion', TEXT_ON_SALE) . ' ' . '
' // ([7])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END . '
' // ([4])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END . ''; // ([3])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // Dispose d'un prix démarrant à un pallier (exemple: includes/modules/new_products.php) // -> OSC-94 - Prix par palier reservé aux professionnels } elseif (true == $this->hasQuantityPrice and $this->price_breaks_allowed ) { // <- OSC-94 - Prix par palier reservé aux professionnels // ([4])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([5])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([6])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([7])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([6])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([12])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text = 'Dès' . str_replace(TEXT_PRICE_BREAKS, '
', TEXT_PRICE_BREAKS) . ' ' . $currencies->display_price($this->lowPrice, tep_get_tax_rate($this->taxClass)) . '  HT
'; // Dispose d'un prix base à l'unité (exemple: includes/modules/product_listing.php -> index.php) } else { // ([7])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([4])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text = '' . $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) . '  HT'; } break; case 'TTC': // avec le calcul des taxes : // Dispose d'un prix promotionnel: if (true == $this->hasSpecialPrice) { // ([3])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN // ([4])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text = '' // ([5])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // ([7])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END /* . '' // ([8])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN . '' . '
' . $currencies->afficher_prix_ttc($this->thePrice, tep_get_tax_rate($this->taxClass)) . '  TTC' . '
' // ([8])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([3])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END . '
' . '
' */ // ([5])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([3])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // . '
' . '' // ([4])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END . '' // [VTAB_1_PRICE_FORMATTER_NEW_PRICE_MOVED_FROM] . '' . $currencies->afficher_prix_ttc($this->specialPrice, tep_get_tax_rate($this->taxClass)) . '  TTC' . '' // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // ([7])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // [VTAB_1_PRICE_FORMATTER_NEW_PRICE_MOVED_INTO] . '
' // ([9])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // [TEXT_ON_SALE_BASED_HERE] // ([1])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([4])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END . '' . str_replace(TEXT_ON_SALE, 'Promotion', TEXT_ON_SALE) . ' ' . '
' // ([7])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END . '
' // ([4])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END . ''; // ([3])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // Dispose d'un prix démarrant à un pallier (exemple: includes/modules/new_products.php) // -> OSC-94 - Prix par palier reservé aux professionnels } elseif (true == $this->hasQuantityPrice and $this->price_breaks_allowed ) { // <- OSC-94 - Prix par palier reservé aux professionnels // on retire l'espace avant le prix : // ([4])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([5])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([7])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text = '' . str_replace(TEXT_PRICE_BREAKS, 'Quantité
', TEXT_PRICE_BREAKS) . '' . $currencies->afficher_prix_ttc($this->lowPrice, tep_get_tax_rate($this->taxClass)) . '  TTC
'; // Dispose d'un prix base à l'unité (exemple: includes/modules/product_listing.php -> index.php) } else { // ([7])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text = '' . $currencies->afficher_prix_ttc($this->thePrice, tep_get_tax_rate($this->taxClass)) . '  TTC'; } break; } // ([2])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $lc_text = str_replace( 'EUR', '', $lc_text ); // ([2])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([10])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END return '
' . $lc_text . '
'; } // ([1])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END /* [SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions] ************************************************************************/ /************************************************************************ [SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions]:{ - 1/ nouvelle méthode de la classe PriceFormatter pour créér le tableau de prix par paliers (PRICE_BREAK !) la nouvelle méthode créé pour cette version du design plus en bas passe évidemment aussi par la classe PriceFormatter (ce fichier) la nouvelle méthode sera développée sur la méthode basée ci-dessous: ->getPriceString() pour trouver le tableau de prix par paliers Standard la nouvelle méthode sera nommée getPriceStringVersion2() - 2/ la nouvelle méthode getPriceStringVersion2() disposera de différents paramètre de méthode: $style = ce paramètre sert à afficher le prix en mode boite ou en mode habituel, il peut prendre une des deux valeurs suivantes (par défaut) -> 'productPriceInBox' -> indique l'affichage en boite (parfait pour les prix par paliers) ( ) -> 'Standard' -> indique l'affichage comme à l'ancienne (évidemment aussi compatible avec les prix par paliers) $align = ce paramètre sert à aligner les données du tableau généré à gauche ou droite, il peut prendre une des deux valeurs suivantes (par défaut) -> 'right' -> force l'affichage à droite ( ) -> 'left' -> force l'affichage à gauche $mode = ce paramètre sert à afficher le tableau en ignorant les quantités unitaires ou pas il peut prendre une des deux valeurs suivantes (par défaut) -> 'Standard' -> force l'affichage des quantités à l'unité (quantité unitaire), mode qui contient en affichage les QUANTITE UNITAIRE et PRIX PAR PALIERS, et CORRESPONDANCE DE REMISE EN POURCENTAGE ( ) -> 'OnlyPriceBreaker' -> force le masquage des quantités à l'unité (quantité unitaire), mode qui ne contient en affichage QUE LES PRIX PAR PALIERS $ttc_displayer = ce paramètre sert à afficher ou non les prix TTC, il peut prendre une des deux valeurs suivantes (par défaut) -> 'Non!' -> force le masquage des prix TTC ( ) -> 'Oui!' -> force l'affichage des prix TTC cependant, dans tout les cas, tout les paramètres sont optionnels dans les deux modes, seul le prix HT est affiché par défaut, donc tout l'affichage TTC est supprimé dans cette méthode, pour afficher les prix TTC, surtout ne jamais oublier de renseigner à l'appel de la méthode CHACUN des paramètres - 3/ ici, on va afficher ou non la quantité (+1) selon le mode ($mode) choisi - ATTENTION depuis octobre, suite à une demande tardive du client, on essaie d'organiser différemment cet élément afin de "transformer" le visuel ici on va aussi permettre de cibler cet élément plus tard en y ajoutant une classe CSS spéciale - 4/ ici, on va afficher ou non le prix unitaire (+1) selon le mode ($mode) choisi - ATTENTION depuis octobre, suite à une demande tardive du client, on essaie d'organiser différemment cet élément afin de "transformer" le visuel ici on va aussi permettre de cibler cet élément plus tard en y ajoutant une classe CSS spéciale - 5/ ici, on va afficher ou non les prix par paliers spéciaux (+x) selon le mode ($mode) choisi on va prévoir aussi que les prix soldés soient affichés (coûtes que coûtes), mais, qu'on puisse en cibler leur conteneur HTML pour éventuellement avoir la capacité de les masquer via du style CSS on va aussi ajouter des classes aux liens de zone pro réservées aux professionnels, pour rendre plus jolis - 6/ ici, on va ajouter une variable qui sera nécéssaire pour éviter l'affichage TTC au besoin, par défaut, on refusera l'affichage TTC pour les prix affichés ici, car ils sont dégréssifs et les prix dégressifs ici, ne seront que pour les professionnels et donc en HT. (sauf dans certains cas, donc, $affichageTTC régule cet affichage, à noter que $affichageTTC est renseigné par le paramètre $ttc_displayer de la méthode donc, pour rappel, ici, valorisation de $affichageTTC à 'Oui!' = accepter l'affichage TTC valorisation de $affichageTTC à 'Non!' = refuser l'affichage TTC - 7/ ici, on va supprimer en commentant les affichages de prix TTC, quels qu'ils soient, et évidemment on ne va pas se forcer à les styliser - ATTENTION depuis octobre, suite à une demande tardive du client, on essaie d'organiser différemment cet élément afin de "transformer" le visuel ici on va aussi permettre de cibler cet élément plus tard en y ajoutant une classe CSS spéciale - 8/ ici, on va afficher ou non le pourcentage de réduction due à la promotion éventuelle (%) selon le mode ($mode) choisi on va aussi reformater un peu l'affichage et le centrer (align="center") et de même que de couper en deux le texte, ce qui va permettre un centrage parfait! - 9/ définition d'une variable temporaire qui va servir à reformater le prix avec le nouveau design de reformatage de prix - 10/ usage de la variable temporaire qui va servir à reformater le prix avec le nouveau design de reformatage de prix - 11/ structuration HTML des prix reformattés - 12/ ajout d'une classe, éventuellement utilisée plus tard pour cibler le tableau entier des prix - 13/ suite à une demande du client, le 02 Octobre 2020, on va désormais devoir masquer les pourcentages de réductions (Correspondance de la remise en %) du tableau des prix, afin de ne pas casser le design, ou trop complexifier la classe d'affichage et sa méthode getPriceStringVersion2(), on va juste ajouter à cette nouvelle ligne de tableau une classe CSS et au (au cas-où, car après test, le navigateur Huawei sur Android est affublé d'un bug idiot: il ne parvient pas à réguler le en CSS ici cette classe CSS sera alors pilotable (pour la masquer (ou encore l'afficher)) via le fichier de style (stylesheet css) principal du nouveau design - 14/ - ATTENTION depuis octobre, suite à une demande tardive du client, on essaie d'organiser différemment cet élément afin de "transformer" le visuel ici on va aussi permettre de cibler cet élément plus tard en y ajoutant une classe CSS spéciale - 15/ - ATTENTION depuis octobre, suite à une demande tardive du client, on renomme "zone pro, offres réservées aux professionnels" en "Accès PRO" et on donne une classe CSS au englobant le nouveau terme de manière à pouvoir le cibler plus tard - 16/ - ATTENTION depuis octobre, suite à une demande tardive du client, on renomme "A partir de" en "Dès" - 17/ - ATTENTION depuis décembre 2020, suite à une demande tardive du client, on renomme à nouveau "Dès" en "Quantité" - 18/ - ATTENTION depuis janvier 2021, suite à une demande tardive du client, on va devoir afficher désormais les prix différemments selon le profil du client de un masquer les prix HT aux clients PARTICULIERS et non-identifiés (donc VISITEURS), et donc, afficher le prix TTC uniquement à ces clients. de deux masquer les prix TTC aux clients PROFESSIONNELS et PARTENAIRES (ils doivent êtres identifiés au préalable comme tels), et donc, afficher le prix HT uniquement à ces clients. pour ce faire, rien de plus simple, on créé déjà une variable vierge qui sera valorisée au travers d'une condition PHP qui sera construite tout au début de la méthode (fonction) de la classe, pour détecter le profil du client puis, on se servira de cette variable, qui contiendra à terme le nom d'une classe CSS qui sera stylisée (affichée/ou non) par des règles CSS depuis le fichier de styles CSS principal.. et comme ce tableau de prix va aussi apparaître comme modifié depuis un affichage responsive (par d'autres classes responsives), il faudra donc aussi désormais intercepter ces classes, et revoir l'affichage en conséquence.. l'on va taguer ces modifications spécifiques du fichier si_csss-ro_mainMediaQueriesForScreen.css (voir CODETAG[TWEAK_FOLLOWING_PROFILE_SORT_FOR_PRICES_DISPLAYERS]) je vais aussi rajouter des noms de classes pour les lignes du tableau, afin de pouvoir les cibler via des règles CSS plus tard (ceci est nécéssaire maintenant, pour masquer des lignes entières inutiles...) [VTAB-TEAM-LINDER-PARTNER-1][OSC][MultiTaskDescriptions] - Revue de la charte Graphique: - 1/ on va juste ajouter une classe supplémentaire ici pour cet élément bien précis, de manière à mieux le cibler indépendamment du reste plus tard - 2/ on n'affiche plus jamais de prix barré, on met le nouveau prix avec "promotion" en dessous, donc on supprime définitivement les balises HTML on les efface, on ne les commente pas! mais on conserve entres commentaires PHP la référence PHP des prix promotionnels, dans le cas d'un besoin éventuel, pour ne pas chercher midi à quatorzes heures en cas de besoins - 3/ on ajoute ici un petit tag de repère, il nous servira dans certaines pages où à cet endroit l'on devra injecter avec un str_replace() un label de promotion exemple: /product_info.php - 4/ on ajoute le nom d'une classe afin de styliser l'élément à ce niveau - 5/ retrait de la valeur width pour cet élément - 6/ dans le but de davantage pouvoir avoir en [8] et valorisé en [7] un granularité beaucoup plus précise dans le ciblage CSS on ajoute une variable spéciale PHP qui nous aidera à délimiter le profil commercial du client - 7/ on va valoriser la variable déclarée en [6] selon si le client est un partenaire ou bien si le client est un professionnel à travers une petite vérification qui trouvera le profil du client si le client est un partenaire : pf:Partenaire si le client est un professionnel : pf:Professionnel si le client n'est ni l'un ni l'autre : pf:Standard l'instruction (else if) évite le cas où le client est en même temps un Professionnel qui est un Partenaire: si le client est un Partenaire, la vérification sera résultante en Partenaire, peu importe si il est Professionnel. le 'pf:' indique juste que nous passons par la classe PriceFormatter quand à l'origine de l'injection de la nouvelle donnée dynamique. - 8/ on injecte la nouvelle donnée dynamique renseignée en [7] de manière à donner à chaque colonne un ciblage bien plus précis du profil client cela pourra ensuite servir dans une règle CSS pour cibler l'élément généré - 9/ ISSUE - BUG : $is_partner renvoie NULL parfois dans certains cas où l'on est pourtant partenaire: en cause: la variable n'est pas existante.. BUGFIX: globaliser la variable $is_partner (cette variable est définie depuis le /includes/application_top.php suite à une requête SQL), et ici, il faut donc la passer à la classe modifier les arguments de la méthode serait risqué, donc, le mieux c'est de globaliser la variable $is_partner pour s'en servir NOTE: pour informations, lorsque l'on tape: global $var PHP déclare cela : $GLOBALS['var'] = VALEUR DANS LA PILE MEMOIRE DE PHP DE LA VARIABLE INITIALE: $var Cela fonctionne aussi qu'importe l'espace de noms PHP (namespace) À l'époque ça fonctionnait sans globalisation manuelle, car la directive PHP register_globals = on faisait la globalisation de toute les variables, ( sauf que c'était une très mauvaise pratique et PHP a supprimé la directive dans de nouvelles versions de PHP ici donc on doit manuellement déclarer notre variable comme étant désormais globale AU SEIN DE LA METHODE ATTENTION - cependant il sagit d'une référence: modifier la variable modifiera la référence ET non la variable initiale ) */ // ([1])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN // ([2])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN // -> VDQPBPP135 : possibilité d'aligner les prix à gauche/droite function getPriceStringVersion2($style='productPriceInBox', $align='right', $mode='Standard', $ttc_displayer='Non!') { // <- VDQPBPP135 global $currencies; // ([9])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END global $is_partner; // ([6])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $customerProfile = 'pf:Standard'; // ([18])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $cssClassOfTableDisplayPriceBreak = ''; if (tep_session_is_registered('customer_id')) { if ($is_partner == true OR is_pro_customer() == true) { $cssClassOfTableDisplayPriceBreak = '--pleaseDisplayMyPriceTable ---orAdaptFor --proOrPartnerCustomer'; // ([9])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // echo '$is_partner = '; var_dump($is_partner); die ('
STOP'); // ([7])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN if ($is_partner == true) { $customerProfile = 'pf:Partenaire'; } else if (is_pro_customer() == true) { $customerProfile = 'pf:Professionnel'; } // ([7])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END } else { $cssClassOfTableDisplayPriceBreak = '--pleaseNotDisplayMyPriceTable ---orAdaptFor --standardOrVisitorCustomer'; } } else { $cssClassOfTableDisplayPriceBreak = '--pleaseNotDisplayMyPriceTable ---orAdaptFor --standardOrVisitorCustomer'; } // ([18])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([6])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $affichageTTC = $ttc_displayer; // ([9])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $classPriceFormatter__referencers = array( 'price-break-ht-price-base' => '' ); // ([9])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // If you want to change the format of the price/quantity table // displayed on the product information page, here is where you do it. if(true == $this->hasQuantityPrice) { // -> VDQPBPP135 : affichage de nom de la catégorie entre parenthèse dans le tableau des prix et de la quantité minimum $qt_category = ""; if ( $this->qtyBlocks > 1 ) { $qt_category = " - lot de " . $this->qtyBlocks . " mini"; } if ( $this->get_discount_category() > 0 ) { $sql = tep_db_query("select discount_categories_name from " . TABLE_DISCOUNT_CATEGORIES . " where discount_categories_id = '" . (int)$this->get_discount_category() . "' "); if ( ($tmp = tep_db_fetch_array($sql)) ) { $qt_category .= "
(" . $tmp['discount_categories_name'] . ")"; } } // <- VDQPBPP135 // ([12])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([18])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([9])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text = '
' // ([4])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END . '
' // ([14])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([1])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([4])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END . ''; // -> VDQPBPP135 : affichage de nom de la catégorie entre parenthèse dans le tableau des prix // ([3])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if ($mode == 'OnlyPriceBreaker') { // ([16])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([17])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([18])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([1])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([5])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text .= ''; // ([3])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END foreach($this->price_breaks as $price_break) { $lc_text .= ''; } // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Modification informative du texte d'une ligne dans le tableau des prix par palliers * (renommage de l'ancienne constante: "TEXT_PRICE_PER_PIECE" par "TEXT_PRICE_PER_PIECE__HT"). * De fait l'on se sert d'un texte prévenant que dans cette ligne du tableau, les prix affichés sont en HT. * */ // ([4])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if ($mode == 'OnlyPriceBreaker') { // ([18])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([1])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text .= ''; } else if ($mode == 'Standard') { // ([18])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([1])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([5])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text .= ''; } // -> OSC-94 - Prix par palier reservé aux professionnels if ( ! $this->price_breaks_allowed) // ([15])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; else // <- OSC-94 - Prix par palier reservé aux professionnels foreach($this->price_breaks as $price_break) { // ([10])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $classPriceFormatter__referencers['price-break-ht-price-base'] = str_replace( 'EUR', '', $currencies->display_price( $price_break['products_price'], tep_get_tax_rate($this->taxClass)) . '' ); // ([10])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([14])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; } } else if ($mode == 'Standard') { if (true == $this->hasSpecialPrice) { $lc_text .= '' . '
' // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) . '' . $currencies->display_price($this->specialPrice, tep_get_tax_rate($this->taxClass)) . '' // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END . '
' .''; } else { // ([10])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $classPriceFormatter__referencers['price-break-ht-price-base'] = str_replace( 'EUR', '', $currencies->display_price( $this->thePrice, tep_get_tax_rate($this->taxClass)) . '' ); // ([10])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= '' . '
' // ([11])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN . '
' /* HT: prix base */ . ' ' . $classPriceFormatter__referencers['price-break-ht-price-base'] . '
' // ([11])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END . '
' . ''; } // -> OSC-94 - Prix par palier reservé aux professionnels if ( ! $this->price_breaks_allowed ) // ([15])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; else // <- OSC-94 - Prix par palier reservé aux professionnels foreach($this->price_breaks as $price_break) { // ([10])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $classPriceFormatter__referencers['price-break-ht-price-base'] = str_replace( 'EUR', '', $currencies->display_price( $price_break['products_price'], tep_get_tax_rate($this->taxClass)) . '' ); // ([10])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([14])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; } } // ([5])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; // ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if ($affichageTTC != 'Non!' and $affichageTTC == 'Oui!') { // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Ajout d'une ligne pour le prix TTC dans le tableau des prix par palliers * (utilisation de la nouvelle constante: "TEXT_PRICE_PER_PIECE__TTC"). * */ // ([4])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([5])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text .= ''; } else { // Aucun prix spécial n'existe : $lc_text .= '' . $currencies->afficher_prix_ttc($this->thePrice, tep_get_tax_rate($this->taxClass)) . ''; } // <- OSC-70 : Gestion HT/TTC : affichage prix HT et TTC } // ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if ($affichageTTC != 'Non!' and $affichageTTC == 'Oui!') { // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Ajout des colonnes en boucle '; } // Fermeture de la ligne du tableau pour les prix normaux / prix par palliers ET prix spéciaux pour les prix TTC $lc_text .= ''; // Le reste concerne la remise en pourcentage, que ce soit HT ou TTC le pourcentage sera forcément le même, donc on ne touche pas. // // <- OSC-70 : Gestion HT/TTC : affichage prix HT et TTC } // ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([8])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if ($mode == 'OnlyPriceBreaker') { // Begin saving calculation // ([13])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; if (true == $this->hasSpecialPrice) { // ([13])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; } } else if ($mode == 'Standard') { // Begin saving calculation // ([13])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; if (true == $this->hasSpecialPrice) { // ([13])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; } else { // ([13])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; } } // ([8])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // -> OSC-94 - Prix par palier reservé aux professionnels if ( $this->price_breaks_allowed ) // <- OSC-94 - Prix par palier reservé aux professionnels foreach($this->price_breaks as $price_break) { // ([13])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; } // ([18])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([3])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text .= '
' . 'Quantité' . ' ' . $qt_category; } else if ($mode == 'Standard') { // ([16])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([17])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([18])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([1])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([5])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text .= '
' . 'Quantité' . ' ' . $qt_category . '1+'; } // <- VDQPBPP135 $lc_text .= '  ' . $price_break['products_qty'] .'+ 
' . TEXT_PRICE_PER_PIECE__HT . '
' . TEXT_PRICE_PER_PIECE__HT . ''; } // ([4])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // <- OSC-70 : Créér un double-affichage des prix pour les produits (HT/TTC) // ([5])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if ($mode == 'OnlyPriceBreaker') { if (true == $this->hasSpecialPrice) { $lc_text .= '' . '
' // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) . '' . $currencies->display_price($this->specialPrice, tep_get_tax_rate($this->taxClass)) . '' // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END . '
' .'
Accès PRO' // ([11])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN . '
' /* HT: prix base */ . ' ' . $classPriceFormatter__referencers['price-break-ht-price-base'] . '
' // ([11])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END .'
Accès PRO' // ([11])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN . '
' /* HT: prix base */ . ' ' . $classPriceFormatter__referencers['price-break-ht-price-base'] . '
' // ([11])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END .'
' . TEXT_PRICE_PER_PIECE__TTC . ''; // <- OSC-70 : Gestion HT/TTC : affichage prix HT et TTC } // ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if ($affichageTTC != 'Non!' and $affichageTTC == 'Oui!') { // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Ajout de l'information du prix spécial ( est une balise html qui barre un texte). * Prise en charge des prix spéciaux (promotions, soldes, et outlets) s'il en existe ou pas: * Utilisation de la méthode 'afficher_prix_ttc()' de la classe objet currencies au lieu de 'display_price()' * (affichera le prix TTC en gras, d'où la balise ) * */ if (true == $this->hasSpecialPrice) { // Un prix spécial existe : // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // $currencies->afficher_prix_ttc($this->thePrice, tep_get_tax_rate($this->taxClass)) $lc_text .= '' . $currencies->afficher_prix_ttc($this->specialPrice, tep_get_tax_rate($this->taxClass)) . '' // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END .' * Prise en charge des prix par palliers s'il en existe ou pas: * Utilisation de la méthode 'afficher_prix_ttc()' de la classe objet currencies au lieu de 'display_price()' * (affichera le prix TTC en gras, d'où la balise ) * */ // -> OSC-94 - Prix par palier reservé aux professionnels if ( $this->price_breaks_allowed ) // <- OSC-94 - Prix par palier reservé aux professionnels foreach($this->price_breaks as $price_break) { // ([14])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= '' . $currencies->afficher_prix_ttc($price_break['products_price'], tep_get_tax_rate($this->taxClass)) .'
' . str_replace('remise en %', '
remise en %', TEXT_SAVINGS_PERCENT) . '
' . $this->getDiscountSaving($this->thePrice, $this->specialPrice) .'
' . str_replace('remise en %', '
remise en %', TEXT_SAVINGS_PERCENT) . '
' . $this->getDiscountSaving($this->thePrice, $this->specialPrice) .'- ' . $this->getDiscountSaving($this->thePrice, $price_break['products_price']) .'
'; } else { if (true == $this->hasSpecialPrice) { // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) $lc_text = '' . $currencies->display_price($this->specialPrice, tep_get_tax_rate($this->taxClass)) . ''; // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END } else { $lc_text = ' ' . $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) . ' '; } } return $lc_text; } // ([2])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([1])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END /* [SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions] ************************************************************************/ /************************************************************************ [SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions]:{ - 1/ nouvelle méthode de la classe PriceFormatter pour créér le tableau de prix par paliers (PRICE_BREAK !) la nouvelle méthode créé pour cette version du design plus en bas passe évidemment aussi par la classe PriceFormatter (ce fichier) la nouvelle méthode sera développée sur la méthode basée ci-dessous: ->getPricePartner() pour trouver le tableau de prix par paliers Partenaire la nouvelle méthode sera nommée getPricePartnerVersion2() NOTE - la méthode initiale getPricePartner() a été conçue par un développeur tiers du nom de Thibaut PHILIPPS (et je laisse son travail + crédit à ce code) toutefois, ce développeur tiers s'est basé sur la méthode getPriceString() que Saphyra Interactive (Christophe Klug) avait déjà modifié à l'époque et va encore remodifier en 2020 - 2/ la nouvelle méthode getPricePartnerVersion2() disposera de différents paramètre de méthode: $style = ce paramètre sert à afficher le prix en mode boite ou en mode habituel, il peut prendre une des deux valeurs suivantes (par défaut) -> 'productPriceInBox' -> indique l'affichage en boite (parfait pour les prix par paliers) ( ) -> 'Standard' -> indique l'affichage comme à l'ancienne (évidemment aussi compatible avec les prix par paliers) $align = ce paramètre sert à aligner les données du tableau généré à gauche ou droite, il peut prendre une des deux valeurs suivantes (par défaut) -> 'right' -> force l'affichage à droite ( ) -> 'left' -> force l'affichage à gauche $mode = ce paramètre sert à afficher le tableau en ignorant les quantités unitaires ou pas il peut prendre une des deux valeurs suivantes (par défaut) -> 'Standard' -> force l'affichage des quantités à l'unité (quantité unitaire), mode qui contient en affichage les QUANTITE UNITAIRE et PRIX PAR PALIERS, et CORRESPONDANCE DE REMISE EN POURCENTAGE ( ) -> 'OnlyPriceBreaker' -> force le masquage des quantités à l'unité (quantité unitaire), mode qui ne contient en affichage QUE LES PRIX PAR PALIERS cependant, dans tout les cas, tout les paramètres sont optionnels dans les deux modes, seul le prix HT est affiché par forcing (voir [6]), donc tout l'affichage TTC est supprimé dans cette méthode, pour afficher les prix TTC, utiliser getPriceStringVersion2() au lieu de cette méthode - 3/ ici, on ne va plus afficher ou non la quantité (+1) car de toutes façons, ça ne dépassera pas 1... mais, selon le mode ($mode) choisi nommé '$mode', il peut prendre deux valeurs.. OnlyPriceBreaker = mode qui ne contient en affichage QUE LES PRIX PAR PALIERS Standard = mode qui contient en affichage les QUANTITE UNITAIRE et PRIX PAR PALIERS, ET CORRESPONDANCE DE REMISE EN POURCENTAGE dans les deux modes, seul le prix HT est affiché, donc tout l'affichage TTC est supprimé dans cette méthode de même que le texte initial TEXT_ENTER_QUANTITY ne sera plus utilisé, ici, à la place on utilisera un autre texte - ATTENTION depuis octobre, suite à une demande tardive du client, on essaie d'organiser différemment cet élément afin de "transformer" le visuel ici on va aussi permettre de cibler cet élément plus tard en y ajoutant une classe CSS spéciale - 4/ ici, on va afficher ou non le prix unitaire (+1) selon le mode ($mode) choisi - ATTENTION depuis octobre, suite à une demande tardive du client, on essaie d'organiser différemment cet élément afin de "transformer" le visuel ici on va aussi permettre de cibler cet élément plus tard en y ajoutant une classe CSS spéciale - 5/ ici, on va afficher ou non les prix par paliers spéciaux (+x) selon le mode ($mode) choisi - 6/ ici, on va ajouter une variable qui sera nécéssaire pour éviter l'affichage TTC au besoin, par défaut, on refusera l'affichage TTC pour les prix affichés ici, car ils sont dégréssifs et les prix dégressifs ici, ne seront que pour les professionnels et donc en HT. Oui! = accepter l'affichage TTC Non! = refuser l'affichage TTC - 7/ ici, on va supprimer en commentant les affichages de prix TTC, quels qu'ils soient, et évidemment on ne va pas se forcer à les styliser - ATTENTION depuis octobre, suite à une demande tardive du client, on essaie d'organiser différemment cet élément afin de "transformer" le visuel ici on va aussi permettre de cibler cet élément plus tard en y ajoutant une classe CSS spéciale - 8/ ici, on va afficher ou non le pourcentage de réduction due à la promotion éventuelle (%) selon le mode ($mode) choisi - 9/ définition d'une variable temporaire qui va servir à reformater le prix avec le nouveau design de reformatage de prix - 10/ usage de la variable temporaire qui va servir à reformater le prix avec le nouveau design de reformatage de prix - 11/ structuration HTML des prix reformattés - 12/ on évite d'afficher 0.00EUR HT si il n'existe pas de prix partenaire, on va plutôt afficher un texte comme "n/a" - 13/ on évite d'afficher "Prix partenaire" comme initialement, à l'inverse, on marquera juste "Partenaire" comme un texte d'introduction en (3) a été prévu - 14/ on évite d'afficher le prix base si il est identique au prix par palliers (uniquement pour le mode "OnlyPriceBreaker"), car ce prix est déjà affiché en grand, ce ne serait que du répété, par contre on va afficher le texte "par unité:" à la place de $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) - 15/ ajout d'une classe, éventuellement utilisée plus tard pour cibler le tableau entier des prix - 16/ suite à une demande du client, le 02 Octobre 2020, on va désormais devoir masquer les pourcentages de réductions (Correspondance de la remise en %) du tableau des prix, afin de ne pas casser le design, ou trop complexifier la classe d'affichage et sa méthode getPriceStringVersion2(), on va juste ajouter à cette nouvelle ligne de tableau une classe CSS cette classe CSS sera alors pilotable (pour la masquer (ou encore l'afficher)) via le fichier de style (stylesheet css) principal du nouveau design - 17/ - ATTENTION depuis octobre, suite à une demande tardive du client, on essaie d'organiser différemment cet élément afin de "transformer" le visuel ici on va aussi permettre de cibler cet élément plus tard en y ajoutant une classe CSS spéciale - 18/ - ATTENTION depuis octobre, suite à une demande tardive du client, on essaie d'organiser différemment cet élément afin de "transformer" le visuel ici déjà, on va virer ces affreuses balises qui ne fonctionnent pas (inciblables via CSS), et qui sont fortement dépréciée et on donne une classe spéciale à l'élément ici - 19/ - ATTENTION depuis octobre, suite à une demande tardive du client, on renomme "zone pro, offres réservées aux professionnels" en "Accès PRO" et on donne une classe CSS au englobant le nouveau terme de manière à pouvoir le cibler plus tard [VTAB-TEAM-LINDER-PARTNER-1][OSC][MultiTaskDescriptions] - Revue de la charte Graphique: - 1/ on n'affiche plus jamais de prix barré, on met le nouveau prix avec "promotion" en dessous, donc on supprime définitivement les balises HTML on les efface, on ne les commente pas! mais on conserve entres commentaires PHP la référence PHP des prix promotionnels, dans le cas d'un besoin éventuel, pour ne pas chercher midi à quatorzes heures en cas de besoins - 2/ on ajoute ici un petit tag de repère, il nous servira dans certaines pages où à cet endroit l'on devra injecter avec un str_replace() un label de promotion exemple: /product_info.php - 3/ retrait de la valeur width pour cet élément - 4/ on ajoute le nom d'une classe afin de styliser l'élément à ce niveau - 5/ permet le retrait de la première ligne du tableau partenaire qu'on ne désire plus et aussi de centrer les éléments en dessous pour safari */ // ([1])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN /* ***********************************************GESTION DES PARTENAIRES*************************thibautPHILIPPS*******/ // ([2])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN function getPricePartnerVersion2($style='productPriceInBox', $align='right', $mode='Standard') { // <- VDQPBPP135 global $currencies, $coeff_partner; // ([6])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $affichageTTC = 'Non!'; // ([9])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $classPriceFormatter__referencers = array( 'price-break-ht-price-base' => '', 'price-break-display-zone-pro-text' => true ); // ([9])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END //$coeff_partner = $account['coeff_partner']; $partner_price_precal = $this->theCost*$coeff_partner; if (true == $this->hasSpecialPrice) { $partner_price = min($partner_price_precal, (float)$this->thePrice,(float)$this->specialPrice); } else { $partner_price = min($partner_price_precal, (float)$this->thePrice,(float)$this->lowPrice); } // If you want to change the format of the price/quantity table // displayed on the product information page, here is where you do it. // ([15])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text = '' // ([5])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END . '
' // ([17])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END . ''; // -> VDQPBPP135 : affichage de nom de la catégorie entre parenthèse dans le tableau des prix // ([3])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if ($mode == 'OnlyPriceBreaker') { // ([18])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([3])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([5])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text .= ''; // ([3])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([13])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([18])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Modification informative du texte d'une ligne dans le tableau des prix par palliers * (renommage de l'ancienne constante: "TEXT_PRICE_PER_PIECE" par "TEXT_PRICE_PER_PIECE__HT"). * De fait l'on se sert d'un texte prévenant que dans cette ligne du tableau, les prix affichés sont en HT. * En 2022, cette constante n'est plus utilisée, on utilise à la place "TEXT_PRICE_PER_PIECE_PARTNER__HT". * */ // ([4])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if ($mode == 'OnlyPriceBreaker') { $lc_text .= ''; } else { // ([14])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $lc_text .= '' . 'par unité :' . ''; // ([14])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END } // -> OSC-94 - Prix par palier reservé aux professionnels // -- on ajoute une condition bloqueuse pour ne pas afficher le texte de zone pro réservée aux pros en même temps d'afficher le prix partenaire (sinon, ça afficherait... plus tard 0.00EUR HT) .. $classPriceFormater__referencers['price-break-display-zone-pro-text'] = false; if ( ! $this->price_breaks_allowed) { // ([19])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; $classPriceFormater__referencers['price-break-display-zone-pro-text'] = true; // <- OSC-94 - Prix par palier reservé aux professionnels } if ($partner_price > $this->specialPrice && $this->specialPrice> 0 // -- on ajoute une condition bloqueuse pour ne pas afficher le texte de zone pro réservée aux pros en même temps d'afficher le prix partenaire // --- (sinon, ça afficherait... plus tard 0.00EUR HT en plus de zone pro) .. && $classPriceFormater__referencers['price-break-display-zone-pro-text'] == false) { // ([10])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $classPriceFormatter__referencers['price-break-ht-price-base'] = str_replace( 'EUR', '', $currencies->display_price( $this->specialPrice, tep_get_tax_rate($this->taxClass)) . '' ); // ([10])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([12])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if (preg_match('/^0.00/', $classPriceFormatter__referencers['price-break-ht-price-base'])) { $classPriceFormatter__referencers['price-break-ht-price-base'] = 'n/a'; } // ([12])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([17])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .=''; /* ***********************************************GESTION DES PARTENAIRES*************************thibautPHILIPPS*******/ } else { // -- on ajoute une condition bloqueuse pour ne pas afficher le texte de zone pro réservée aux pros en même temps d'afficher le prix partenaire // --- (sinon, ça afficherait... plus tard 0.00EUR HT en plus de zone pro) .. if ($classPriceFormater__referencers['price-break-display-zone-pro-text'] == false) { // ([10])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $classPriceFormatter__referencers['price-break-ht-price-base'] = str_replace( 'EUR', '', $currencies->display_price( $partner_price, tep_get_tax_rate($this->taxClass)) . '' ); // ([10])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([12])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if (preg_match('/^0.00/', $classPriceFormatter__referencers['price-break-ht-price-base'])) { $classPriceFormatter__referencers['price-break-ht-price-base'] = 'n/a'; } // ([12])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([17])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .=''; } } } else if ($mode == 'Standard') { if (true == $this->hasSpecialPrice) { // ([1])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) $lc_text .= '' . $currencies->display_price($this->specialPrice, tep_get_tax_rate($this->taxClass)) . '' // ([1])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END .''; } else { // ([14])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $lc_text .= '' . '' . $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) . '' . ''; // ([14])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END } // -> OSC-94 - Prix par palier reservé aux professionnels // -- on ajoute une condition bloqueuse pour ne pas afficher le texte de zone pro réservée aux pros en même temps d'afficher le prix partenaire (sinon, ça afficherait... plus tard 0.00EUR HT) .. $classPriceFormater__referencers['price-break-display-zone-pro-text'] = false; if ( ! $this->price_breaks_allowed) { // ([19])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; $classPriceFormater__referencers['price-break-display-zone-pro-text'] = true; // <- OSC-94 - Prix par palier reservé aux professionnels } if ($partner_price > $this->specialPrice && $this->specialPrice> 0 // -- on ajoute une condition bloqueuse pour ne pas afficher le texte de zone pro réservée aux pros en même temps d'afficher le prix partenaire // --- (sinon, ça afficherait... plus tard 0.00EUR HT en plus de zone pro) .. && $classPriceFormater__referencers['price-break-display-zone-pro-text'] == false) { // ([10])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $classPriceFormatter__referencers['price-break-ht-price-base'] = str_replace( 'EUR', '', $currencies->display_price( $this->specialPrice, tep_get_tax_rate($this->taxClass)) . '' ); // ([10])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([12])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if (preg_match('/^0.00/', $classPriceFormatter__referencers['price-break-ht-price-base'])) { $classPriceFormatter__referencers['price-break-ht-price-base'] = 'n/a'; } // ([12])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([17])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .=''; /* ***********************************************GESTION DES PARTENAIRES*************************thibautPHILIPPS*******/ } else { // -- on ajoute une condition bloqueuse pour ne pas afficher le texte de zone pro réservée aux pros en même temps d'afficher le prix partenaire // --- (sinon, ça afficherait... plus tard 0.00EUR HT en plus de zone pro) .. if ($classPriceFormater__referencers['price-break-display-zone-pro-text'] == false) { // ([10])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $classPriceFormatter__referencers['price-break-ht-price-base'] = str_replace( 'EUR', '', $currencies->display_price( $partner_price, tep_get_tax_rate($this->taxClass)) . '' ); // ([10])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([12])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if (preg_match('/^0.00/', $classPriceFormatter__referencers['price-break-ht-price-base'])) { $classPriceFormatter__referencers['price-break-ht-price-base'] = 'n/a'; } // ([12])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([17])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .=''; } } } // ([5])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; // ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if ($affichageTTC != 'Non!') { // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Ajout d'une ligne pour le prix TTC dans le tableau des prix par palliers * (utilisation de la nouvelle constante: "TEXT_PRICE_PER_PIECE__TTC"). * */ // ([3])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([4])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text .= ''; } else { // Aucun prix spécial n'existe : $lc_text .= '' . $currencies->afficher_prix_ttc($this->thePrice, tep_get_tax_rate($this->taxClass)) . ''; } // <- OSC-70 : Gestion HT/TTC : affichage prix HT et TTC } // ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if ($affichageTTC != 'Non!') { // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Ajout des colonnes en boucle '; } else { // ([18])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; } // Fermeture de la ligne du tableau pour les prix normaux / prix par palliers ET prix spéciaux pour les prix TTC $lc_text .= ''; // Le reste concerne la remise en pourcentage, que ce soit HT ou TTC le pourcentage sera forcément le même, donc on ne touche pas. // // <- OSC-70 : Gestion HT/TTC : affichage prix HT et TTC } // ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([8])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if ($mode == 'OnlyPriceBreaker') { } else if ($mode == 'Standard') { // Begin saving calculation // ([16])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; if (true == $this->hasSpecialPrice) { // ([16])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; } else { // ([16])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''; } } // ([8])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([2])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text .= '
' . 'Offre Spéciale' . ' ' . $qt_category; } else if ($mode == 'Standard') { // ([18])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([3])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([5])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text .= '
' . 'Offre Spéciale' . '' . $qt_category . '1+'; } // <- VDQPBPP135 $lc_text .= 'Partenaire
'; } else if ($mode == 'Standard') { // ([3])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([4])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END $lc_text .= '
' . TEXT_PRICE_PER_PIECE_PARTNER__HT . ''; } // ([4])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // <- OSC-70 : Créér un double-affichage des prix pour les produits (HT/TTC) // ([5])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if ($mode == 'OnlyPriceBreaker') { if (true == $this->hasSpecialPrice) { // ([1])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) $lc_text .= '' . $currencies->display_price($this->specialPrice, tep_get_tax_rate($this->taxClass)) . '' // ([1])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END .'Accès PRO' // ([11])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN . '
' /* HT: prix base */ . ' ' . $classPriceFormatter__referencers['price-break-ht-price-base'] . '
' // ([11])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END .'
' // ([11])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN . '
' /* HT: prix base */ . ' ' . $classPriceFormatter__referencers['price-break-ht-price-base'] . '
' // ([11])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END .'
Accès PRO' // ([11])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN . '
' /* HT: prix base */ . ' ' . $classPriceFormatter__referencers['price-break-ht-price-base'] . '
' // ([11])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END .'
' // ([11])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN . '
' /* HT: prix base */ . ' ' . $classPriceFormatter__referencers['price-break-ht-price-base'] . '
' // ([11])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END .'
' . TEXT_PRICE_PER_PIECE__TTC . ''; // <- OSC-70 : Gestion HT/TTC : affichage prix HT et TTC } // ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if ($affichageTTC != 'Non!') { // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC /* * Ajout de l'information du prix spécial ( est une balise html qui barre un texte). * Prise en charge des prix spéciaux (promotions, soldes, et outlets) s'il en existe ou pas: * Utilisation de la méthode 'afficher_prix_ttc()' de la classe objet currencies au lieu de 'display_price()' * (affichera le prix TTC en gras, d'où la balise ) * */ if (true == $this->hasSpecialPrice) { // Un prix spécial existe : // ([1])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // $currencies->afficher_prix_ttc($this->thePrice, tep_get_tax_rate($this->taxClass)) $lc_text .= '' . $currencies->afficher_prix_ttc($this->specialPrice, tep_get_tax_rate($this->taxClass)) . '' // ([1])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END .' * Prise en charge des prix par palliers s'il en existe ou pas: * Utilisation de la méthode 'afficher_prix_ttc()' de la classe objet currencies au lieu de 'display_price()' * (affichera le prix TTC en gras, d'où la balise ) * */ if($partner_price > $this->specialPrice && $this->specialPrice >0 ) { // ([18])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END $lc_text .= ''.$currencies->afficher_prix_ttc($this->specialPrice, tep_get_tax_rate($this->taxClass)).''.$currencies->afficher_prix_ttc($partner_price, tep_get_tax_rate($this->taxClass)).'
' . TEXT_SAVINGS_PERCENT . '' . $this->getDiscountSaving($this->thePrice, $partner_price) .'-
'; if (true == $this->hasSpecialPrice) { // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // $currencies->display_price($this->thePrice, tep_get_tax_rate($this->taxClass)) $lc_text = '' . $currencies->display_price($partner_price, tep_get_tax_rate($this->taxClass)) . ''; // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END } return $lc_text; } // ([2])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([1])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END /* [SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions] ************************************************************************/ /************************************************************************ [VTAB-TEAM-LINDER-PARTNER-1][OSC][MultiTaskDescriptions]:{ - 1/ nouvelle méthode de la classe PriceFormatter pour gérer un rendu sans HTML du prix Partenaire (TODO: renommer en VIP) la nouvelle méthode sera développée sur la méthode basée ci-dessous: ->getPartnerPrice() pour retourner le prix Partenaire (sans tableau de prix par paliers Partenaire) et surtout, en respectant les promotions (ou les non-promotions) la nouvelle méthode sera nommée getStringPricePartner() NOTE - la méthode initiale getPartnerPrice() a été conçue par un développeur tiers du nom de Thibaut PHILIPPS (et je laisse son travail + crédit à ce code) - cette méthode ne détectait jamais le prix le plus bas, et je remercie Monsieur Vincent Detzel pour m'avoir mise sur la piste. (le fameux min() manquant) - mais pas que, elle calculait pas toujours proprement le coefficient de Partenaire - 2/ la nouvelle méthode getStringPricePartner() disposera de différents paramètre de méthode: $coeff_partner = ce paramètre sert à transmettre le coeeficient du compte Partenaire, il peut être en nombre entier (int) ou à virgule (float) cependant, dans tout les cas, le paramètre $coeff_partner n'est pas optionnel ATTENTION - cette méthode n'est faite QUE sur les hypothèses où le compte client qui affiche le prix est un Partenaire (case cochée dans le backOffice) et aussi un Professionnel (bouton-radio coché dans le backOffice) donc tout l'affichage TTC est supprimé dans cette méthode, pour afficher les prix TTC, utiliser getPriceStringVersion2() au lieu de cette méthode donc n'utilisez pas non plus cette méthode pour gérer les prix Professionnel - 3/ ici on définit proprement toute les références qu'on aura besoin, et on stocke chacune des références dans le même tableau de données associatives PHP (float) - on évalue le prix multiplié par le coeeficient du partenaire (voir CODETAG[VTAB_PRICE_FORMATTER_REFERENCE_1]) (boolean) - on vérifie si le prix est spécial (promotionnel) ou non (voir CODETAG[VTAB_PRICE_FORMATTER_REFERENCE_2]) (float) - prix final tel qu'il sera calculé à terme (voir CODETAG[VTAB_PRICE_FORMATTER_REFERENCE_3]) - 4/ en cas de prix promotionnel - 5/ en cas de prix non-promotionnel ou par défaut - 6/ on extrait la plus petite valeur numérique parmi une liste de valeurs numériques donnée dans les prix promotionnels), en plus de notre évaluation du prix relatif au coeeficient du partenaire (VIP) on utilise des propriétés bien spécifique de la classe PriceFormatter pour récupérer les valeurs à transmettre - 7/ on extrait la plus petite valeur numérique parmi une liste de valeurs numériques donnée dans les prix non-promotionnels), en plus de notre évaluation du prix relatif au coeeficient du partenaire (VIP) là aussi, on utilise des propriétés bien spécifique de la classe PriceFormatter pour récupérer les valeurs à transmettre - 8/ finalement, nous retournons le résultat */ // ([1])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN function getStringPricePartner($coeff_partner) { // ([3])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN $partnerPrice = array( // [VTAB_PRICE_FORMATTER_REFERENCE_1] 'Évaluation' => ($this->theCost * $coeff_partner), // [VTAB_PRICE_FORMATTER_REFERENCE_2] 'Promotion' => $this->hasSpecialPrice, // [VTAB_PRICE_FORMATTER_REFERENCE_3] 'Résultat' => 0.00 ); // ([3])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END switch ($partnerPrice['Promotion']) { // ([4])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN case true: // ([6])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN $partnerPrice['Résultat'] = min( $partnerPrice['Évaluation'], (float) $this->thePrice, (float) $this->specialPrice ); // ([6])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([8])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END return($partnerPrice['Résultat']); break; // ([4])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([5])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN default: case false: // ([7])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN $partnerPrice['Résultat'] = min( $partnerPrice['Évaluation'], (float) $this->thePrice, (float) $this->lowPrice ); // ([7])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([8])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END return($partnerPrice['Résultat']); break; // ([5])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END } } // ([2])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END // ([1])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END /* [VTAB-TEAM-LINDER-PARTNER-1][OSC][MultiTaskDescriptions] ************************************************************************/ } ?>