[OK] Class spécifique sur le prix le plus élevé ?

  • Posts: 468
  • Thank you received: 30
  • Hikashop Business
12 years 2 months ago #41555

Bonjour,

J'aurais besoin d'ajouter une class css spécifique sur les prix d'un produit comportant deux ou trois variantes, afin d'en modifier l'aspect du plus élevé au plius faible.

La variante B est la "variante par défaut". Quand il n'y a pas de variante et un seul prix, le prix a la class "hikashop_product_price_0". Quand il y a deux variantes et deux prix, cette variante B a le prix le plus élevé, mais elle reçoit alors la class "hikashop_product_price_1".

Si je cible hikashop_product_price_1, lorsqu'il n'y a qu'un seul prix, ma mise en forme ne fonctionne pas. Elle ne fonctionne que si j'ai 2 prix.

Il faudrait pouvoir disposer d'une condition dans le genre : si un seul prix, ajoute class "prix_1" et si plusieurs prix, ajoute class "prix_1" à partir du second prix seulement

Comment faire ?

Merci de votre aide

Last edit: 11 years 5 months ago by lesyeux.

Please Log in or Create an account to join the conversation.

  • Posts: 81641
  • Thank you received: 13088
  • MODERATOR
12 years 2 months ago #41684

Au début du fichier "listing_price" de la vue product, vous pouvez remplacer la ligne:

<span class="hikashop_product_price_full">

par:
<?php
$class ='';
if(!empty($this->row->prices)&& count($this->row->prices)>1){
	$class = ' hikashop_product_several_prices';
} ?>
	<span class="hikashop_product_price_full<?php echo $class; ?>">

Comme ça, vous pourrez faire ainsi:


.hikashop_product_several_prices .hikashop_product_price_1, .hikashop_product_price_0{
//CSS pour prix le plus haut
}

.hikashop_product_several_prices .hikashop_product_price_0{
//CSS pour prix le plus bas
}

The following user(s) said Thank You: lesyeux

Please Log in or Create an account to join the conversation.

  • Posts: 468
  • Thank you received: 30
  • Hikashop Business
12 years 1 month ago #43323

Ça marche très bien, merci !

Last edit: 11 years 7 months ago by lesyeux.

Please Log in or Create an account to join the conversation.

  • Posts: 468
  • Thank you received: 30
  • Hikashop Business
11 years 7 months ago #65399

Je vois que cela est maintenant implémenté par défaut depuis Hikashop 1.6.0 (peut-être même avant ?). Super.

J'ai juste un souci :
Je dois mettre en forme de manière différenciée 1er et 2e prix. Jusque là tout va bien. Mais je dois aussi le faire de manière différenciée pour des caractéristiques différentes. J'ai en effet une caractéristique de type "qualité" (2 types de qualité, avec une différence de prix), et une autre de type "prix par lots" (à l'unité ou par lot de 3). Et là, c'est du tout ou rien et je ne vois pas comment"chopper" avec un sélecteur css mes 1er et 2e prix correspondant uniquement à la caractéristique "prix par lot" et qui ont malheureusement la mise en forme "qualité" (j'ai cependant réussi à afficher sur les images un badge spécifique grâce à une catégorie spéciale non publiée).

Mon rêve serait de pouvoir faire précéder chaque prix d'une mention spécifique à chaque variante, par exemple "Lot de 3" ou "x 3", ou encore "Échelle 1/87".

Peut-être que des champs perso pourrait être créés et affichés ensuite devant le prix ?

Ou alors il faudrait pouvoir disposer d'un "préfixe" ou d'un "suffixe" au niveau du prix de chaque produit et variante.

Please Log in or Create an account to join the conversation.

  • Posts: 81641
  • Thank you received: 13088
  • MODERATOR
11 years 7 months ago #65607

