osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> [resolu] Image produit aléatoire dans la liste produit
Rusti
posté 30 Apr 2014, 01:00
Message #1


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 83
Inscrit : 11-October 10
Lieu : Villemomble
Membre no 28103



Alors je m'explique, lorsque l'on arrive dans une catégorie, les produits sont affichés avec l'image qui leur à été attribuée et l'image est appelée via ce code :

Code
tep_image(DIR_WS_IMAGES . $listing['products_image'], $listing['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT)

Ce que je voudrais c'est pouvoir mettre 2 images par produit et qu'elles s'affichent aléatoirement à chaque reload de la page.

Petit exemple :
Produit 1 -> image 2
Produit 2 -> image 1
Produit 3 -> image 1
Produit 4 -> image 2
........
Et si le client recharge la page ou sort puis revient sur la catégorie l'image des produits se modifie :

Produit 1 -> image 1
Produit 2 -> image 2
Produit 3 -> image 2
Produit 4 -> image 1

Et même si un produit de temps en temps ne change pas d'image ce n'est pas un problème.

Toute la partie administration qui consiste à attribuer et envoyer une 2ème image sur le serveur et à la BDD a été créée.
Dans la BDD j'ai ajouté une colonne appelée tout simplement products_image_2 que j'ai intégrée à product_listing.php et index.php

Ce que je n'arrive pas à trouvé c'est le code PHP ou la syntaxe MySQL qui va me permettre d'affiché l'image 1 ou l'image 2 du produit aléatoirement un peu voir totalement comme ORDER BY RAND() pour la boxe What's New mais pour l'image produit.

Voilà, j'espère, être assez clair et si quelqu'un à une petite idée elle est la bienvenue.
Merci.

Ce message a été modifié par Rusti - 2 May 2014, 06:33.


--------------------
osCommerce v2.3
Go to the top of the page
 
chti_poupon
posté 30 Apr 2014, 11:29
Message #2


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2744
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Bonjour
Pourquoi ne pas remplacer:
Code
        case 'PRODUCT_LIST_IMAGE':
          $select_column_list .= 'p.products_image, ';
          break;

par
Code
        case 'PRODUCT_LIST_IMAGE':
          $select_column_list .= 'p.products_image_' . rand(1,2) . ', ';
          break;

sachant que la première colonne a été renommée products_image_1, ce qui oblige à la renommer partout où elle est appelée (review, products...) ou à doublonner la colonne products_image (nul, mais rapide).

ou au choix
Code
        case 'PRODUCT_LIST_IMAGE':
          $select_column_list .= 'p.products_image' . (rand(1,2)==1?'':'_2') . ', ';
          break;

sachant qu'ici, la première colonne s'appelle toujours products_image
Ce qui à chaque affichage extrait (l'adresse d')une image ou (de )l'autre
Bons essais !
Chti poupon

P.S.: La première méthode s'étend aisément à 3 images ou plus
Go to the top of the page
 
Rusti
posté 30 Apr 2014, 11:46
Message #3


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 83
Inscrit : 11-October 10
Lieu : Villemomble
Membre no 28103



Super, par contre je vais évité la manière rapide quitte à faire autant bien le faire.
Je teste et tient au courant.

Grand merci à toi chti_poupon


--------------------
osCommerce v2.3
Go to the top of the page
 
Rusti
posté 2 May 2014, 06:32
Message #4


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 83
Inscrit : 11-October 10
Lieu : Villemomble
Membre no 28103



Alors je reviens pour expliquer comment ça se passe.
J'ai utilisé la première technique qui consiste à renommer le products_image en products_image_1 car je voulais que mes produits aient un affichage aléatoire et complètement indépendant les uns des autres.

Par contre l'ajout rand(1,2) dans le fichier index.php ne fonctionnait pas, car l'appel de l'image dans le product_listing.php affichait la première, mais pas la deuxième :
tep_image(DIR_WS_IMAGES . $listing['products_image_1'], $listing['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT);

Je préviens ma version oscommerce étant très modifié c’est peut être pour cela, je n’ai pas testé sur une version de base, mais je pense quand même que le problème aurait été identique.

Donc pour que ça fonctionne et pour ce que ça intéresse. Dans le fichier index.php j'ai modifié comme ceci :
Code
case 'PRODUCT_LIST_IMAGE':
  //$select_column_list .= 'p.products_image, ';
  $select_column_list .= 'p.products_image_1, p.products_image_2, ';
  break;

et dans le product_listing.php juste, après le :
Code
while ($listing = tep_db_fetch_array($listing_query)) {
  $rows++;

il faut ajouter :
Code
$image_listing = 'products_image_' . rand(1,2);

dernier point à modifier l'appel de l'image comme ceci :
tep_image(DIR_WS_IMAGES . $listing[$image_listing], $listing['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT);

Maintenant dans mon cas certains produits sont disponibles seulement en 1 couleur et donc pas de 2ème image. Pour éviter d'avoir un cadre vide au cas où le code choisit la deuxième image, modifiez comme ceci dans le product_listing.php :
Code
if (tep_not_null($listing['products_image_2'])) {
    $image_listing = 'products_image_' . rand(1,2);
} else {
    $image_listing = 'products_image_1';
}


Voilà je clos le sujet par un beau Résolu smile.gif
Encore un merci à toi Chti poupon pour le coup de main et l'explication des méthodes.

Ce message a été modifié par Rusti - 2 May 2014, 06:37.


--------------------
osCommerce v2.3
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 21st November 2017 - 16:31
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)