Non-prise en charge des caractéristiques/variantes

  • Posts: 35
  • Thank you received: 2
8 years 8 months ago #253061

-- HikaShop version -- : 2.6.4
-- Joomla version -- : 3.6.2
-- PHP version -- : 7.0.10
-- Browser(s) name and version -- : Firefox

Bonjour,

j'ai deux produits configurés avec des caractéristiques et des variantes qui se comportent différemment :
Cas 1 : lorsque je choisis une caractéristique, le nom du produit se met à jour. La bonne variante est mise dans le panier
Cas 2 : lorsque je choisis une caractéristique, RIEN NE SE PASSE. Si je mets le produit dans le panier, c'est la variante par défaut qui est prise en compte et non celle qui a été sélectionnée.

Les caractéristiques et les variantes sont définies de la même manière dans les deux cas.

Qu'est ce qui peut bien expliquer cela ???

Merci pour votre aide.

Attachments:

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

  • Posts: 83995
  • Thank you received: 13605
  • MODERATOR
8 years 8 months ago #253062

Bonjour,

D'après ce que je vois, le problème vient des données des variantes qui sont manquantes sur la page produit, à cause de la personnalisation d'un des fichiers de la vue "product" (surement le fichier "show.php".
Si vous renommez le dossier templates/YOUR_TEMPLATE/html/hikashop/product/ via FTP, cela devrait fonctionner correctement avec l'affichage par défaut de la page produit, qui confirmera l'origine du problème.
Il faudra alors voir ça avec la personne qui a personnalisé l'affichage de la page produit.

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

  • Posts: 35
  • Thank you received: 2
8 years 7 months ago #253135

Bonjour Nicolas,

merci pour la réponse.
C'est moi qui ai personnalisé le code et j'ai effectivement fait un override de la vue product.
Le test que vous indiquez pour revenir à l'affichage de base donne malheureusement le même résultat !

En fait, je faisais jusqu'à maintenant mon développement sur Essential et je suis passé à Business. La prise en compte des variantes fonctionnait bien sur Essential et il me semble que le problème est apparu après l'installation Business.

J'ai également touché un peu au code de administratror/components/com_hikashop/types/characteristic.php à la ligne 221 :
$main_html.='<td>'.$html.'</td><td><span class="esp-diametre"><a href="#diametre">'.JText::_('HIKA_SIZING').'</a></span></td></tr>';
Ceci pour ajouter un lien interne à la page permettant d'afficher un guide des tailles.



Il me semble que ça n'a rien à voir, non ?

Ce que je ne comprends pas bien, c'est le changement de comportement d'un produit à l'autre, sur une fonctionnalité qui est censée faire appel aux mêmes fichiers, non ?
Quels sont les fichiers qui sont concernés et que je peux avoir modifiés (hors override) car je suis allé modifier d'autres éléments du composant et j'ai certainement fait une erreur... Je voudrais éviter d'écraser mes modifications en réinstallant le composant...

MERCI !

Arnaud

Attachments:

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

  • Posts: 83995
  • Thank you received: 13605
  • MODERATOR
8 years 7 months ago #253147

Bonjour,

Comme indiqué dans mon précédent message, c'est le fichier "product/show.php" qui rajoute les informations des variantes sur la page, et c'est parce qu'elles sont manquantes que le système ne fonctionne pas.
Ce fichier se base sur les données des variantes qui sont chargées par le fichier components/com_hikashop/views/product/view.html.php
Donc soit c'est le fichier product/show.php qui a été modifié et qui n'affiche pas les données dans certains cas, soit c'est le fichier view.html.php qui ne les charge pas.

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

  • Posts: 35
  • Thank you received: 2
8 years 7 months ago #253289

Alors, on fait fausse route, le problème ne vient pas de là (les fichiers view.html.php et product.php) ne sont pas en cause).

Le problème semble venir du point suivant :
- dans la description des produits, je charge un module (Hikashop Content Module) avec la syntaxe {loadposition Nom-du-module}
- ce module me permet d'afficher les produits de la même gamme assez haut dans la page, juste en dessous du bouton "ajouter au panier". Je triche à l'affichage avec un margin-top négatif sur ce bloc
cf. copie d'écran, le bloc concerné est "dans la même gamme".


- si je masque le module, le comportement des variantes est correct
- si j'affiche le module, le choix d'une variante ne provoque rien

Je n'ai pas trouvé le moyen d'afficher le module "produits associés" plus haut dans le code autrement.
Comment je peux faire ?

Merci !

Attachments:
Last edit: 8 years 7 months ago by arnaudgautron. Reason: Envoi trop rapide, post pas terminé !

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

  • Posts: 83995
  • Thank you received: 13605
  • MODERATOR
8 years 7 months ago #253309