Un champs personnalisé de la table "product" est une bonne idée.
Il suffit ensuite d'éditer le fichier "listing_price" de la vue product et de rajouter au début:
<?php echo $this->row->CUSTOM_FIELD; ?>
en remplaçant CUSTOM_FIELD par le nom du champs personnalisé.

Please Log in or Create an account to join the conversation.

  • Posts: 468
  • Thank you received: 30
  • Hikashop Business
11 years 7 months ago #65636

OK, merci.

En modifiant mon override de listing_price.php (ligne 95), j'ai fini par réussir à afficher un champ personnalisé, différent pour chaque variante, devant le prix TTC… mais seulement sur la page produit (hikashop_product_right_part hikashop_product_price_main).

Sur les listings de produits (hikashop_products_listing), le champ perso est zappé et seul apparaît le texte " : " qui le sépare du prix qui suit.

En fiche produit j'ai donc : "L'unité : 4 €"
Et dans le listing produits : " : 4 €" avec mon champ perso qui a disparu. Apparaît aussi comme ça dans le module de panier.

Please Log in or Create an account to join the conversation.

  • Posts: 468
  • Thank you received: 30
  • Hikashop Business
11 years 7 months ago #65638

J'ai tenté une autre solution, qui fonctionne, mais je crains qu'elle ne pose des problèmes de performance, car elle utilise un plugin pour rechercher et remplacer dans les pages.

Avec l'option hikashop_product_several_prices, je peux ajouter un préfixe à mes prix quand j'ai des variantes, en utilisant les css (:before).

Avec l'extension ReReplacer , je peux trouver dans le code source les lignes qui contiennent un certain montant (prix à l'unité, prix par lot) et les remplacer en modifiant la class css, ce qui me permet de changer le prefixe, là encore avec les css.

C'est la solution actuellement utilisée sur le site.

Mais j'aimerai bien trouver quelque chose de plus direct, avec un champ perso dans la fiche produit et un override.

J'ai obtenu un résultat satisfaisant en fiche produit, mais pas sur les listings de produits.

Merci de votre aide.

Please Log in or Create an account to join the conversation.

  • Posts: 81641
  • Thank you received: 13088
  • MODERATOR
11 years 7 months ago #65642

La modification que j'ai proposé devrait fonctionner pour les listings également.

Please Log in or Create an account to join the conversation.

  • Posts: 468
  • Thank you received: 30
  • Hikashop Business
11 years 7 months ago #65666

Les champs perso n'apparaissent pas sur mes listings de produits et je ne sais pas pourquoi :-(

Je vais continuer à faire des essais, j'ai dû louper une marche…

Please Log in or Create an account to join the conversation.

  • Posts: 468
  • Thank you received: 30
  • Hikashop Business
11 years 7 months ago #65667

Comme je n'en ai pas besoin sur les fiches produits (qui contient déjà tous les détails utiles) et que je souhaite que cela n'apparaisse que lorsqu'il y a des variantes, donc plusieurs prix, j'ai ajouté ça en début de fichier en m'inspirant de l'existant :
<?php
$prefixprix='';
if(!empty($this->row->prices) && count($this->row->prices)>1){
$prefixprix=$this->row->prefixe_prix_lots_3.' : ';
} ?>

