Texte avec variable selon produit

  • Posts: 50
  • Thank you received: 2
  • Hikamarket Multivendor Hikashop Multisite
1 year 10 months ago #342694

-- HikaShop version -- : 4.6.0
-- Joomla version -- : 3.10.10

Bonjour,

J'aimerais savoir s'il est possible d'afficher un textes sur chaque fiche produit avec une variable.

Je m'explique :
Une caution est demandé de 70€ par guirlande de 10 mètres mais certains produits sont des packs donc incluent plus de 10 mètres.

Par exemple je prend 10 mètres, j'aimerais que sur la fiche produit, un message s'affiche en disant "Votre caution sera de 70€" et que le montant varie en fonction de la quantité. Et si possible que le montant global de la aution avec tous les articles s'affichent sur le passage en caisse et sur l'e-mail de confirmation de commande.
J'ai déjà en champ personnalisé caution en product sur la partie publique mais je ne vois pas comment l'utiliser puisque cela est du texte.
A savoir que le montant de caution n'est pas à ajouter au prix final à régler mais est envoyé ultérieurement par chèque.

Cela est-il possible ?

Merci par avance.

Last edit: 1 year 10 months ago by STEVENDU17. Reason: Résolu

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

  • Posts: 81597
  • Thank you received: 13081
  • MODERATOR
1 year 10 months ago #342697

Bonjour,

Créer un champ personnalisé de la table "product" pour renseigner le montant de caution est en effet une bonne idée.
Dans votre champ, dans la section "field data", vous avez une colonne "value" et une colonne "title".
"value" est ce qui est enregistré dans la base de données et qui est manipulable, donc dans value vous pouvez mettre juste les montants: 70, 140, 210, etc. Et dans "title", c'est ce qui est affiché sur la partie publique, donc vous pouvez mettre le texte complet: "Votre caution sera de 70€", "Votre caution sera de 140€", "Votre caution sera de 210€", etc.

Ainsi, vous aurez l'affichage sur la page du produit de fait juste avec le champ.

Pour ce qui est du passage en caisse, ce que vous pouvez faire, c'est un override de show_block_cart via le menu Affichage>Vues.
Là, à la fin, vous pouvez rajouter ce genre de code:

$total = 0;
foreach($cart->products as $i => $product) {
  if(!empty($product->xxx)) $total += $product->cart_product_quantity * $product->xxx;
}
if($total) {
 echo "Votre caution sera de ".$total."€";
}
où il faudra remplacer xxx par le nom de colonne de votre champ.

Pour l'email, il faut faire un rajout du genre:
<?php
$total = 0;
foreach($data->cart->products as $i => $product) {
  if(!empty($product->xxx)) $total += $product->cart_product_quantity * $product->xxx;
}
if($total) {
 echo "Votre caution sera de ".$total."€";
}
?>
où il faudra remplacer xxx par le nom de colonne de votre champ, dans la section HTML de l'email, que vous pouvez éditer via Système>Emails.

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

  • Posts: 50
  • Thank you received: 2
  • Hikamarket Multivendor Hikashop Multisite
1 year 10 months ago #342728

Merci pour votre réponse.

La formule fonctionne bien sur le passage en caisse, par contre quand on change la quantité, le montant de la caution n'est pas réajusté automatiquement comme le prix. Il faut rafraîchir la page mais c'est déjà top.

1/ J'en tenté le code sur la vu show product mais il ne s'affiche pas. J'ai donc mis cela :

[quote]<?php
$total = 0;
  if(!empty($product->caution)) $total += $product->product_quantity * $product->caution;

 echo "Votre caution sera de ".$total."€";

?>[/quote]

Le montant de la caution reste à 0, j'ai tenté plein de chose et cela ne fonctionne pas.

2/ Sur la vue cart -> show pour le panier, rien ne s'affiche non plus. J'ai essayé sur d'autres, non plus.

3/ Pour l'e-mail, j'avais déjà personnalisé un en htlm uniquement sans toucher au reste. Le code a été ajouté dans le préchargement mais ce n'est pas non plus visible.
Pour plus de simplicité, j'ai regardé les tags disponibles afin d'ajouter juste cela dans mon html et j'ai tenté {VAR:product.caution} * {LINEVAR:product.product_quantity} ou {VAR:product.caution} tout seul, sans succès.

Merci

Last edit: 1 year 10 months ago by STEVENDU17.

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

  • Posts: 81597
  • Thank you received: 13081
  • MODERATOR
1 year 10 months ago #342752

Bonjour,

0. C'est surement car le code est en dehors du div de la zone qui est rafraîchit lorsque la quantité du produit dans le panier change. Il faudrait déplacer le code dans la vue à une autre position. Par exemple, juste après le tag </table>

