Afficher un champ spécifique

  • Posts: 196
  • Thank you received: 11
  • Hikashop Business
4 years 9 months ago #307911

-- HikaShop version -- : 4.1.0
-- Joomla version -- : 3.9.6

Bonjour

J'aimerai afficher sur ma fiche produit des informations à mettre en avant en dessous de la description courte, comme "Exceptionnel rapport qualité/prix", "Réglages et anti retour sécurité", "grand confort"...
Je pensais à un champs personnalisé via un choix multiple à faire depuis la fiche produit ? est-ce bien cela ?
Si oui est-il possible d'afficher un champs spécifique à un endroit précis (pas à l'emplacement habituel de toute la liste des champs personnalisés) ?
Merci

PS : j'ai rajouté à la fin de l'url l'id et pass identique du htaccess (je ne sais pas où l'indiquer de manière privé)

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

  • Posts: 81509
  • Thank you received: 13064
  • MODERATOR
4 years 9 months ago #307956

Bonjour,

Oui, des champs personnalisés de la table "produit" me semble aussi être la solution pour faire cela.
Si vous voulez afficher des champs produits à différents endroits de la page produit, c'est possible mais cela demande de rajouter un peu de code dans la vue concernée:
www.hikashop.com/forum/product-category-...on-product-page.html
Notez aussi l'option "Display view files" de la configuration HikaShop pour facilement trouver quel fichier de vue vous voulez modifier:
www.hikashop.com/support/documentation/1...-display.html#layout

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

  • Posts: 196
  • Thank you received: 11
  • Hikashop Business
4 years 9 months ago #308355

ok merci, ça fonctionne j'ai créé un champ avec choix multiple.

1/ est-il possible d'avoir sur la fiche produit un bloc avec uniquement le ou les champs perso souhaité(s) à un emplacement voulu et afficher tous les champs perso du "block_custom_main" excepté ce ou ces champs souhaités en bas de page ?

2/ pour mon champ perso à choix multiple, j'aimerai que les différentes valeurs de ma liste s'affichent dans une liste ul > li mais je ne sais pas comment faire ?

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

  • Posts: 81509
  • Thank you received: 13064
  • MODERATOR
4 years 9 months ago #308359

Bonjour,

1. Oui. Désactivez l'affichage du champs sur la page produit et ensuite rajoutez ce code là ou vous voulez afficher le champs:
<?php echo $this->element->XXX; ?>
où XXX est le nom de colonne de votre champs.

2. Cela va demander de la modification plus en profondeur.
Le plus simple, c'est de changer la ligne:
return implode(', ',$results);
dans le code:

class hikashopFieldCheckbox extends hikashopFieldRadioCheck {
	var $radioType = 'checkbox';
	function display($field, $value, $map, $inside, $options = '', $test = false, $allFields = null, $allValues = null){
		if(!is_array($value)){
			$value = explode(',',$value);
		}
		return parent::display($field,$value,$map,$inside,$options,$test,$allFields,$allValues);
	}
	function show(&$field,$value){
		if(!is_array($value)){
			$value = explode(',',$value);
		}
		if(!empty($field->field_value) && !is_array($field->field_value)){
			$field->field_value = $this->parent->explodeValues($field->field_value);
		}
		$results = array();
		foreach($value as $val){
			if(isset($field->field_value[$val]))
				$val = $field->field_value[$val]->value;
			$results[] = parent::show($field,$val);
		}
		return implode(', ',$results);
	}
}
du fichier administrator/components/com_hikashop/classes/field.php par ceci:
return '<ul><li>'.implode('</li><li>', $results).'</li></ul>';

En faisant comme cela, la modification est simple mais vous la perdrez à chaque mise à jour.
Pour faire quelque chose via un override de vue, cela dedans de désactiver l'affichage du champs pour le faire avec votre propre code, et cela complique la tâche. Il va falloir demander à un développeur PHP de vous aider.

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

  • Posts: 196
  • Thank you received: 11
  • Hikashop Business
4 years 9 months ago #308454

Bonjour
Merci pour votre réponse.
C'est dommage qu'un champs de type "liste" ne soit pas affiché par défaut sous forme de liste en html? Ainsi on peut aisément en css l'afficher en ligne ou block.

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

  • Posts: 81509
  • Thank you received: 13064
  • MODERATOR
4 years 9 months ago #308456

Bonjour,

C'est en effet une bonne idée. En fait, personne n'avait mentionné cela jusqu'à maintenant (de ce que j'en sais du moins). Nous allons voir pour ajouter cela dans le future.

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

  • Posts: 196
  • Thank you received: 11
  • Hikashop Business
4 years 9 months ago #308566

COOL Merci !

Juste une petit chose le code fonctionne bien si c'est l'affichage complet de tous les champs.
Mais pas quand je n'affiche qu'un seul champ.
J'ai fait la modif du fichier classes field.php comme indiqué et mis ce code sur la page produit :
<?php
if($this->element->product_plus !=null){
echo $this->element->product_plus;}
?>

Voir exemple ici (id et mot de passe indiqué dans l'url privé du topic) : xxx
voir sous le bouton "Nous contacter"

Merci

Last edit: 4 years 9 months ago by houba_houbi.

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

  • Posts: 81509
  • Thank you received: 13064
  • MODERATOR
4 years 9 months ago #308568

Bonjour,

Quand vous faites :
echo $this->element->product_plus;
c'est vous qui affichez les données bruts de la base de données. Et dans la base de données, les selections sont séparés par des virgules.
Si si vous voulez des ul/li, c'est à vous de les mettre dans votre code.
Par exemple:

echo '<ul><li>'.implode('</li><li>', explode(',', $this->element->product_plus)).'</li></ul>';

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

  • Posts: 196
  • Thank you received: 11
  • Hikashop Business
4 years 9 months ago #308722

ok j'ai compris
Merci beaucoup pour votre aide

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

Time to create page: 0.069 seconds
Powered by Kunena Forum