Ajouter le nom du produit avant celui de l'option dans le panier et le checkout

  • Posts: 36
  • Thank you received: 4
  • Hikashop Business
10 months 2 weeks ago #356333

-- url of the page with the problem -- : https//lise-whales/boutique
-- HikaShop version -- : 5.0.0
-- Joomla version -- : 4.4.0
-- PHP version -- : 8.1
-- Browser(s) name and version -- : firefox

Bonjour,

j'ai plusieurs produits avec les mêmes options et les mêmes variantes.

Produit 1 : Pack 2 marque-pages, avec 2 options : 1er marque-page et 2ème marque-page
Produit 2: Pack 3 marque-pages, avec 3 options : 1er marque-page, 2ème marque-page et 3ème marque-pages
etc.

Lors du passage en caisse, le produit1 et ses options sont listés ainsi :

Pack 2 marque-pages (nom du produit) : 1er marque-page (nom de l'option) : nom de la variante choisie
2ème marque-page (nom de l'option) : nom de la variante choisie

Le produit2 et ses options sont listés ainsi :

Pack 3 marque-pages (nom du produit) : 1er marque-page (nom de l'option) : nom de la variante choisie
2ème marque-page (nom de l'option) : nom de la variante choisie
3ème marque-page (nom de l'option) : nom de la variante choisie

A chaque fois, les 2ème et 3ème options, sont listées sans le nom du produit avant. Or je souhaiterais que le nom du produit apparaisse dans le panier et le checkout avant comme ceci pour le produit2 :

Pack 3 marque-pages (nom du produit) : 1er marque-page (nom de l'option) : nom de la variante choisie
Pack 3 marque-pages (nom du produit) : 2ème marque-page (nom de l'option) : nom de la variante choisie
Pack 3 marque-pages (nom du produit) : 3ème marque-page (nom de l'option) : nom de la variante choisie

Existe-t-il une option à sélectionner pour obtenir ce résultat ?
Ou bien faudrait-il rajout une ligne de code dans vues > product-option, au dessus du nom de l'option, du style

echo $product->product_name;

?

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

  • Posts: 82434
  • Thank you received: 13275
  • MODERATOR
10 months 2 weeks ago #356345

Bonjour,

Il est normal que le nom du produit ne soit affiché qu'une seule fois.
Par exemple, sur notre site de démo, lorsque vous ajoutez le produit demo.hikashop.com/index.php/en/hikashop/...ct-page/with-options , et que vous allez ensuite sur le passage en caisse, vous avez le nom du produit avec son prix sur la première ligne, et ensuit une ligne par option:
i.imgur.com/R7KFgQ8.png

Si vous voulez changer cela pour avoir le nom du produit avant chaque option, cela va en effet demander de modifier les différentes vues affichant le contenu du panier / de la commande pour rajouter cela. Après, le code exact variera en fonction de la vue en question. Ce ne sera pas echo $product->product_name;
En plus cela sera plus compliqué car vous ne voudrez pas afficher le nom du produit pour la première option, vu qu'il est déjà affiché avant.

J'ai l'impression que votre souci est plutôt que la première option est sur la même ligne de le nom du produit à cause de CSS, au lieu d'être sur une ligne différente, ce qui rend le résultat bizarre pour l'utilisateur.

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

  • Posts: 36
  • Thank you received: 4
  • Hikashop Business
10 months 2 weeks ago #356383

Bonjour,

Je commence à résoudre mon problème mais je butte au niveau du Checkout.

J'ai créé un champ personnalisé rappel_product_name dans la table produit et de type texte (ci_joint ses options d'affichage). Je l'ai restreint à un produit pour l'instant. Ainsi, je peux rajouter le nom principal du produit dans l'option.

J'ai rajouté le code

<span><?php echo $this->element->rappel_product_name; ?></span>
dans la vue product > option, à la ligne 193, comme suit :
<td>
          	<span><?php echo $this->element->rappel_product_name; ?></span>
			<span class="hikashop_option_name">
              <?php echo $optionInfo->product_name . $options; ?>
          	</span>
		</td>

Et le texte apparaît avant le nom de l'option sur la page du produit, comme je le souhaite.

J'ai fait la même chose avec la vue checkout > show_block_cart, à la ligne 229 comme suit :
<p class="hikashop_cart_product_name">
                  <span><?php echo $this->element->rappel_product_name; ?></span>
                  <?php

		if(!empty($this->options['link_to_product_page'])) {
			?><a class="hikashop_no_print" href="<?php echo hikashop_contentLink('product&task=show&cid=' . $product->product_id . '&name=' . $product->alias . $url_itemid, $product);?>" ><?php
		}

		echo $product->product_name; 

Le span apparaît mais pas le texte.

Dans quelle vue dois-je insérer ce code pour qu'il apparaisse dans le Checkout ?
Dois-je changer sa formulation ?

Attachments:

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

  • Posts: 4673
  • Thank you received: 631
  • MODERATOR
10 months 2 weeks ago #356399

Bonjour,

Pouvez vous nous fournir les éléments suivant pour que nous puissions voir directement le contexte et reproduire votre problème actuels :
- Un lien Url vers votre produit de test (avec son custom field)
- Et un processus étape par étape pour reproduire exactement votre erreur
- l'ensemble des paramètres de votre custom field via un screenshot complet

Cordialement

Last edit: 10 months 2 weeks ago by Philip.

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

  • Posts: 36
  • Thank you received: 4
  • Hikashop Business
10 months 2 weeks ago #356406

Bonsoir,

le lien vers la page test est : https://lise-whales.com/boutique/product/deux-marque-pages-au-choix

Processus :

  • création du custom field avec un titre Rappel Nom du Produit, une table product, un champ rappel_product_name et un type text (voir les images pour sa customisation)
  • création du produit Pack de 2 marque-pages avec une caractéristique (un marque-page) avec 6 variantes et une option (2ème marque-page) avec 6 variantes
  • Pour le produit Pack de 2 marque-pages et les variantes de sa caractéristique, j'ai rentré pour le custom filed : Pack deux marque-pages au choix
  • Pour l'option 2ème marque-page et ses variantes , j'ai rentré pour le custom filed : Pack 2 MP afin de le différencier du produit parent et de voir comment le custom field se comporte.

Pour la customisation de la page produit :
insertion du code
<?php echo $this->element->rappel_product_name; ?>
à la ligne 192 (voir l'image) de la vue product > options, comme suit :
<tr>
		<td>	
          <span><?php echo $this->element->rappel_product_name; ?></span>
			<br />
			<span class="hikashop_option_name">
              <?php echo $optionInfo->product_name . $options; ?>
          	</span>
		</td>
		<td><?php
			echo $html;
		?></td>

J'avais d'abord inséré ce code
<?php echo $this->products[$product->product_id]->rappel_product_name; ?>
Mais il ne fonctionne pas sur cette page

Pour la caractéristique, j'ai modifié la vue Product > show_block_characteristic comme suit à la ligne 16 :
<div id="hikashop_product_characteristics" class="hikashop_product_characteristics">
<span><?php echo $this->element->rappel_product_name; ?></span>
<br />
<?php
if($this->params->get('characteristic_display') != 'list') {


Pour la customisation du checkout
j'ai modifié la vue Checkout > show_block_cart à la ligne 229 comme suit :
<!-- NAME -->
			<td data-title="<?php echo JText::_('CART_PRODUCT_NAME'); ?>" class="hikashop_cart_product_name_value">
				<p class="hikashop_cart_product_name">
                  <span><?php echo $this->products[$product->product_id]->rappel_product_name; ?></span>
                  <br /><span><?php $element->rappel_product_name; ?></span>
                  <br /><?php

		if(!empty($this->options['link_to_product_page'])) {
			?><a class="hikashop_no_print" href="<?php echo hikashop_contentLink('product&task=show&cid=' . $product->product_id . '&name=' . $product->alias . $url_itemid, $product);?>" ><?php

J'ai mis des <br /> pour voir si ça rendait en visuel, ce qui est le cas (voir image), mais aucun des deux codes
<?php echo $this->products[$product->product_id]->rappel_product_name; ?>
et
<?php $element->rappel_product_name; ?>
ne fonctionne. Les balises span sont vides.

En lisant d'autres posts, j'ai cru comprendre que le checkout ne peut pas reprendre des champs personnalisés d'une table produit. Il faut que ce soit une table commande. Ce qui est bien dommage car j'ai pu utiliser ce champ pour aussi customiser ma facture et mes mails de notification.

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

  • Posts: 36
  • Thank you received: 4
  • Hikashop Business
10 months 2 weeks ago #356407

suite des images

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

  • Posts: 82434
  • Thank you received: 13275
  • MODERATOR
10 months 2 weeks ago #356410

Bonjour,

En lisant d'autres posts, j'ai cru comprendre que le checkout ne peut pas reprendre des champs personnalisés d'une table produit. Il faut que ce soit une table commande. Ce qui est bien dommage car j'ai pu utiliser ce champ pour aussi customiser ma facture et mes mails de notification.

Non, ce n'est pas ça. Vous pouvez utiliser les champs produits n'importe où.
Cependant, dans certaines vues, ils sont préchargés car soit ils sont affichables avec les options dans HikaShop de base, soit nous supposons qu'ils ont de grandes chances d'être utiles, sans grever inutilement la vitesse de chargement de la page.
De plus, le code permettant l'affichage d'un champ personnalisé n'est pas nécessairement le même d'une vue à l'autre car différents nom de variables sont utilisées dans différents contextes pour les mêmes données (par exemple, sur la page de détail d'un produit, $this->element contient les données du produit en question, alors que sur un listing de produit, $this->element contient les données de la catégorie principale du listing, et les données des produits du listing sont dans $this->rows, avec $this->row contenant les données du produit en cours d'affichage).
Dans les autres vues où ils ne sont pas préchargés, c'est à vous de les charger avant de réaliser leur affichage.
Prenons l'exemple de checkout / show_block_cart que vous mentionnez dans votre message:
- dans cette vue, la variable $this->products n'existe pas donc la ligne de code
<?php echo $this->products[$product->product_id]->rappel_product_name; ?>
ne peut pas fonctionner
- pareil pour la variable $element
- D'après www.hikashop.com/media/kunena/attachments/68650/checkout.png votre option n'est pas lié au produit principal.
Je pense qu'il serait plus cohérent d'activer l'option "group options with product" dans la configuration HikaShop. Cela ferait que les deux choix de marque page serait pour un seul produit dans le panier et la commande, rendant les modifications que vous voulez faire inutile à la compréhension de la situation pour le client.
- Mais supposant que vous voulez garder cette option désactivée et aller avec la personnalisation des vues, vous pouvez voir que le code qui affiche le nom du produit dans show_block_cart est $product->product_name le champ personnalisé est donc dans $product, et le code
echo $product->rappel_product_name;
devrait faire l'affaire.

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

  • Posts: 36
  • Thank you received: 4
  • Hikashop Business
10 months 2 weeks ago #356416

Merci Nicolas,

avec ce code

echo $product->rappel_product_name;
le champ personnalisé apparaît enfin dans le checkout :)

J'ai besoin de ces différenciations parce que, pour que ma facturation soit conforme en France, il faut une ligne par article. De plus, les composants de chaque pack ou box n'ont pas forcément la même désignation (Prestation de service ou Vente de marchandise). Donc, oui, je cherche la petite bête, mais j'aime que les choses soient carrées.

D'ailleurs, si je peux encore vous embêter... Ce code produit le champ personnalisé direct du produit. Or, dans le cas de l'option, je ne voudrais que le champ personnalisé du produit parent au-dessus de l'option. Est-ce possible ?

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

  • Posts: 82434
  • Thank you received: 13275
  • MODERATOR
10 months 2 weeks ago #356419

Bonjour,

C'est possible mais c'est plus compliqué:

// il faut parcourir la liste des produits du panier
foreach($cart->products as $cart_product) {
// il faut comparé le cart_product_option_parent_id du produit courant avec le cart_product_id des produits du panier et s'il y a un match alors on peut utiliser le rappel_product_name
 if($product->cart_product_option_parent_id == $cart_product->cart_product_id)
   echo $cart_product->rappel_product_name;
}

Bref, cela demande de l'expertise en programmation pour faire ces rajouts dans toutes les vues nécessaires. C'est définitivement possible, mais pas simple.

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

  • Posts: 36
  • Thank you received: 4
  • Hikashop Business
10 months 2 weeks ago #356420

Bonjour,

merci pour toutes ces explications.

Malheureusement, le code ne fonctionne pas dans le checkout.

J'ai bien tenté de changer $cart_product (avec $product, $this, et d'autres) mais je suis trop novice en codage pour comprendre la complexité de ce code.

Dommage.

Puisque

echo $product->rappel_product_name;
fonctionne, je vais dupliquer mes options et changer le nom du champ pour qu'il corresponde au produit parent. ça va être plus fastidieux, mais heureusement, je n'ai pas beaucoup de produit. ;)

Belle journée à vous

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

Time to create page: 0.085 seconds
Powered by Kunena Forum