Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forum osCommerce-fr _ Echanges développeurs _ Condition date d'ajout inférieure à un mois

Écrit par : aurelou 11 May 2016, 13:02

Bonjour,

Je cherche à mettre une image "nouveau" en overlay sur mes produits, si la date d'ajout est inférieure à un mois.

Je n'arrive pas à faire la condition. Pourriez-vous m'aider ?

Je voudrais simplement de l'aide pour la ligne : if 'products_date_added' est inférieure à un mois

Merci beaucoup pour votre aide.

Écrit par : Bonbec 11 May 2016, 19:56

Bonjour,

Dans mon site MS 2.2, fichier products_listing.php, j'ai :

Code
if ( (time() - strtotime($listing['products_date_added'])) < 2592000) {

2592000 = 30 jours

J'espère que cela répond à ta question.

Écrit par : aurelou 13 May 2016, 11:54

Bonjour,

Merci beaucoup pour la réponse !

Je ne sais pas pourquoi ça ne fonctionne pas chez moi... confused.gif

Voici le bout de code que je mets :

Citation
elseif ( (time() - strtotime($listing['products_date_added'])) < 2592000) {

$text_image = '<a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'manufacturers_id=' . (int)$_GET['manufacturers_id'] . '&products_id=' . $listing[$x]['products_id']) . '">' . tep_image(DIR_WS_IMAGES . $listing[$x]['products_image'], $listing[$x]['products_name'], (ADDIMAGES_RESTRICT_IMAGE_SIZE == 'true'?SMALL_IMAGE_WIDTH:''), (ADDIMAGES_RESTRICT_IMAGE_SIZE == 'true'?SMALL_IMAGE_HEIGHT:''), 'style="position:relative; z-index:2"') . '<img src="images/overlay-new.png" style="display:block; position:relative;z-index:4; margin-top:-239px"></a>';

}


J'ai également une condition du même genre pour les produits en promotion et ça fonctionne très bien :

Citation
elseif (tep_not_null($listing[$x]['specials_new_products_price'])) {

$text_image = '<a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'manufacturers_id=' . (int)$_GET['manufacturers_id'] . '&products_id=' . $listing[$x]['products_id']) . '">' . tep_image(DIR_WS_IMAGES . $listing[$x]['products_image'], $listing[$x]['products_name'], (ADDIMAGES_RESTRICT_IMAGE_SIZE == 'true'?SMALL_IMAGE_WIDTH:''), (ADDIMAGES_RESTRICT_IMAGE_SIZE == 'true'?SMALL_IMAGE_HEIGHT:''), 'style="position:relative; z-index:2"') . '<img src="images/specials_overlay-french.png" style="display:block; position:relative;z-index:4; margin-top:-239px"></a>';
}


J'ai aussi essayé comme ça mais ça ne fonctionne pas non plus :/

Citation
elseif (strtotime($listing[$x]['products_date_added']) > strtotime('-1 month')) {


Écrit par : Bonbec 18 May 2016, 07:53

Bonjour,

Quand tu dis que cela ne fonctionne pas, c'est que :
1) tu ne vas pas dans ton elseif ?
2) time() - strtotime($listing['products_date_added']) ne donne aucune valeur ?
Eventuellement mettre la valeur de time() dans une variable et faire $variable - strtotime($listing['products_date_added'])
Il avait fallu que je fasse cela chez un ex hébergeur.
3) idem pour strtotime($listing[$x]['products_date_added']) et strtotime('-1 month') ?

Écrit par : Bonbec 23 May 2016, 13:36

Re bonjour,

Pas de nouvelles ...
Sur mon autre ordi, en local, ma ligne de texte ne fonctionne pas :