Bonjour,

Dans ce cas, il faut surement adapter le code de product/show pour le rendre compatible avec cette utilisation.
Je suppose que le soucis est que $this->element->variants est supprimé lors de l'appel du listing de produit dans la page produit alors que c'est nécessaire pour le bon fonctionnement du système.
Il faudrait donc sauvegarder cette variable dans une autre au début de la vue et remplace son usage par la copie dans ce fichier et cela devrait régler le problème.

The following user(s) said Thank You: arnaudgautron

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

  • Posts: 35
  • Thank you received: 2
8 years 7 months ago #253323

Merci pour la réponse.
Je suis encore débutant en PHP (surtout designer/intégrateur) mais c'est l'occasion de progresser ! Je vais essayer de faire ça et je vous dirai.
Merci encore.

Arnaud

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

  • Posts: 35
  • Thank you received: 2
8 years 7 months ago #253324

J'ai résolu une première partie du problème de la façon suivante :
- en début de vue product/show, j'ai fait la déclaration $mes_variantes = $this->element->variants ;
- et j'ai ensuite remplacé les $this->element->variant par $mes_variantes.
- la vue se met bien à jour quand je change la variante
avant :


après :


LE PROBLEME :
- le prix ne s'affiche plus
- le stock est ramené à 0, comme si le produit initial n'était pas reconnu.
Je suppose qu'il y a d'autres variables à reprendre...

MERCI !

Attachments:

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

  • Posts: 83995
  • Thank you received: 13605
  • MODERATOR
8 years 7 months ago #253378

Bonjour,

Je ne vois toujours pas les données des variantes qui devraient être juste après </form> sur la page:
take.ms/84TTl
Donc il doit manquer quelque chose d'autre.
Peut être que c'es tout l'object $this->element qu'il faudrait sauvegarder de la même manière.

The following user(s) said Thank You: arnaudgautron

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

  • Posts: 35
  • Thank you received: 2
8 years 7 months ago #253442

Merci Nicolas.

Voilà ce que j'ai fait :
- Toujours dans product/show, j'ai rajouté la ligne $mon_element=$this->element;
- J'ai ensuite remplacé les "$this->element" dans le code par "$mon_element".

Le comportement change mais on n'y est pas encore :
- aucune mention du prix
- aucune mention du stock
- plus de bouton "ajouter au panier"

Vue initiale :


Après avoir choisi une variante :


Je comprends "un peu" le php mais je crois, pas suffisamment. Mais je suis sûr qu'on va y arriver.

Merci encore et toujours :-)

Attachments:

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

  • Posts: 83995
  • Thank you received: 13605
  • MODERATOR
8 years 7 months ago #253446

Bonjour,

Je ne vois pas pourquoi cela ferait ça.

Si le prix ne changent pas en fonction de la variante, alors vous pouvez enlever le code:

<div id="hikashop_product_price_<?php echo $variant_name;?>" style="display:none;"><?php
		if($this->params->get('show_price','-1')=='-1'){
			$config =& hikashop_config();
			$this->params->set('show_price',$config->get('show_price'));
		}
		if ($this->params->get('show_price')) {
			$this->setLayout('listing_price');
			echo $this->loadTemplate();
		}
	?></div>
dans le fichier show et cela évitera le remplacement de cette zone par les données des variantes.
Pour le bouton d'ajout au panier je ne vois pas de solution facile sans débug directement dans le code de la vue.

The following user(s) said Thank You: arnaudgautron

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

  • Posts: 35
  • Thank you received: 2
8 years 7 months ago #253588

Le problème semble venir du code suivant :
<div id="hikashop_product_quantity_<?php echo $variant_name;?>" style="display:none;"><?php
$this->row = & $variant;
if(empty($this->formName)) {
$this->formName = ',0';
if (!$this->config->get('ajax_add_to_cart', 1)) {
$this->formName = ',\'hikashop_product_form\'';
}
}
$this->ajax = 'if(hikashopCheckChangeForm(\'item\',\'hikashop_product_form\')){ return hikashopModifyQuantity(\'' . $this->row->product_id . '\',field,1' . $this->formName . ',\'cart\'); } else { return false; }';
$this->setLayout('quantity');
echo $this->loadTemplate();
?></div>

Est-ce qu'il ne faut pas à nouveau sauver des variables avant d'appeler le loadTemplate qui affiche le stock et le bouton d'ajout au panier ?

MERCI !

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

  • Posts: 83995
  • Thank you received: 13605
  • MODERATOR
8 years 7 months ago #253592

Bonjour,

Peut être, mais justement, je ne vois pas pour quelle variable il faudrait faire cela.
D'où le fait que je disais qu'il faudrait débug le soucis dans mon précédent message.

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

  • Posts: 35
  • Thank you received: 2
