Champ personnalisé affiché "undefined" en front-office

  • Posts: 140
  • Thank you received: 21
  • Hikashop Business
3 days 2 hours ago #372985

-- HikaShop version -- : 6.5.2
-- Joomla version -- : 5.4.7
-- PHP version -- : 8.5.6

Bonjour,

j'utilise un champ personnalisé de type product nommé description courte qui s'affiche sous le bouton "Contactez-nous ...".
Sur une fiche produit au lieu d'avoir le texte du champ description courte j'ai le terme undefined.

Sur les autres fiches produits je n'ai pas observé ce problème alors que ce même champ est appelé par le même code sur la vue personnalisée "product / show_tabular.php".

Voici le code de la vue personnalisée :
Code peut-être un peu ancien car il date de la version 4.4.4 d'HikaShop.

<!-- RIGHT END EXTRA DATA -->
<?php
	echo '<span class="des-c">';
	if(!empty($this->element->extraData->rightEnd))
		echo implode("\r\n",$this->element->extraData->rightEnd);
		//echo $this->element->description_courte;
       echo ''.hikashop_translate($this->element->description_courte).'';
	echo '</span>';
?>
<!-- EO RIGHT END EXTRA DATA -->

Je précise que c'est un site qui gère 2 langues.
Vous trouverez les captures d'écran de la configuration du champ, des langues et ce qu'il y a en base de données.

En bas de données il y a bien le contenu du champ description_courte au format HTML.

Qu'en pensez-vous ?
Merci

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

  • Posts: 86027
  • Thank you received: 14171
  • MODERATOR
2 days 11 hours ago #373001

Bonjour,

Le point commun des fiches concernées est que le produit affichant "undefined" est un produit avec des variantes (celui de votre capture propose une "Taille produit"), alors que les fiches qui fonctionnent sont des produits simples.

C'est ce qui explique la différence. Sur un produit à variantes, la valeur d'un champ personnalisé de type produit, comme votre "description_courte", est portée par le produit principal, et non par la variante affichée. Dans le code elle se trouve donc sous l'objet "main" (par exemple $this->element->main->description_courte) et non directement sous $this->element. Votre vue personnalisée date de la 4.4.4 et lit le champ de la manière simple, qui renvoie une valeur vide sur les produits à variantes ; comme l'affichage passe par un peu de JavaScript, une valeur absente s'affiche littéralement "undefined".

La piste est de lire la valeur du produit principal quand celle de la variante est vide, dans l'esprit de :

$valeur = !empty($this->element->description_courte) ? $this->element->description_courte : @$this->element->main->description_courte;

The following user(s) said Thank You: easyconnect83

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

  • Posts: 140
  • Thank you received: 21
  • Hikashop Business
2 days 10 hours ago #373005

Bonjour,

je comprends bien la logique et effectivement je n'avais pas regardé les variantes d'autant plus qu'il y a une variante par défaut qui se charge sur la fiche produit ...

J'ai enlevé la mention undefined stocké dans le champ du variant et j'ai modifié le code de la vue en conséquence sur vos conseils :

<!-- RIGHT END EXTRA DATA -->
<?php
	if(!empty($this->element->extraData->rightEnd))
		echo implode("\r\n",$this->element->extraData->rightEnd);

	$description_courte = !empty($this->element->description_courte)
		? $this->element->description_courte
		: @$this->element->main->description_courte;

	if(!empty($description_courte)) {
		echo '<span class="des-c">'.hikashop_translate($description_courte).'</span>';
	}
?>
<!-- EO RIGHT END EXTRA DATA -->

Cela peut servir à quelqu'un d'autre.

Merci

The following user(s) said Thank You: nicolas

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

Time to create page: 0.057 seconds
Powered by Kunena Forum