Récupérer le nom des champs perso

  • Posts: 2677
  • Thank you received: 69
  • Hikashop Business
1 week 3 days ago #372211

-- HikaShop version -- : 6.5
-- Joomla version -- : 6.1
-- PHP version -- : 8.4

Bonjour
Dans product/listing_div.php

$fieldClass = hikashop_get("class.field");

$this->badgeField = $fieldClass->getField("product_badges");
$this->sizeField = $fieldClass->getField("product_size_values");

Il load listing_img_title.php
$badgesHtml = "";

if(!empty($this->badgeField) && !empty($this->row->product_badges)) {

	$this->badgeField->currentElement = $this->row;

	$badgesHtml = $this->fieldsClass->show(
		$this->badgeField,
		$this->row->product_badges
	);
}

Et je ne récupère rien
Je ne veux pas la valeur qui est stockée dans le champ perso de la db mais bien le libellé
badge_new = nouveauté

Comment puis-je récupérer le libellé ?

Merci

Last edit: 1 week 3 days ago by erickb.

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

  • Posts: 85733
  • Thank you received: 14061
  • MODERATOR
1 week 3 days ago #372212

Bonjour,

Le souci vient d'un seul point : l'appel à getField. Quand on lui passe une clé (un field_namekey, donc une chaîne et pas un id numérique), getField a besoin du nom de la table du champ en 2e argument. Sans ce 2e argument, il fait sa requête avec field_table = '' (vide), ne trouve aucun champ, et renvoie false.

Du coup $this->badgeField vaut false, votre test if(!empty($this->badgeField) && ...) n'est jamais vrai, le bloc n'est pas exécuté, et $badgesHtml reste vide. C'est pour ça que vous ne récupérez rien (ni le libellé, ni même la valeur).

La correction est d'indiquer la table du champ (pour un champ produit, c'est "product", la table affichée dans Affichage > Champs personnalisés) :

$fieldClass = hikashop_get('class.field');
$this->badgeField = $fieldClass->getField('product_badges', 'product');
$this->sizeField  = $fieldClass->getField('product_size_values', 'product');

Une fois le champ correctement chargé, votre show() renvoie directement le libellé, pas la valeur stockée. Pour un champ de type liste (dropdown, radio, case à cocher), show() convertit en interne la valeur stockée en libellé de l'option, et gère même le cas de plusieurs valeurs séparées par des virgules :
$badgesHtml = $this->fieldsClass->show($this->badgeField, $this->row->product_badges);
// renvoie "nouveauté"

The following user(s) said Thank You: erickb

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

  • Posts: 2677
  • Thank you received: 69
  • Hikashop Business
1 week 3 days ago #372214

Je vais tester ça mais je crois que je vais tout simplement donner valeur = libellé

Merci

Last edit: 1 week 3 days ago by erickb.

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

Time to create page: 0.057 seconds
Powered by Kunena Forum