1. Dans product / show les données du produit sont dans $this->element pas dans $product.
De plus, $this->element->product_quantity contient le stock du produit, donc rien à voir avec ce que vous voulez faire.
Vous pouvez juste faire:

<?php
 echo "Votre caution sera de ".$product->caution."€";
?>
Et cela affichera la caution sur la page produit pour une quantité de 1 achetée.
Pour faire un affichage dynamique de la caution lorsque le champ quantité change sur la page produit, cela demanderait de rajouter du code javascript, avec un addEventListener sur le champ quantité pour rafraichir le texte en javascript, et non du PHP.

2. Cela devrait fonctionner en changeant juste $cart par $this->cart

3. Ajouter le code dans le préchargement ne fonctionnera pas. Et vous ne pouvez pas non plus utiliser les tags pour faire des opérations. C'est pour cela que je vous ai dit de mettre mon code PHP dans la section HTML de l'email. Faites cela et cela devrait fonctionner.

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

  • Posts: 50
  • Thank you received: 2
  • Hikamarket Multivendor Hikashop Multisite
1 year 10 months ago #342765

0. Top ça fonctionne

1. Ok, ça marche

2. Super, ça s'affiche aussi.

3. J'ai ajouté le code dans le HTML du mail mais rien n'apparait, voir en PJ. L'aperçu est bien sur un produit comportant le champ caution.

4. Dernière question, sur le parcours du passage en caisse, j'aimerais afficher la même chose sur l'étape caution en PJ.
J'ai tenté le code sur un champ texte dans la configuration générale au passage en caisse mais cela ne fonctionne pas non plus.

Il y aurait-il une documentation sur à quoi correspondent toutes les vues par rapport au Front, je n'ai pas trouvé ?

Merci beaucoup

Attachments:
Last edit: 1 year 10 months ago by STEVENDU17.

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

  • Posts: 81597
  • Thank you received: 13081
  • MODERATOR
1 year 10 months ago #342768

Rebonjour,

3. Ah, j'avais zappé mais c'est order_product_quantity qu'il faut utiliser et pas cart_product_quantity vu que c'est un email de notification de commande, et pas de panier :)

4. Normal. $cart est chargé par le code :

$cart = $this->checkoutHelper->getCart();
donc il faut aussi cette ligne au début pour remplir $cart.
Aussi, je ne sais pas ce que vous voulez dire par "le code sur un champ texte" ?
Vous voulez dire que vous avez mis du code PHP dans le textarea d'une vue de type "texte" ? Cela ne fonctionnera pas car cette vue n'accepte que le texte et l'HTML, pas du PHP. Mais après, vous pouvez ajouter le code dans checkout / show_block_text ou dans une autre que vous n'utilisez pas genre show_block_status.

5. Pour savoir quelle vue est utilisée où, pas besoin de documentation. Vous pouvez juste activer l'option "Display view files" de l'onglet "Advanced" de la configuration HikaShop. Cela va afficher un border rouge autour de chaque vue utilisée avec le nom de la vue en haut à gauche de la zone. Comme ça, vous pouvez facilement savoir quelle vue est utilisée où en affichant simplement la page que vous voulez modifier avec cette option activée.

The following user(s) said Thank You: STEVENDU17

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

  • Posts: 50
  • Thank you received: 2
  • Hikamarket Multivendor Hikashop Multisite
1 year 10 months ago #342782

Super pour l'affichage des vues, ça va faire gagner du temps.

Tout fonctionne pour l'affichage de la caution sur le panier, passage en caisse et le block text, merci beaucoup.

En revanche, pour l'e-mail impossible de la faire apparaître.

Je fais mes modifications sur "Notification de statut de commande" et sur le statut "en attente de caution". J'ai testé également sur "Notification de création de commande" et "Notification de commande", sans succès.

J'ai bien remplacé cart_product_quantity par order_product_quantity et essayé également de modifié le début "$data->cart->products" en "$order->products" ou en "$data->order->products" mais non.

Merci

Last edit: 1 year 10 months ago by STEVENDU17.

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

  • Posts: 81597
  • Thank you received: 13081
  • MODERATOR
1 year 10 months ago #342791

Bonjour,

Essayez de faire un var_dump($data->cart->products); dans l'HTML pour confirmer qu'il y a bien les informations des produits de la commande dans la variable.

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

  • Posts: 50
  • Thank you received: 2
  • Hikamarket Multivendor Hikashop Multisite
1 year 10 months ago #342810

Bonjour,

J'ai bien les variables qui s'affichent comme ceci :