Code
if ( (time() - strtotime($listing['products_date_added'])) < 2592000) {

Je suis obligé de sortir time() de la ligne et le mettre en variable :
Code
$timeactuel = time();
if ( ($timeactuel - strtotime($listing['products_date_added'])) < 2592000) {

Et là çà fonctionne.
Peut-être que pour toi ce sera aussi le cas ?

Écrit par : aurelou 23 May 2016, 14:22

Bonjour,

Merci beaucoup encore pour toute cette aide.

Désolée de ne pas avoir répondu plus tôt, c'est que je ne m'étais pas re penchée dessus depuis. Quand je suis trop énervée sur quelque chose j'ai la fâcheuse tendance à le laisser complètement tomber.

J'ai essayé de mettre time() en variable mais ça ne fonctionne pas non plus. Quand je dis que ça ne fonctionne pas, c'est que mon image n'apparaît pas en overlay pour les produits de moins d'un mois. C'est comme s'il n'y avait rien d'ajouté à mon code; il n'y a pas non plus de message d'erreur.

Je précise que mon image fonctionne bien, quand je ne précise aucune condition elle s'affiche bien sur tous les produits.

C'est exactement pareil pour strtotime('-1 month').

Écrit par : Bonbec 24 May 2016, 09:11

Re,
Faut jamais laisser tomber, tu peux mettre de côté puis revenir après dessus, en général çà fonctionne comme méthode happy.gif

Essaye de placer ce code dans ton fichier :

Code
echo 'time = ' . time();
echo '<br>products_date_added = ' . $listing['products_date_added'];
echo '<br>strtotime = ' . strtotime($listing['products_date_added']);
$resultat = 'çà marche pas';
if ( (time() - strtotime($listing['products_date_added'])) < 2592000) {
$resultat = 'çà marche';
}
echo '<br>' . $resultat;

Cela t'affiche quelque chose ?
si c'est $listing['products_date_added']) qui ne donne rien, c'est que products_date_added doit manquer dans le $listing_sql du fichier index.php

Écrit par : aurelou 26 May 2016, 13:41

Bonjour Bonbec,

Merci encore smile.gif smile.gif

J'ai placé le code et ça m'affiche ça :

Citation
time = 1464266087
products_date_added =
strtotime =
çà marche pas


Donc j'imagine que c'est products_date_added qui manque dans le $listing_sql du fichier index.php ?

Je vais vérifier si j'arrive à trouver ça smile.gif

Écrit par : aurelou 26 May 2016, 13:45

Alors, dans mon fichier index.php je trouve "products_date_added" uniquement ici :

Citation
// BOF Enable & Disable Categories
$listing_sql = "select " . $select_column_list . " p.products_date_added, p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, p.products_sort_order, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from (" . TABLE_PRODUCTS . " p)
left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id
left join " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c on p.products_id = p2c.products_id
left join " . TABLE_CATEGORIES . " c on p2c.categories_id = c.categories_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m
where c.categories_status = '1' and p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "'";
// EOF Enable & Disable Categories


Est-ce normal ? Comme ce bout de code est modifié avec la contribution "Enable & Disable Categories" j'ai peut-être fais des erreurs.

Écrit par : Bonbec 26 May 2016, 14:24

Re,
C'est pour ton site MS2.2 ou le 2.3.4 ?
Si c'est pour le MS2.2, alors moi j'ai çà (mais ma page est très modifiée) et cela avait été ajouté pour la contrib "New Product Icon contribution" :

Code
// montre le produit du fabricant spécifié - show the products of a specified manufacturer
    if (isset($_GET['manufacturers_id'])) {
      if (isset($_GET['filter_id']) && tep_not_null($_GET['filter_id'])) {
// Nous sommes invités à montrer seulement une catégorie spécifique - We are asked to show only a specific category
// p.products_date_added to query for New Product Icon contribution
        $listing_sql = "select " . $select_column_list . " p.products_date_added, p.products_allow_resellers, p.products_discount, p.products_unit, p.products_id, p.manufacturers_id, p.products_price, p.products_price_resellers, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' ".$andpropart." and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$_GET['manufacturers_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$_GET['filter_id'] . "' and ISNULL(p.products_date_available)";
      } else {
// On montre tout - We show them all
// p.products_date_added to query for New Product Icon contribution
        $listing_sql = "select " . $select_column_list . " p.products_date_added, p.products_allow_resellers, p.products_discount, p.products_unit, p.products_id, p.manufacturers_id, p.products_price, p.products_price_resellers, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m where p.products_status = '1'  ".$andpropart." and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$_GET['manufacturers_id'] . "'  and ISNULL(p.products_date_available)";
      }
    } else {
// On montre les produits de la catégorie spécifiée - show the products in a given categorie
      if (isset($_GET['filter_id']) && tep_not_null($_GET['filter_id'])) {
// Nous sommes invités à montrer seulement une catégorie spécifique - We are asked to show only specific catgeory
// p.products_date_added to query for New Product Icon contribution
        $listing_sql = "select " . $select_column_list . " p.products_date_added, p.products_allow_resellers, p.products_discount, p.products_scale, p.products_unit, p.products_id, p.manufacturers_id, p.products_price, p.products_price_resellers, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' ".$andpropart." and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$_GET['filter_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "' and ISNULL(p.products_date_available)";
      } else {
// On montre tout - We show them all
// p.products_date_added to query for New Product Icon contribution
        $listing_sql = "select " . $select_column_list . " p.products_scale, p.products_date_added, p.products_allow_resellers, p.products_discount, p.products_unit, p.products_id, p.manufacturers_id, p.products_purchase_price, p.products_price, p.products_price_resellers, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' ".$andpropart." and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "' and ISNULL(p.products_date_available)";
      }
    }

Comme tu peux le voir, il y a le p.products_date_added pour chaque $listing_sql =

Écrit par : Gnidhal 26 May 2016, 18:25

Bel effort de codage Bonbec, ça peut marcher mais il y a plus simple.
La date en bdd est toujours enregistrée en datetime ce qui se matérialise par une écriture : yyyy-mm-dd HH:ii:ss
Ainsi en PHP la récup de la date courante par date("Y-m-d") a le même format (ici on se fout de l'heure mais on pourrait l'ajouter avec Y-m-d H:i:s).
Ce qui fait qu'une simple comparaison du champ avec la date courante sans passer par un strtotime permet de déclencher une action.
Mieux, en tronquant la chaine current_date, en enlevant le jour par exemple on peut faire un filtrage mensuel ou en ajoutant l'heure on peut faire un filtrage horaire (ou jusqu'à la seconde)

Code
$current_date = date('Y-m-d');
$bdd_date = $listing['products_last_modified'];
# $bdd_date = $listing['products_date_added']; // autre date au choix
if($current_date <= $bdd_date) {
    // liste d'action
}

Maintenant il faut que ce champ de date soit chargé par la requête de listing, ce qui semble être le problème dans ce post.
Bon courage wink.gif

Écrit par : Bonbec 27 May 2016, 12:29

Bonjour Gnidhal,

Effectivement c'est plus simple smile.gif
Par contre, dans le cas présent (ajout de la mention "nouveau" en overlay) je déconseille d'utiliser $listing['products_last_modified'] car en cas de modification de la fiche, pour corriger une faute d'orthographe deux mois après par exemple, cela replacera la mention "nouveau" alors que ce n'est plus le cas.
Il vaut mieux, à mon avis, utiliser $bdd_date = $listing['products_date_added'].

Écrit par : aurelou 30 May 2016, 13:59

Bonjour Bonbec et Gnidhal,

Merci beaucoup pour vos réponses, comme d'habitude je suis un peu lente car je n'ai pas encore réessayé mais dès que je m'occupe de ça je vous donne des nouvelles.

Merci beaucoup beaucoup.

Écrit par : aurelou 2 Jun 2016, 14:54

Bonjour,

Merci encore Bonbec et Gnidhal, me revoilà avec des nouvelles.

J'ai ajouté p.products_date_added dans chaque $listing_sql = de l'index mais ça n'a pas changé, toujours rien ne s'affiche wacko.gif

J'ai également testé le codage de Gnidhal mais c'est pareil.

Il semblerait donc que le champs de date ne soit pas chargé par la requête de listing ? Comment y remédier ?

Je précise que c'est pour mon site MS2.2, et je ne sais pas si c'est important mais je précise aussi que j'ai la contribution pour classer la liste des produits en colonnes et que donc mon fichier product_listing.php est en fait un fichier modifié nommé product_listing_col.php.

Merci encore smile.gif



Écrit par : Bonbec 30 Jun 2016, 10:02

Re,

Je sais bien que tu es à fond dans la 2.3.4BS, mais tu as avancé avec ce soucis ?

Tu as regardé dans ta BDD si le champ products_date_added contenait bien quelque chose ?

Si il y a bien quelque chose, alors le problème est ailleurs.
Mon petit code de test, tu le places où ?

Sinon pour voir ce que contient $listing, tu peux mettre ceci provisoirement :

Code
echo '<pre>';
print_r($listing);
echo '</pre>';

après les lignes dans ton fichier product_listing_col.php (vers la ligne 77 chez moi) :
Code
    $listing_query = tep_db_query($listing_split->sql_query);
    while ($listing = tep_db_fetch_array($listing_query)) {

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)