[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 ?>[SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions]:{ - 1/ contrairement aux boxes, dans la nouvelle version du design, les pages hors-boxes, on ne va pas les revoir entièrement, car il s'agit de pages qui peuvent êtres du coeur d'un MODULE ou de OSCOMMERCE, donc, en cas de mises à jours, il vaut mieux conserver une structure habituelle, ce sera plus facile pour effectuer des transitions du code source vers une version plus récente de OSCommerce ou d'un MODULE en particulier, par contre, on va fixer les petits soucis d'accents des commentaires, ici on va revoir: entièrement le concept dérrière la façon d'afficher le prix, on va se baser sur la logique (sans tout reprendre à l'exactitude) du fichier includes/boxes/si_newdesign2019_tout_nouveau_offerbox.php - 2/ déjà, on va revoir le nom de la page (pas du fichier, mais de la page affichée à l'utilisateur) on va aussi intégrer le fichier de langage - 3/ on revoit le code concernant l'affichage des prix et des images des nouveaux produits (base) - 4/ on revoit le code concernant l'affichage des prix et des images des nouveaux produits (promotionnel/spéciaux) - 5/ on injecte le tableau de prix par paliers (PRICE_BREAK !), on va y utiliser une nouvelle méthode qu'on aura exprès créé pour cette version du design. en réalité, l'ancienne méthode passe par la classe PriceFormatter (située dans le dossier includes/classes/PriceFormatter.php), on va conserver cette classe, mais développer une méthode basée sur: ->getPricePartner() pour trouver le tableau de prix par paliers Partenaire la nouvelle méthode sera nommée getPricePartnerVersion2() ->getPriceString() pour trouver le tableau de prix par paliers Standard la nouvelle méthode sera nommée getPriceStringVersion2() ATTENTION - avant octobre 2020, le client, aimait l'affichage où le 1+ n'apparaissait plus (OnlyPriceBreaker) - depuis octobre 2020, le client, finalement préfère l'affichage à l'ancienne, avec le +1 (Standard) - 6/ on vide les variables PHP utilisées ici dans le but de purger la mémoire du serveur et de libérer par extension la mémoire } */ ?>[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN ?> [SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $info_box_contents[] = array('text' => "  " . '' . 'Nos Nouveautés' . ' ' . 'Voir toutes les nouveautés' . ''); require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_PRODUCT_INFO); // ([2])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END new contentBoxHeading($info_box_contents); // -> OSC-78: Gestion de catégories réservées aux professionnels // Si le client n'est pas identifié, cela amènerait une warning ERROR (de fait que la variable $customer_id) n'existerait pas! // Ainsi, on vérifie si la variable est vide/inexistante // Par précaution, on va créé une variable temporaire et l'utiliser pour stocker le customer_id. et on on la déclare valorisée à vide si c'est le cas sinon on créé. // Modifier la variable par défaut créée par oscommerce n'ammènerait que des ennuis (et pas forcément tout de suite mais lors de futurs développements). // Ainsi, on créé une variable vide: $osc_78_customer_id_container = ''; if (empty($customer_id)) { $osc_78_customer_id_container = ''; } else { $osc_78_customer_id_container = $customer_id; } // On va modifier la requète SQL pour ne lister que les produits non-reservés aux pros si le client n'est pas pro ou non identifié ! // Si le client est identifié ET qu'il est pro, il n'y aura pas de filtrage ajouté. // Le filtrage s'effectue via la fonction find_pro_cat_sql_filter() déclarée dans le fichier ../functions/general.php if ( (!isset($new_products_category_id)) || ($new_products_category_id == '0') ) { $new_products_query = tep_db_query("select distinct p.products_id, p.products_image, p.products_tax_class_id, if(s.status, s.specials_new_products_price, p.products_price) as products_price from " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where p.products_id = p2c.products_id and products_status = '1' " . find_pro_cat_sql_filter("p2c.", "and", $osc_78_customer_id_container) . " order by p.products_date_added desc limit " . MAX_DISPLAY_NEW_PRODUCTS); } else { $new_products_query = tep_db_query("select distinct p.products_id, p.products_image, p.products_tax_class_id, if(s.status, s.specials_new_products_price, p.products_price) as products_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES . " c where p.products_id = p2c.products_id and p2c.categories_id = c.categories_id and c.parent_id = '" . (int)$new_products_category_id . "' and p.products_status = '1' " . find_pro_cat_sql_filter("p2c.", "and", $osc_78_customer_id_container) . " order by p.products_date_added desc limit " . MAX_DISPLAY_NEW_PRODUCTS); } // <- OSC-78: Gestion de catégories réservées aux professionnels $row = 0; $col = 0; $info_box_contents = array(); while ($new_products = tep_db_fetch_array($new_products_query)) { // -> VD : affichage des prix par pallier dans les nouveautés // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC // on va vérifier le type de langue utilisé par l'utilisateur // // Il s'agit de changer le terme 'à partir de' par sa correspondance Anglaise // Si l'on est en Anglais et pas en Français. // On ajoutes aussi de nouvelles constantes de langues non définies. $ToutesLesLanguesParlees_osc70 = array( "english" => "en", "french" => "fr" ); // la variable $language est générée par osCommerce je le rappelle // et contient la langue choisie sur le site par l'utilisateur (exemple: french). $LangueTrouvee_osc70 = $ToutesLesLanguesParlees_osc70[$language]; // par défaut, si aucune langue valide n'est trouvée, on décide d'utiliser le Français. if ( empty($LangueTrouvee_osc70)) { $LangueTrouvee_osc70 = 'fr'; } // Textes 'à partir de' ET 'En vente'.. // Langues gérées: Français (fr), Anglais (en). switch ($LangueTrouvee_osc70) { case 'fr': define(TEXT_PRICE_BREAKS, 'à partir de'); define(TEXT_ON_SALE, 'En vente'); break; case 'en': define(TEXT_PRICE_BREAKS, 'starting at'); define(TEXT_ON_SALE, 'On sale'); break; } // -> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC $pf->loadProduct((int)$new_products['products_id'], (int)$languages_id); // ([3])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if (!file_exists(DIR_WS_IMAGES . $new_products['products_image'])) { $new_products['products_image'] = DIR_WS_DESIGN . 'SI_DesignV2/placeholder__products.jpg'; } else { $new_products['products_image'] = DIR_WS_IMAGES . $new_products['products_image']; } $new_products['products_name'] = tep_get_products_name($new_products['products_id']); $new_products['specials_new_products_price'] = tep_get_products_special_price($new_products['products_id']); $new_products_partner_price = number_format((float)$pf->getPartnerPrice($coeff_partner), 2, '.', ''); $moduleNewProducts__referencers = array( 'new-products-link' => tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $new_products['products_id']), 'new-products-picture' => tep_image($new_products['products_image'], $new_products['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT, 'class="--boxOfferboxToutNouveau__offerBoxContainer__genericImage uk-box-shadow-small uk-box-shadow-hover-large"'), 'new-products-name' => $new_products['products_name'], 'new-products-ht-price-base' => '', 'new-products-ht-price-new' => '', 'new_products-ttc-price-base' => '', 'new-products-ttc-price-new' => '', 'new-products-has-special-price' => false, 'new-products-pricesbreaktable' => '' ); // > [start]{"si le client est un partenaire"} if ($is_partner == true) { // // > [start]{"si le produit a un prix promotionnel et si ce prix promotionnel est inférieur au prix partenaire"} if (tep_not_null($new_products['specials_new_products_price']) && $new_products['specials_new_products_price'] < $new_products_partner_price ) { // // - on renseigne alors L'ANCIEN PRIX {BASE} HT : $moduleNewProducts__referencers['new-products-ht-price-base'] = str_replace( 'EUR', '', $currencies->display_price( $new_products['products_price'], tep_get_tax_rate($new_products['products_tax_class_id'])) . ' HT' ); // // - on renseigne alors le NOUVEAU PRIX {PROMOTIONEL NON PARTENAIRE} HT : $moduleNewProducts__referencers['new-products-ht-price-new'] = str_replace( 'EUR', '', $currencies->display_price( $new_products['specials_new_products_price'], tep_get_tax_rate($new_products['products_tax_class_id'])) . ' HT' ); // // - (est inutilisé, mais on conserve pour la philosophie des anciennes révisions) // -- on renseigne alors L'ANCIEN PRIX {BASE} TTC : $moduleNewProducts__referencers['new-products-ttc-price-base'] = str_replace( 'EUR', '', $currencies->afficher_prix_ttc( $new_products['products_price'], tep_get_tax_rate($new_products['products_tax_class_id'])) . ' TTC' ); // // - (est inutilisé, mais on conserve pour la philosophie des anciennes révisions) // -- on renseigne alors LE NOUVEAU PRIX {PROMOTIONEL NON PARTENAIRE} TTC : $moduleNewProducts__referencers['new-products-ttc-price-new'] = str_replace( 'EUR', '', $currencies->afficher_prix_ttc( $new_products['specials_new_products_price'], tep_get_tax_rate($new_products['products_tax_class_id'])) . ' TTC' ); // // -- puis on précise qu'on a à faire à un prix promotionnel! $moduleNewProducts__referencers['new-products-has-special-price'] = true; // // < [stop]{"si le produit a un prix promotionnel et si ce prix promotionnel est inférieur au prix partenaire"} } elseif ( $new_products['products_price']< $new_products_partner_price) { // > [start]{"ou bien si le produit a un prix de base non promotionnel mais quand même inférieur au prix partenaire"} // // - on renseigne alors LE PRIX {BASE} HT : $moduleNewProducts__referencers['new-products-ht-price-base'] = str_replace( 'EUR', '', $currencies->display_price( $new_products['products_price'], tep_get_tax_rate($new_products['products_tax_class_id'])) . ' HT' ); // // - (est inutilisé, mais on conserve pour la philosophie des anciennes révisions) // -- on renseigne alors LE PRIX {PROMOTIONEL NON PARTENAIRE} TTC : $moduleNewProducts__referencers['new-products-ttc-price-base'] = str_replace( 'EUR', '', $currencies->afficher_prix_ttc( $new_products['products_price'], tep_get_tax_rate($new_products['products_tax_class_id'])) . ' TTC' ); // // -- puis on précise qu'on est face à un prix non promotionnel! $moduleNewProducts__referencers['new-products-has-special-price'] = false; // // < [stop]{"ou bien si le produit a un prix de base non promotionnel mais quand même inférieur au prix partenaire"} } else { // > [start]{"partenaire, dans tout les cas restants"} // // - on renseigne alors LE PRIX {PARTENAIRE} HT : $moduleNewProducts__referencers['new-products-ht-price-base'] = str_replace( 'EUR', '', $currencies->display_price( $new_products_partner_price, tep_get_tax_rate($new_products['products_tax_class_id'])) . ' HT' ); // // - (est inutilisé, mais on conserve pour la philosophie des anciennes révisions) // -- on renseigne alors LE PRIX {PARTENAIRE} TTC : $moduleNewProducts__referencers['new-products-ttc-price-base'] = str_replace( 'EUR', '', $currencies->afficher_prix_ttc( $new_products_partner_price, tep_get_tax_rate($new_products['products_tax_class_id'])) . ' TTC' ); // // -- puis on précise qu'on est face à un prix non promotionnel! $moduleNewProducts__referencers['new-products-has-special-price'] = false; // // < [stop]{"partenaire, dans tout les cas restants"} } // < [stop]{"si le client est un partenaire"} } else { // > [start]{"si le client est un client standard"} // // > [start]{"si le produit a un prix promotionnel"} if (tep_not_null($new_products['specials_new_products_price'])) { // // - on renseigne alors L'ANCIEN PRIX {BASE} HT : $moduleNewProducts__referencers['new-products-ht-price-base'] = str_replace( 'EUR', '', $currencies->display_price( $new_products['products_price'], tep_get_tax_rate($new_products['products_tax_class_id'])) . ' HT' ); // // - on renseigne alors le NOUVEAU PRIX {PROMOTIONEL} HT : $moduleNewProducts__referencers['new-products-ht-price-new'] = str_replace( 'EUR', '', $currencies->display_price( $new_products['specials_new_products_price'], tep_get_tax_rate($new_products['products_tax_class_id'])) . ' HT' ); // // - (est inutilisé, mais on conserve pour la philosophie des anciennes révisions) // -- on renseigne alors L'ANCIEN PRIX {BASE} TTC : $moduleNewProducts__referencers['new-products-ttc-price-base'] = str_replace( 'EUR', '', $currencies->afficher_prix_ttc( $new_products['products_price'], tep_get_tax_rate($new_products['products_tax_class_id'])) . ' TTC' ); // // - (est inutilisé, mais on conserve pour la philosophie des anciennes révisions) // -- on renseigne alors LE NOUVEAU PRIX {PROMOTIONEL} TTC : $moduleNewProducts__referencers['new-products-ttc-price-new'] = str_replace( 'EUR', '', $currencies->afficher_prix_ttc( $new_products['specials_new_products_price'], tep_get_tax_rate($new_products['products_tax_class_id'])) . ' TTC' ); // // -- puis on précise qu'on a à faire à un prix promotionnel! $moduleNewProducts__referencers['new-products-has-special-price'] = true; // // < [stop]{"si le produit a un prix promotionnel"} } else { // > [start]{"standard, dans tout les cas restants"} // // - on renseigne alors LE PRIX {STANDARD} HT : $moduleNewProducts__referencers['new-products-ht-price-base'] = str_replace( 'EUR', '', $currencies->display_price( $new_products['products_price'], tep_get_tax_rate($new_products['products_tax_class_id'])) . ' HT' ); // // - (est inutilisé, mais on conserve pour la philosophie des anciennes révisions) // -- on renseigne alors LE PRIX {STANDARD} TTC : $moduleNewProducts__referencers['new-products-ttc-price-base'] = str_replace( 'EUR', '', $currencies->afficher_prix_ttc( $new_products['products_price'], tep_get_tax_rate($new_products['products_tax_class_id'])) . ' TTC' ); // // -- puis on précise qu'on est face à un prix non promotionnel! $moduleNewProducts__referencers['new-products-has-special-price'] = false; // // < [stop]{"standard, dans tout les cas restants"} } // < [stop]{"si le client est un client standard"} } // ([3])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // ([4])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $info_box_contents[$row][$col] = array( 'align' => 'center', 'params' => 'class="smallText" width="33%" valign="top"', 'text' => '' ); $info_box_contents[$row][$col]['text'] = '
'; if ($moduleNewProducts__referencers['new_products-has-special-price'] == true) { $info_box_contents[$row][$col]['text'] .= '
' /* HT: prix promotionnel */ . ' ' . $moduleNewProducts__referencers['new-products-ht-price-new'] . ' ' /* Séparateur des types de prix */ . '

' /* TTC: prix promotionnel (encadré de gras) */ . ' ' . $moduleNewProducts__referencers['new_products-ttc-price-new'] . '
' /* HT: prix base */ . '
' . $moduleNewProducts__referencers['new-products-ht-price-base'] . '
' /* Séparateur des types de prix */ . '

' /* TTC: prix base (encadré de gras) */ . '
' . $moduleNewProducts__referencers['new-products-ttc-price-base'] . '
'; } else { $info_box_contents[$row][$col]['text'] .= '
' /* HT: prix base */ . ' ' . $moduleNewProducts__referencers['new-products-ht-price-base'] . ' ' /* Séparateur des types de prix */ . '

' /* TTC: prix base: (encadré de gras) */ . ' ' . $moduleNewProducts__referencers['new-products-ttc-price-base'] . '
'; } $info_box_contents[$row][$col]['text'] .= '

' /* HT/TTC: image + lien */ . ' ' . $moduleNewProducts__referencers['new-products-picture'] . '
' /* HT/TTC: nom + lien */ . ' ' . $moduleNewProducts__referencers['new-products-name'] . '

' . '----------' . '
'; // ([5])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN if($is_partner==true){ $products_price = $pf->getPricePartnerVersion2('productPriceInBox', 'right', 'Standard'); }else { $products_price = $pf->getPriceStringVersion2('productPriceInBox', 'right', 'Standard'); } if (preg_match('/(?:\ '; } // ([5])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END // <- VD $col ++; if ($col > 2) { $col = 0; $row ++; } } new contentBox($info_box_contents); // ([4])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END ?> [SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN $moduleNewProducts__referencers = null; $info_box_contents = null; // ([6])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END ?> [SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END ?> [SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions] ************************************************************************/ ?>