array(1) { [0]=> object(stdClass)#1208 (45) { ["order_product_id"]=> string(2) "82" ["order_id"]=> string(2) "53" ["product_id"]=> string(4) "2411" ["order_product_quantity"]=> string(2) "10" ["order_product_name"]=> string(20) "Guirlande bleu test " ["order_product_code"]=> string(20) "Guirlande_bleu_test_" ["order_product_price"]=> string(8) "11.00000" ["order_product_tax"]=> string(7) "0.00000" ["order_product_tax_info"]=> array(1) { ["0000_00000001"]=> object(stdClass)#1205 (20) { ["taxation_id"]=> string(1) "1" ["zone_namekey"]=> array(1) { [0]=> string(17) "country_France_73" } ["category_namekey"]=> string(11) "default_tax" ["tax_namekey"]=> string(0) "" ["taxation_published"]=> string(1) "1" ["taxation_type"]=> string(0) "" ["taxation_access"]=> string(3) "all" ["taxation_cumulative"]=> string(1) "0" ["taxation_post_code"]=> string(0) "" ["taxation_date_start"]=> string(1) "0" ["taxation_date_end"]=> string(1) "0" ["taxation_internal_code"]=> string(1) "0" ["taxation_note"]=> string(0) "" ["taxation_site_id"]=> string(0) "" ["taxation_ordering"]=> string(1) "0" ["tax_rate"]=> string(7) "0.00000" ["zone_type"]=> string(7) "country" ["tax_ratio"]=> int(1) ["tax_amount"]=> float(0) ["amount"]=> float(11) } } ["order_product_options"]=> string(0) "" ["order_product_option_parent_id"]=> string(1) "0" ["order_product_status"]=> string(0) "" ["order_product_wishlist_id"]=> string(1) "0" ["order_product_wishlist_product_id"]=> string(1) "0" ["order_product_shipping_id"]=> string(3) "2@2" ["order_product_shipping_method"]=> string(12) "mondialrelay" ["order_product_shipping_price"]=> string(7) "0.00000" ["order_product_shipping_tax"]=> string(7) "0.00000" ["order_product_shipping_params"]=> string(0) "" ["order_product_params"]=> NULL ["order_product_weight"]=> string(5) "0.500" ["order_product_weight_unit"]=> string(2) "kg" ["order_product_width"]=> string(5) "0.000" ["order_product_length"]=> string(5) "0.000" ["order_product_height"]=> string(5) "0.000" ["order_product_dimension_unit"]=> string(1) "m" ["test2"]=> NULL ["logo1"]=> NULL ["test3"]=> NULL ["recherchephotos"]=> NULL ["policedulogo"]=> NULL ["couleurdusite"]=> NULL ["couleurpolicedusite"]=> NULL ["hebergementbis"]=> NULL ["test4"]=> NULL ["order_product_price_before_discount"]=> string(8) "11.00000" ["order_product_tax_before_discount"]=> string(7) "0.00000" ["order_product_discount_code"]=> string(1) "0" ["order_product_discount_info"]=> string(0) "" ["date"]=> NULL ["order_product_total_price_no_vat"]=> float(110) ["order_product_total_price"]=> float(110) ["images"]=> array(1) { [0]=> object(stdClass)#1210 (11) { ["file_id"]=> string(3) "116" ["file_name"]=> string(15) "guirlande_bleue" ["file_description"]=> string(0) "" ["file_path"]=> string(19) "guirlande_bleue.jpg" ["file_type"]=> string(7) "product" ["file_ref_id"]=> string(4) "2411" ["file_free_download"]=> string(1) "0" ["file_ordering"]=> string(1) "0" ["file_limit"]=> string(1) "0" ["file_access"]=> string(3) "all" ["file_time_limit"]=> string(1) "0" } } ["product_type"]=> string(4) "main" ["product_parent_id"]=> string(1) "0" } }


Il ne figure pas le champ products caution, je ne sais pas si c'est normal de ne pas l'avoir dans cette affichage.

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

  • Posts: 81597
  • Thank you received: 13081
  • MODERATOR
1 year 10 months ago #342820

Ahh, oui, j'avais oublié ce détails.

Au début du foreach il faut rajouter le chargement des données du produit:
$productClass = hikashop_get('class.product');
$productData = $productClass->get($product->product_id);

Comme cela, vous aurez caution dans $productData->caution au lieu de $product->caution car ce n'est pas chargé automatiquement lors du chargement des informations de la commande.

The following user(s) said Thank You: STEVENDU17

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

  • Posts: 50
  • Thank you received: 2
  • Hikamarket Multivendor Hikashop Multisite
1 year 10 months ago #342837

Super, ça fonctionne.

Merci beaucoup pour votre aide :)

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

Time to create page: 0.080 seconds
Powered by Kunena Forum