[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/ on va commencer par structurer le nouveau fichier, de manière à facilement le reconnaître dans le code source, et surtout on respecte le système d'infobox de OSCommerce, afin de préserver la structure ET la philosophie d'affichage d'OSCommerce, soit usage de $info_box_contents = array(); $info_box_contents[] = array('text' .. menuInfoBoxHeading() et $info_box_contents = array(); $info_box_contents[] = array('text' .. menuInfoBox() on n'oublie pas d'ouvrir et de fermer les lignes du tableau (
une petite classe CSS !
- 2/ cette boite-offre est censée manipuler des données de la base de données,
ainsi, l'on crée quelques requêtes SQL afin d'extraire ou d'insérer des données de ou vers la base de données
et une variable PHP (à index nommés associatifs) qui serviront à la logique de la boite-offre, (car c'est bien une boite-offre et non une boite, en apparence visuelle),
certaines de ces variables nous serviront plus d'une fois dans ce fichier..
nous prévoyons aussi la possibilité qu'une image de produit ne soit pas accessible, donc, dans ce cas, on la remplacera par une image générique que l'on a stocké dans un dossier prévu à cet effet
concernant le tableau associatif,
chaque index nommé du tableau associatif sont destinés à être employé de manière bien précises
spécialement pour cette boite-offre: on se base sur la logique du fichier original /includes/boxes/specials.php
et on y récupère aussi les commentaires,
codes et commentaires initiaux, seront aussi repris et inclus sous forme refactorisés (c'es-à-dire proprement organisé) au code source
mais on conserve les NOMS DES VARIABLES INITIALES.
BUG - regarder le CODETAG [BUG_ASSOCIATIVE_ARRAY_INDEX_SEEMS_UNUSABLE]
- 3/ nous n'oublions pas de nullifier les variables déclarées en [2] et [5] (de les détruire), à la fin du fichier,
ceci, pour éviter tout risque de conflits, un peu comme une purge.
- 4/ il est très important que cette boite-offre dispose d'un titre géré par OSCommerce du-moins, donc, on écrit bel et bien un titre
essentiel à l'éco-système et philosophie de OSCommerce
- 5/ on utilise une variable pour définir le contenu de la boite-offre
aussi, on développe la structure HTML de la boite-offre ici
elle sera stylisée plus tard par du code CSS
et c'est là que certaines variables définies en [2], vont servir, dans le sens où, on va afficher le contenu désiré
enfin, on se sert de la variable contenant le contenu de la structure HTML de la carte-boite, et on l'affiche à l'aide d'une infoxbox: menuInfoBox()
- 6/ 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])
}
*/
?>
[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
// ([2])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
/** ANCIEN CODE REPRIS::(begin)::
**{ peut avoir été refactorisé/changé pour s'adapter aux besoin de développements) }**
**
-> 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éer une variable temporaire et l'utiliser pour stocker le customer_id. et on on la déclare valorisée comme vide si c'est le cas sinon on la créée.
.. 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ée 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;
}
/** ANCIEN CODE REPRIS::(inside)::
**{ peut avoir été refactorisé/changé pour s'adapter aux besoin de développements) }**
**
.. On ajoute des clauses WHERE à la requête SQL basée (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é !
**/
$random_product = tep_random_select("
SELECT DISTINCT
p.products_id,
pd.products_name,
p.products_price,
p.products_tax_class_id,
p.products_image,
s.specials_new_products_price
FROM
" . TABLE_PRODUCTS . " p,
" . TABLE_PRODUCTS_DESCRIPTION . " pd,
" . TABLE_SPECIALS . " s,
" . TABLE_PRODUCTS_TO_CATEGORIES . " p2c
WHERE p2c.products_id = p.products_id
AND p.products_status = '1'
AND p.products_id = s.products_id
AND pd.products_id = s.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 s.specials_date_added
DESC
LIMIT " . MAX_RANDOM_SELECT_SPECIALS
);
/** ANCIEN CODE REPRIS::(end)::
<- OSC-78: Gestion de catégories réservées aux professionnels
**/
if (!file_exists(DIR_WS_IMAGES . $random_product['products_image'])) {
$random_product['products_image'] = 'infobox/offres--speciales/offresspeciales__placeholder__image.jpg';
}
$offerboxOffresSpeciales__referencers = array(
// [BUG_ASSOCIATIVE_ARRAY_INDEX_SEEMS_UNUSABLE]
// curieux:
// - soit un bug de ma part, suite à un illogisme d'usage,
// mais aussi très probablement un bug de PHP 5.3 sur le serveur, car c'est bien encore PHP 5.3 qui y tourne à l'heure où j'écris ces lignes: (jeudi 14 novembre 2019):
//
// car utiliser:
// - print_r($offerboxOffresSpeciales__referencers['initial.phpvarname.was__($random_product)']) RENVOIE bien le tableau comme attendu
// - var_dump($offerboxOffresSpeciales__referencers['initial.phpvarname.was__($random_product)']) RENVOIE bien le tableau comme attendu
// - print_r($offerboxOffresSpeciales__referencers['rp']) RENVOIE bien le tableau comme attendu
// - var_dump($offerboxOffresSpeciales__referencers['rp']) RENVOIE bien le tableau comme attendu
//
// MAIS utiliser:
// - $offerboxOffresSpeciales__referencers['initial.phpvarname.was__($random_product)']['products_image'] RENVOIE rien, étrangement.
// - $offerboxOffresSpeciales__referencers['rp']['products_image'] RENVOIE rien, étrangement.
// - $random_product['products_image'] RENVOIE bien l'adresse de l'image comme attendu.
// --- CONCLUSION: BUG de PHP (ou un bug à moi?) ?
'initial.phpvarname.was__($random_product)' => $random_product,
'rp' => $random_product,
// DONC on utilisera $random_product au lieu de notre index de tableau PHP comme initialement pensé..
// (Vraiment étrange...), si un développeur PHP passe par là, qu'il s'y penche!
// NON VRAIMENT QUOI.. CAR.. pourtant la structure du tableau $random_product est bien en racine!
'random-product-link' => tep_href_link(FILENAME_PRODUCT_INFO,
'products_id=' . $random_product["products_id"]),
'random-product-picture' => tep_image(DIR_WS_IMAGES . $random_product['products_image'],
$random_product['products_name'],
SMALL_IMAGE_WIDTH,
SMALL_IMAGE_HEIGHT,
'class="--boxOfferboxOffresSpeciales__offerBoxContainer__genericImage uk-box-shadow-small uk-box-shadow-hover-large"'),
'random-product-name' => $random_product['products_name'],
/** ANCIEN CODE REPRIS::(begin)::
**{ peut avoir été refactorisé/changé pour s'adapter aux besoin de développements) }**
**
-> OSC-70 : Gestion HT/TTC : affichage prix HT et TTC
.. Affichage du prix dans la box des promotions/Soldes, en HT, et en TTC (en gras).
... utilise la nouvelle méthode 'afficher_prix_ttc()' de la classe currencies en ce qui concerne l'affichage TTC
.... (je reformates le code pour qu'il possède un affichage moins brouillon).
**/
'random-product-ht-price-base' => str_replace(
'EUR',
'€',
$currencies->display_price(
$random_product['products_price'],
tep_get_tax_rate($random_product['products_tax_class_id'])) . ' HT'
),
'random-product-ht-price-new' => str_replace(
'EUR',
'€',
$currencies->display_price(
$random_product['specials_new_products_price'],
tep_get_tax_rate($random_product['products_tax_class_id'])) . ' HT'
),
'random-product-ttc-price-base' => str_replace(
'EUR',
'€',
$currencies->afficher_prix_ttc(
$random_product['products_price'],
tep_get_tax_rate($random_product['products_tax_class_id'])) . ' TTC'
),
'random-product-ttc-price-new' => str_replace(
'EUR',
'€',
$currencies->afficher_prix_ttc(
$random_product['specials_new_products_price'],
tep_get_tax_rate($random_product['products_tax_class_id'])) . ' TTC'
),
/** ANCIEN CODE REPRIS::(end)::
<- OSC-70 : Gestion HT/TTC : affichage prix HT et TTC
**/
// ([6])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
'random-product-price-css-class' => ''
);
// ([6])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
if (tep_session_is_registered('customer_id')) {
if ($is_partner == true OR is_pro_customer() == true) {
$offerboxOffresSpeciales__referencers['random-product-price-css-class'] = '--pleaseAdaptForProOrPartnerCustomer';
} else {
$offerboxOffresSpeciales__referencers['random-product-price-css-class'] = '--pleaseAdaptForStandardOrVisitorCustomer';
}
} else {
$offerboxOffresSpeciales__referencers['random-product-price-css-class'] = '--pleaseAdaptForStandardOrVisitorCustomer';
}
// ([6])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
if ( !empty($offerboxOffresSpeciales__referencers['initial.phpvarname.was__($random_product)']) )
{
// ([2])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
?>
|
[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
$info_box_contents[] = array('text' => " " . '' . 'Offres spéciales' . '');
new menuInfoBoxHeading($info_box_contents, false, false);
// ([4])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
// ([5])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
$boxOfferboxOffresSpeciales__phpvar_cellBox_content = '
|
'/* ([6])-->BEGIN[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
// [USE_VARIABLE_FOR_BEING_ABLE_TO_STYLIZE_PRICES_FOR_CUSTOMERS_PROFILES_1] */ . '
';
$info_box_contents = array();
$info_box_contents[] = array('text' => $boxOfferboxOffresSpeciales__phpvar_cellBox_content);
new menuInfoBox($info_box_contents);
// ([5])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
?>
[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::BEGIN
$offerboxOffresSpeciales__referencers = null;
$boxOfferboxOffresSpeciales__phpvar_cellBox_content = null;
// ([3])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
}
// ([1])-->[SI-LINDER-PARTNER-2][OSC][SubTaskDescription]::END
/*
' /* HT: prix promotionnel */ . '
' . $offerboxOffresSpeciales__referencers['random-product-ht-price-new'] . '
' /* Séparateur des types de prix */ . '
' /* HT: prix base */ . '
' . $offerboxOffresSpeciales__referencers['random-product-ht-price-base'] . '
' /* Séparateur des types de prix */ . '
' /* HT/TTC: image + lien */ . '
'
. $offerboxOffresSpeciales__referencers['random-product-picture'] . '
' . 'Voir toutes les offres spéciales' . '
|