8 years 7 months ago #253681

Merci Nicolas.
J'ai activé le debug.
Voilà l'erreur qui s'affiche : "Notice: Undefined variable: title in /home/luciennedq/www/dev/templates/lucienne-bs3/html/com_hikashop/product/listing.php on line 109"

Ca correspond à :
if($title && JRequest::getVar('hikashop_front_end_main',0) && (!$this->module || $this->pageInfo->elements->total)){

Je ne vois pas trop le rapport a priori...

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

  • Posts: 83995
  • Thank you received: 13605
  • MODERATOR
8 years 7 months ago #253685

Bonjour,

Je ne pense pas que cela soit lié à votre problème.
Quand je dis débug, je veux dire qu'il faut rajouter des lignes genre var_dump($variable); pour voir le contenu des variables et voir si certaines sont manquantes par rapport à quand le module n'est pas ajouté.
www.phpknowhow.com/basics/basic-debugging/

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

  • Posts: 35
  • Thank you received: 2
8 years 7 months ago #253785

Merci ! C'est parti pour apprendre un peu plus de PHP.
Je vais regarder si je peux comprendre ce qui se passe notamment pour identifier les variables qui pourraient être en cause...

Voilà ce que j'ai fait :
dans product/show, j'ai rajouté en tête de page le code suivant :

$mon_element = $this->element;
$mes_variantes = $mon_element->variants;

//DEBUG
echo '<span class="lucienne-debug"><strong>print_r($this->element);</strong></span><br/><pre><span class="lucienne-debug">';
print_r ($mon_element);
echo '</span></pre>';

echo '<span class="lucienne-debug"><strong>print_r($this->element->variants);</strong></span><br/><pre><span class="lucienne-debug">';
print_r ($mes_variantes);
echo '</span></pre>';
//--End:DEBUG

Le résultat est visible sur les pages produits.

Merci !

Faut-il placer d'autres dump_var ou print_r ?

Last edit: 8 years 7 months ago by arnaudgautron. Reason: Premier post pas complet

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

  • Posts: 35
  • Thank you received: 2
8 years 7 months ago #253794

Nicolas,

j'ai trouvé quelque chose !

Voilà ce que j'ai fait en plus du DEBUG précédent.
Dans la vue product/quantity :

1/ Aux alentours de la ligne 100

if($this->row->product_quantity == -1) {
?>
<div class="hikashop_product_stock">
<?php

//DEBUG
echo '<span class="lucienne-debug"><strong>DEBUG:print_r ($this->params);</strong></span><br/><pre><span class="lucienne-debug">';
print_r ($this->params);
echo '</span></pre>';
//--End:DEBUG

...

2/ Aux alentours de la ligne 120
...
} elseif($this->row->product_quantity > 0) {
?>
<div class="hikashop_product_stock">
<?php

//DEBUG
echo '<span class="lucienne-debug"><strong>DEBUG:print_r ($this->params);</strong></span><br/><pre><span class="lucienne-debug">';
print_r ($this->params);
echo '</span></pre>';
//--End:DEBUG

...

=> LE RESULTAT : quand on choisit une variantes, le $this->params ne renvoie plus au produit mais au module que j'appelle dans la description.
Je pense que le problème vient de là, non ?

Maintenant, comment le résoudre !!!

MERCI ENCORE.
Arnaud

Last edit: 8 years 7 months ago by arnaudgautron.

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

  • Posts: 83995
  • Thank you received: 13605
  • MODERATOR
8 years 7 months ago #253817

Dans ce cas, vous pouvez utiliser le même principe qu'avant:
$params = $this->params;
au début de votre fichier show.php
puis $this->params = $params;
avant la ligne:

if(empty($this->element->variants) || $this->params->get('characteristic_display') == 'list') {

The following user(s) said Thank You: arnaudgautron

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

  • Posts: 35
  • Thank you received: 2
8 years 7 months ago #254212

Bonjour Nicolas,

je crois que ça marche. Un grand merci !

J'ai une dernière question :
- mon produit principal a une quantité de 5
- les deux variantes ont une quantité illimitée
- Si je choisis d'acheter l'une ou l'autre des variantes, est-ce que la quantité en stock du produit principal diminuera ou seulement celle des variantes ?

MERCI ENCORE !

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

  • Posts: 83995
  • Thank you received: 13605
  • MODERATOR
8 years 7 months ago #254221

Bonjour,

Si la quantité des variantes est illimitée, elle ne pourra pas diminuée.
Le système met à jour la quantité de la variante et du produit principal tant qu'elles ne sont pas illimitées. Donc oui, cela fonctionnera comme vous le voulez.

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

Time to create page: 0.133 seconds
Powered by Kunena Forum