et ensuite j'affiche devant le prix TTC avec ça plus loin dans le code :
if($this->params->get('price_with_tax')){
echo $prefixprix;

Ça m'affiche " : " devant chaque ligne de prix de mes variantes dans les listings seulement. Le champs perso ne s'affiche pas. Quel réglage ou quel fichier pourrait contrarier cet affichage ?

Please Log in or Create an account to join the conversation.

  • Posts: 468
  • Thank you received: 30
  • Hikashop Business
11 years 7 months ago #65668

Bon, en fait, ça fonctionne très bien si je mets mon prefix sur la fiche du produit principal, mais ça ne fonctionne pas si le prefix est dans la fiche d'une variante. Et c'est justement ce que je veux : un préfix devant le prix de mes variantes.

Please Log in or Create an account to join the conversation.

  • Posts: 81641
  • Thank you received: 13088
  • MODERATOR
11 years 7 months ago #65680

Ah oui mais sur les listings de produits, seul l'information du produit principal et les prix des variantes sont chargés (pour éviter de charger trop de données qui ne servent à rien.
Donc dans le listing_price sur le listing des produits, on n'a pas connaissance des infos de la variantes.

Néanmoins, il est possible charger les informations des variantes assez facilement. Il faudra alors ajouter quelque chose comme cela:

$class = hikashop_get('class.product');
$variantData = $class->get($price->price_product_id);
echo $variantData->CUSTOM_FIELD;

avant le code affichant le prix.

The following user(s) said Thank You: lesyeux

Please Log in or Create an account to join the conversation.

  • Posts: 468
  • Thank you received: 30
  • Hikashop Business
11 years 7 months ago #65688

Merci beaucoup Nicolas, j'ai pu obtenir ce que je souhaitais :-)

Concernant les performances, voici les données :
- environ 300 produits
- 20 % des produits avec 2 à 3 variantes

J'ai lu quelque part sur le forum qu'il y avait une nouvelle option pour améliorer la performance quand on fait usage des variantes. Serait-il judicieux pour moi de l'utiliser ? Comment l'activer ?

Please Log in or Create an account to join the conversation.

  • Posts: 81641
  • Thank you received: 13088
  • MODERATOR
11 years 7 months ago #65689

Non c'est bon. Avec 2/3 variantes par produit ca ne change rien.
C'est surtout pour les personnes avec plusieurs centaines de variantes par produit mais c'est activé par défaut pour les nouvelles installations à partir de la 1.6.0

Please Log in or Create an account to join the conversation.

  • Posts: 468
  • Thank you received: 30
  • Hikashop Business
11 years 7 months ago #65694

Pour celles et ceux que ça intéresse, voici le type de code que j'ai utilisé :

[code type=php-brief]
// insertion du préfixe du prix
$class = hikashop_get('class.product');
$variantData = $class->get($price->price_product_id);
echo '<em class="prefix">';
echo $variantData->modele_echelle;
echo $variantData->prefixe_prix_lots_3;
echo ' : ';
echo '</em>';
// fin insertion du préfixe du prix
[/code]

inséré

entre la ligne 94

if($this->params->get('price_with_tax')){

et la ligne 95

echo $this->currencyHelper->format($price->price_value_with_tax,$price->price_currency_id);

dans un override du fichier listing_price.php /templates/mon_template/html/com_hikashop/product/listing_price.php

"modele_echelle" et "prefixe_prix_lots_3" sont des champs personnalisés de type texte que je renseigne dans mes produits et mes variantes en fonction des cas de figures.

em class="prefix" me permet de contrôler la mise en forme de mes préfixes via une feuille de style css personnalisée.

Ceci est probablement à adapter en fonction de la manière dont sont affichés les prix (config générales, options des menus et modules).

Merci encore à Nicolas pour son aide précieuse !

Last edit: 11 years 7 months ago by lesyeux.
The following user(s) said Thank You: nicolas

Please Log in or Create an account to join the conversation.

  • Posts: 468
  • Thank you received: 30
  • Hikashop Business
11 years 5 months ago #75703

Correction du code à cause d'une erreur php :

// insertion du préfixe du prix
if(isset($price->price_product_id)){
$class = hikashop_get('class.product');
$variantData = $class->get($price->price_product_id);
echo '<em class="prefix">';
echo $variantData->modele_echelle;
echo $variantData->prefixe_prix_lots_3;
echo ' ';
echo $variantData->prefixe_pays;
echo ' : ';
echo '</em>';
}
// fin insertion du préfixe du prix

Last edit: 11 years 5 months ago by lesyeux.

Please Log in or Create an account to join the conversation.

Time to create page: 0.088 seconds
Powered by Kunena Forum