[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
?>add(NAVBAR_TITLE, tep_href_link(FILENAME_SPECIALS));
?>
>
[SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions]:{
- 1/ on déclare une petite variable, sous forme de tableau associatif,
ce tableau servira à identifier la page (au lieu d'utiliser PHP_SELF etc..)
et cette identification servira dans le nouveau fichier d'inclusion de design dynamique inclu en [2]
c'est tout simple !
- 2/ inclusion du fichier PHP chargeur du design, ce sera à ce fichier inclu de décider quels assets (scripts, feuilles de styles, autres) charger!
}
*/
?>
[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
// [RESPONSIVE_DESIGN_2020_IMPLEMENTATION_CARDBOARD_2020_SAPHYRA_INTERACTIVE_ETAPE_1]
$_SI__NewDesign = array(
'pageFilepath' => '/specials.php'
);
// ([1])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
// ([2])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
require_once('--SI--2020DesignInitializer.php');
/*
[SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions]
************************************************************************/
?>
[SI-LINDER-PARTNER-2][OSC][AddClassDescription(isPage--Specials isResponsive--Main)]:{" ATTENTION (ne pas oublier cette ligne!) servira à cibler cette page précise dans un sélecteur css..
// [RESPONSIVE_DESIGN_2020_IMPLEMENTATION_CARDBOARD_2020_SAPHYRA_INTERACTIVE_ETAPE_2] "} ?>
[SI-LINDER-PARTNER-2][OSC][SimpleTaskDescription]:{" on modifie la taille de cette cellule, qui est celle de gauche (avant) gérée via la constante PHP BOX_WIDTH de OSCommerce, (désormais), gérée par une valeur en dur, pourquoi? (1) la valeur initiale est gérée par une constante PHP, mais sa valeur... est aussi la modificatrice de la cellule de droite.. Ce qui pose problème quand on veut juste modifier celle de gauche et ne pas intervenir sur celle de droite, donc, ici, on modifie le echo BOX_WIDTH par une valeur fixée plus souple et enfin, on ajoute une classe pour pouvoir cibler cette cellule de tableau afin de la masquer en responsive ou autres !
// [RESPONSIVE_DESIGN_2020_IMPLEMENTATION_CARDBOARD_2020_SAPHYRA_INTERACTIVE_ETAPE_3] "} ?>
[VTAB-TEAM-LINDER-PARTNER-1][OSC][AddClassDescription(--alignPageSpecialHeadingCellTitle)]:{" on veut pouvoir cibler cette ligne de tableau plus tard: pour permettre l'alignement des éléments en mode responsive sur safari - "à ne pas manquer, attention" "} ?>
[SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions]:{
- 1/ petits changements sur la structure et sur le texte
sert uniquement à restyliser l'élément pour le centrer par exemple et le re-marger
- 2/ à l'origine, ici, il n'y avait pas de titre, alors on en rajoute un
- 3/ le texte d'origine ici est en réalité non pas un titre mais un "warning", un avertissement quoi,
on le remet ici, tout en restructurant une structure HTML avec des classes CSS et un label géré par UI Kit
- 4/ en accordance avec une tâche ici,
dans ce fichier, (voir CODETAG [SQL_SELECT_PRODUCTS_ONLY_IF_QUANTITIES_ARE_OVER_ZERO]) on va désormais masquer le ici,
car au final, vu que désormais les produits à zéro quantité d'apparaissent plus, cette mention que l'on va mettre entre des balises sera désormais invisible
}
*/
?>
[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN ?>
[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN ?>
Les articles en " fin de série " ne sont plus ré-approvisionnés.
Donc n'achetez pas plus que les quantités disponibles indiquées !
(cela ne sert à rien de toutes façons)..
VD : tri par nom de produit
// -> 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 ajoute des clauses WHERE à la requête SQL basé (pour éviter de retourner TOUT ce qui est PRO si l'utilisateur ne l'est pas (ou n'est pas identifié))
// Les clauses WHERE additionnelles seront sur ce que nous retournera la fonction find_pro_cat_sql_filter()
// déclarée dans le fichier ../functions/general.php
// Si la clause: p2c.products_id = p.products_id and
// Est omise: osCommerce affichera quand même les produits qui sont dans les catégories pros...
// Car, au niveau SQL, plus d'un enregistrement sera renvoyé !
//
// [SQL_ERROR_NEAR_FROM]
// Important: ici, on écrit le SELECT DISTINCT en majuscule pas en minuscules.
// Sinon: on aura une erreur de syntaxe SQL: near '*) as total from products p, products_description pd, specials s, products_to_c' at line 1
// Cela est du au fait que MySQL ne tolère pas la fonction distinct avec un '*' dans un COUNT() en ce qui concerne les fonctions.
// La chaîne de code "select count(distinct *) est ajouté par oscommerce via la classe: splitPageResults
// -> includes/classes/split_page_results.php
// C'est donc cette classe qui provoque ce bug..
// Mais elle ne modifie QUE SI la clause: "distinct" est écrite en minuscule (planterait aussi sur le GROUP BY)..
/*
************************************************************************
[SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions]:{
- 1/ dans cette requête, que l'on va reformater (par ré-indentation du code PHP, juste pour y voir plus clair)
nous allons effectuer une micro-tâche demandée par le client, qui même si elle ne concerne pas directement le design (charte graphique) reste intéressante pour justement se passer d'un texte précis, et surtout empêcher la commande d'un produit hors-stock
- 2/ ici on récupère aussi le champ products_quantity depuis la table SQL nommée TABLE_PRODUCTS (aka: products)
- 3/ là on rajoute une clause WHERE à la requête de recherche SQL, afin de ne récupérer que les produits qui sont en quantité supérieure à 0,
soit, là aussi le champ products_quantity depuis la table SQL nommée TABLE_PRODUCTS (aka: products), précédemment récupéré
- 4/ ATTENTION - pour une raison qui m'échappe, ici, si l'on écrit le from en majuscule: FROM
la requête SQL semble crasher... alors que les SELECT, DISTINCT, WHERE, AND, ORDER fonctionnent....
peut-être un bug de OSCommerce ou de PHP, donc, on l'écrit en minuscule
même comportement irrationnel repéré des années auparavant, et par moi-même aussi, (voir CODETAG [SQL_ERROR_NEAR_FROM])
[VTAB-TEAM-LINDER-PARTNER-1][OSC][MultiTaskDescriptions] - Revue de la charte Graphique:
- 1/ suite à l'inclusion du possible DEBUG (voir CODETAG[VTAB_DEBUG_COEFFICIENT_PRICE_PARTNER]), on ajoute le champ SQL products_model à la liste des champs SQL à récupérer
}
*/
// ([1])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
// [SQL_SELECT_PRODUCTS_ONLY_IF_QUANTITIES_ARE_OVER_ZERO]
$specials_query_raw
= "SELECT DISTINCT
p.products_id, "
// ([2])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
// ([1])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN
. "p.products_quantity, ". "
pd.products_name,
p.products_price,
p.products_model,
p.products_tax_class_id,
p.products_image,
s.specials_new_products_price "
// ([4])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
. "from " . TABLE_PRODUCTS . " p, "
. TABLE_PRODUCTS_DESCRIPTION . " pd, "
. TABLE_SPECIALS . " s, "
. TABLE_PRODUCTS_TO_CATEGORIES . "
p2c
WHERE p2c.products_id = p.products_id "
// ([3])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
. "AND p.products_quantity > 0 ". "
AND p.products_status = '1'
AND s.products_id = p.products_id
AND p.products_id = pd.products_id
AND pd.language_id = '" . (int)$languages_id . "'
AND s.status = '1' "
. find_pro_cat_sql_filter(
"p2c.",
"and",
$osc_78_customer_id_container
)
. " ORDER by pd.products_name";
// ([1])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END
// ([3])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
// ([2])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
// ([1])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
/*
[SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions]
************************************************************************
*/
// <- OSC-78: Gestion de catégories réservées aux professionnels
// <- VD : tri par nom de produit
$specials_split = new splitPageResults($specials_query_raw, MAX_DISPLAY_SPECIAL_PRODUCTS);
// -> OSC-78: Gestion de catégories réservées aux professionnels
// Fixe un bug avec l'affichage de page par la classe splitPageResults().
// Ce bug retournait: 1 produit (ou 2)..
// Ce n'est PAS du tout le véritable chiffre QUE me retourne phpMyAdmin si j'y tapes la requête contenue dans $products_new_query_raw.
// Ainsi, je vais laisser splitPageResults() se lancer, mais modifier JUSTE après ses valeurs (qu'elles aura faussé avec la modification de la requête SQL).
//
// explication:
// La modification érronnée (dans ce cas) de la commande SQL s'effectue dans le fichier: includes/classes/split_page_results.php
// Et on voit clairement qu'avec les strpos, la classe tente de réorganiser la requête du COUNT()
//
// solution:
// Pour cela, il faut faire un count sur le nombre de lignes retournés par la commande SQL.
$sqlRequest_for_finding_all_specials_by_usergroup = tep_db_query($specials_query_raw);
$countHowMany_specials_exists_in = tep_db_num_rows($sqlRequest_for_finding_all_specials_by_usergroup);
// die(strval($countHowMany_specials_exists_in)); <= renvoie le chiffre exact au format texte car en int ça affiche rien (en debug).
// Avec le chiffre retourné par MySQL, on va revaloriser toutes propriétés faussées par splitPageResults().
//
// Nombre de LIGNES:
$specials_split->number_of_rows = $countHowMany_specials_exists_in;
// Nombre de produits par PAGES:
$specials_split->number_of_rows_per_page = MAX_DISPLAY_SPECIAL_PRODUCTS;
// Nombre de PAGES:
$specials_split->number_of_pages = ceil($specials_split->number_of_rows / $specials_split->number_of_rows_per_page);
// Page ACTUELLE:
if (!empty($_GET['page']))
{
$specials_split->current_page_number = $_GET['page'];
} else {
$specials_split->current_page_number = 1;
}
// Et on modifie les frontières (de l'enregistrement SQL -> à l'enregistrement SQL) en temps réél, car la classe s'est complètement plantée !
// En ajoutant la clause LIMIT correcte tout en revalorisant la propriété sql_query ayant été revalorisé par la classe qui a ajouté limit 0, 10.
// Pour cela un peu de mathématique:
$frontiers = ($specials_split->number_of_rows_per_page * ($specials_split->current_page_number - 1));
// max() est une fonction PHP qui va retourner la plus haute valeur dans un tableau (ou si ce n'est pas un tableau, l'élément sous forme chiffrée)).
$specials_split->sql_query = $specials_query_raw . " LIMIT " . max($frontiers, 0) . ", " . $specials_split->number_of_rows_per_page;
// Le reste fonctionnera sans besoin d'être modifié.
// <- OSC-78: Gestion de catégories réservées aux professionnels
/************************************************************************
[SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions]:{
- 1/ on va plus joliment styliser cet endroit afin d'afficher le tableau de pagination, avec beaucoup plus de style et proprement
- 2/ on modifie la valeur vérifiée de PREV_NEXT_BAR_LOCATION, par 2, au lieu de 1, afin d'afficher le tableau de pagination, proprement
- 3/ on ajoute au tableau ces classes CSS: infoTableCounterPagination et uk-table
- 4/ on ajoute à la suite de cette cellule qui a déjà la classe 'smallText' ces classes CSS: infoCellCounterPagination et productsCounter
et on modifie aussi le terme 'Afficher' par 'Affichage de'
- 5/ on ajoute à la suite de cette cellule qui a déjà la classe 'smallText' ces classes CSS: infoCellCounterPagination et paginationLinks
- 6 on ajoute à cet élément une classe CSS de manière à pouvoir le cibler plus tard
}
*/
// ([1])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
// ([2])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
if (($specials_split->number_of_rows > 0) && ((PREV_NEXT_BAR_LOCATION == '2') || (PREV_NEXT_BAR_LOCATION == '3'))) {
?>
[SI-LINDER-PARTNER-2][OSC][AddClassDescription(--SpecialsMainTableCell)]:{" classe que l'on ajoute afin de pouvoir cibler plus tard cette cellule "} ?>
[VTAB-TEAM-LINDER-PARTNER-1][OSC][AddClassDescription(--alignSpecialsMainTableCell)]:{" on veut pouvoir cibler cette ligne de tableau plus tard : pour permettre l'alignement des éléments en mode responsive sur safari - "à afficher .. [suiv>>] "} ?>
[SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions]:{
- 1/ on va ici ajouter différentes choses à la structure HTML déjà en place, (bien que abusivement générée par PHP, mais on est obligé de garder cette génération..), dont des classes CSS
- 2/ on reformate le code HTML, de manière à rendre un code plus lisible pour le développement, et on rajoute quelques
- 3/ on donne une classe CSS à l'image, de cette manière on pourra jouer avec un joli effet au survol de l'image
- 4/ on donne une classe CSS aux liens href
- 5/ on donne aussi au lien reformaté un petit icone UI Kit
- 6/ on créé une variable de référence afin de pouvoir s'en resservir plus tard, cette variable contient des index, car il s'agit d'un tableau associatif
- 7/ on intègre un code concernant un test d'existence des images des produits, on reseigne un index de la variable déclarée en [6]
- 8/ on utilise un index précis ici de la variable déclarée en [6], cela nous permettra d'avoir la bonne image à afficher
- 9/ afin de fixer un glitch de décalage du éventuellement à un nom de produit tenant sur deux lignes dans la cellule,
on va devoir donner à cette cellule une classe CSS (qui n'en avait pas initiallement de spécifique autre que smallText) ici, qui va nottemment rajouter une directive vertical-align ici, afin d'aligner en haut (top) au lieu de la base
- 10 pour afficher le prix de base HT et TTC et le prix promotionnel (car les Specials = offres spéciales) on va déjà devoir se passer de l'ancien système d'affichage, que l'on va immédiatement commenter
(pas supprimer juste commenter au cas où un glitch de calcul se produirait, on pourrait alors comparer... rien n'est acquis en développement!)
- 11 et ici on affiche les prix avec le nouveau système
qui reprends plus ou moins mon code déjà en place dans le fichier: includes/boxes/si_newdesign2019_offres_speciales_offerbox.php
(code aussi intégré avec la venue du nouveau design)
- 12/ 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à un index vierge dans la variable de référence
qui sera valorisée au travers d'une condition PHP qui sera construite 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 (pro ou partenaire/particulier ou visiteur) par des règles CSS depuis le fichier de styles CSS principal..
on va aussi devoir désormais donner une classe --textHT à un tout nouveau que l'on pourra désormais cibler depuis le fichier de styles CSS principal/mediaqueries
dans lequel on va désormais encadrer le prix HT
elle servira aussi ici, (voir CODETAG[USE_VARIABLE_FOR_BEING_ABLE_TO_STYLIZE_PRICES_FOR_CUSTOMERS_PROFILES_1] et [USE_VARIABLE_FOR_BEING_ABLE_TO_STYLIZE_PRICES_FOR_CUSTOMERS_PROFILES_2])
[VTAB-TEAM-LINDER-PARTNER-1][OSC][MultiTaskDescriptions] - Revue de la charte Graphique:
- 1/ suite à la révision du fichier /includes/classes/PriceFormatter.php
qui implique le retrait de tout élément raturé/barré dans la sortie construite des prix barrés !
ici aussi, nous supprimons (en commentant le code PHP/HTML) ce genre de prix barrés, cette fois dans le fichier /specials.php on liste le prix de base du produit en le barrant en CSS et non en HTML, ici la classe PHP "PriceFormatter" n'est pas employée. donc, ce n'est pas un problème grave, et je vais fixer le problème en commentant la génération du-dit code HTML/PHP gérant cet aspect dans cette page, il faudrait par la suite convenir à nettoyer ce fichier de cette substance désormais rendue obsolète dans VTAB.
- 2/ dans le but de davantage pouvoir avoir en [4] et valorisé en [3] un granularité beaucoup plus précise dans le ciblage CSS
on ajoute un index spécial au tableau PHP qui nous aidera à délimiter le profil commercial du client
- 3/ on va valoriser l'index déclaré en [2] 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 : Partenaire
si le client est un professionnel : Professionnel
si le client n'est ni l'un ni l'autre : 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.
- 4/ on injecte la nouvelle donnée dynamique renseignée en [3] 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é
- 5/ initialement pour évaluer le prix Partenaire (VIP) car ici on a besoin de l'afficher sous forme de chaîne
on faisait appel à Currencies, et à sa méthode: display_price()
mais on avait un souci, le prix sans coeeficient de réduction (donc prix bien promotionnel mais sans le coeeficient des Partenaires (VIP)) était ce qui en résultait...
et forcément, bah ce n'est pas correct
cela se voyait uniquement dans le cas suivant: si on avait un prix promotionnel, avec un tableau dégressif,
Incorrect: le prix sans coeeficient, mais bien HT et bien promotionnel est affiché dans la page listing
Correct : il faut afficher le prix promotionel tout en appliquant le coefficient Partenaire (VIP)
cela se voyait uniquement dans le cas suivant: si on avait un prix promotionnel, sans tableau dégressif,
Incorrect: le prix sans coeeficient, mais bien HT et bien promotionnel est affiché dans la page listing
Correct : il faut afficher le prix promotionel tout en appliquant le coefficient Partenaire (VIP)
un petit debug est laissé en commentaire pour voir les différences (voir CODETAG[VTAB_DEBUG_COEFFICIENT_PRICE_PARTNER])
entre avant [Currencies->display_price()] et après [PriceFormatter->getStringPricePartner()]
pour ce faire, on a besoin de 3 zones à modifier:
- ajouter un index associatif 'customer_vip_price' au tableau des références de la page specials: $Specials__referencers
- utiliser le PriceFormatter (déjà déclaré dans la variable objet $pf): pour charger le produit (on utilise sa méthode loadProduct()) sinon bah, pas de chargement de produit, pas de détails sur le produit
- utiliser le PriceFormatter (déjà déclaré dans la variable objet $pf): pour évaluer le prix Partenaire (VIP) promotionnel au vu du coeeficient Partenaire (VIP)
- et enfin, pour rappel, on a ces classes CSS et ces éléments HTML déjà:
on masquera par défaut en CSS ces éléments, directement dans le code HTML
nous on rajoute un autre élément HTML (et on masque son affichage directement dans le code HTML):
tout ces éléments HTML devront être ciblés en CSS comme suit:
- on stockera le prix Standard (Particulier/Visiteur) dans le (technique: Currencies->afficher_prix_ttc()())
- on stockera le prix Professionnel (PRO) dans le (technique: Currencies->display_price())
- on stockera le prix Partenaire (VIP) dans le (technique: PriceFormatter->getStringPricePartner())
on ne peut pas se permettre de modifier les prix déjà en place, et il nous faut le afficher_prix_ttc() pour les prix TTC et le display_price() pour les prix HT Professionnel..
la raison est simple:
la deadline approchait, et si l'on modifiait la structure interne du code des autres prix,
Particuliers et Professionnels: on aurait besoin de revérifier encore et encore tout les prix et on risquerait d'en oublier,
et à ce stade, ce serait du suicide que de refaire une poignée de tests unitaires.
donc, on ruse en CSS:
quand le compte-client qui affiche le produit est égal à Standard (design-customer-profile est égal à Standard):
on masquera :
--productPromoPriceHT
--productPromoPriceHTAndVIP
on affichera :
--productPromoPriceTTC
quand le compte-client qui affiche le produit est égal à Professionnel (design-customer-profile est égal à Professionnel):
on masquera :
--productPromoPriceTTC
--productPromoPriceHTAndVIP
on affichera :
--productPromoPriceHT
quand le compte-client qui affiche le produit est égal à Partenaire (design-customer-profile est égal à Partenaire):
on masquera :
--productPromoPriceTTC
--productPromoPriceHT
on affichera :
--productPromoPriceHTAndVIP
}
*/
// ([1])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
$row = 0;
$specials_query = tep_db_query($specials_split->sql_query);
while ($specials = tep_db_fetch_array($specials_query)) {
$row++;
// ([6])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
$Specials__referencers = array(
'product_image' => DIR_WS_IMAGES . $specials['products_image'],
// ([12])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
'product_price_css_class' => '',
// ([2])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END
'customer_profile' => 'Standard',
// ([5])-->BEGIN[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::END
'customer_vip_price' => 0.00
);
// ([6])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
// ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
if (!file_exists($Specials__referencers['product_image'])) {
$Specials__referencers['product_image'] = DIR_WS_DESIGN . 'SI_DesignV2/placeholder__products.jpg';
}
// ([7])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
// ([12])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
if (tep_session_is_registered('customer_id')) {
if ($is_partner == true OR is_pro_customer() == true) {
$Specials__referencers['product_price_css_class'] = '--pleaseAdaptForProOrPartnerCustomer';
// ([3])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN
if ($is_partner == true) {
$Specials__referencers['customer_profile'] = 'Partenaire';
// ([5])-->[VTAB-TEAM-LINDER-PARTNER-1][OSC][SubTaskDescription]::BEGIN
/*
// [VTAB_DEBUG_COEFFICIENT_PRICE_PARTNER]
if ($specials['products_model'] == 'e53/53614 fin de série') {
echo '
[SI-LINDER-PARTNER-2][OSC][MultiTaskDescriptions]:{
- 1/ on va plus joliment styliser cet endroit afin d'afficher le tableau de pagination, avec beaucoup plus de style et proprement
- 2/ on ajoute au tableau ces classes CSS: infoTableCounterPagination et uk-table
- 3/ on ajoute à la suite de cette cellule qui a déjà la classe 'smallText' ces classes CSS: infoCellCounterPagination et productsCounter
et on modifie aussi le terme 'Afficher' par 'Affichage de'
- 4/ on ajoute à la suite de cette cellule qui a déjà la classe 'smallText' ces classes CSS: infoCellCounterPagination et paginationLinks
- 5/ exceptionnellement pour ici, on intervertit l'ordre d'affichage des deux cellules en [3] et [4], ainsi que leur "align="right""
- 6/ on ajoute une classe à cet élément pour permettre l'alignement des éléments en mode responsive sur safari -> "à afficher .. [suiv>>]
}
*/
// ([1])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
if (($specials_split->number_of_rows > 0) && ((PREV_NEXT_BAR_LOCATION == '2') || (PREV_NEXT_BAR_LOCATION == '3'))) {
?>
[SI-LINDER-PARTNER-2][OSC][SimpleTaskDescription]:{" on ajoute une classe pour pouvoir cibler cette cellule de tableau afin de la masquer en responsive ou autres !
// [RESPONSIVE_DESIGN_2020_IMPLEMENTATION_CARDBOARD_2020_SAPHYRA_INTERACTIVE_ETAPE_4] "} ?>
[SI-LINDER-PARTNER-2][OSC][SimpleTaskDescription]:{" on ajoute un élément HTML et une classe pour pouvoir cibler cette zone afin de la styliser en responsive ou autres ! "} ?>