produits field perso

  • Posts: 2605
  • Thank you received: 65
11 years 11 months ago #51053

dans ma table products j'ai des champs perso comme semelle par exemple

les valeurs de la table firlds sont

compensee_cuir::compensee cuir::0
compensee_liege::compensée liège::0
compensee_gomme::compensée gomme::0
ect...

dans./templates/TPL/html/com_hikashop/product/show_default.php
avec $this->row->semelle je recupere compensee_liege au lieu de compensée liège

comment récupérer la valeur et non la cle qui est dans la table product ?

merci

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

  • Posts: 2605
  • Thank you received: 65
11 years 11 months ago #51171

une idee ?

merci

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

  • Posts: 81568
  • Thank you received: 13078
  • MODERATOR
11 years 11 months ago #51178

Il faut faire comme cela:
echo $this->fieldsClass->show($this->fields, $this->row->semelle);

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

  • Posts: 2605
  • Thank you received: 65
11 years 11 months ago #51179

là ça plante direct

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

  • Posts: 26015
  • Thank you received: 4004
  • MODERATOR
11 years 11 months ago #51232

Bonjour,

Une information sur l'erreur en question serait la bienvenue :)

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

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

  • Posts: 2605
  • Thank you received: 65
11 years 11 months ago #51251

voila la page normale sacapuce.fr/index.php/modeles/2182-voltaire-jean
avec ce code : $semelle = $this->row->semelle ;

voir le fichier joint
avec ce code : $semelle = $this->fieldsClass->show($this->fields, $this->row->semelle);

Attachments:
Last edit: 11 years 11 months ago by erickb.

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

  • Posts: 81568
  • Thank you received: 13078
  • MODERATOR
11 years 11 months ago #51287

Pourriez vous changer l'option "error reporting" en "maximum" dans la config de joomla pour avoir le message d'erreur ?
Sinon, il faudrait regarder dans le log d'erreur PHP du serveur.

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

  • Posts: 2605
  • Thank you received: 65
11 years 11 months ago #51293

justement je n'ai pas d'erreur dans le log_error php , j'ai toujours un oeil dessus

mon code complet des attributs dans ./templates/TPL/html/com_hikashop/product/show_default.php

<?php
		$dessus = str_replace('_',' ',$this->row->dessus)  ;
		$doublure =  str_replace('_',' ',$this->row->doublure)  ;
		$semelle =  str_replace('_',' ',$this->row->semelle)  ;
		//$semelle = $this->fieldsClass->show($this->fields['semelle'], $this->row->semelle); 
		$talon =  $this->row->talon  ;
		$chaussant =  str_replace('_',' ',$this->row->chaussant)  ;
		$mollet = $this->row->mollet  ;
		$tige = $this->row->tige  ;
		$cm = JText::_('HK_CM');
		$attrib = '<ul class="hk-prod-attr-list'.$ulattrib.'">';
		$attrib .= '<li>'.JText::_('HK_DESSUS') .'<span class="hk-prod-attr-val">'. $dessus .'</span></li>'; 
		$attrib .= '<li>'.JText::_('HK_DOUBLURE') .'<span class="hk-prod-attr-val">'.$doublure.'</span></li>';
		$attrib .= '<li>'.JText::_('HK_SEMELLE') .'<span class="hk-prod-attr-val">'.$semelle.'</span></li>';
		$attrib .= '<li>'.JText::_('HK_TALON') .'<span class="hk-prod-attr-val">'.$talon. ' ' . $cm.'</span></li>';
		$attrib .= '<li>'.JText::_('HK_CHAUSSANT') .'<span class="hk-prod-attr-val">' . $chaussant .$hp->getAttribut('chaussant',$chaussant).'</span></li>';
		if($mollet){
			$attrib .= '<li>'.JText::_('HK_MOLLET') .'<span class="hk-prod-attr-val">'.$mollet.'</span></li>';	
		}
		if($tige){
			$attrib .= '<li>'.JText::_('HK_TIGE') .'<span class="hk-prod-attr-val">'.$tige.$cm.'</span></li>';
		}	
		$attrib .= '</ul>';
		echo $attrib;			
		?>

je fais un str_replace en attendant de pouvoir récupérer la vraie valeur

Last edit: 11 years 11 months ago by erickb.

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

  • Posts: 26015
  • Thank you received: 4004
  • MODERATOR
11 years 11 months ago #51321

Bonjour,

Si la page s'arrête d'un seul coup et affiche une simili page blanche c'est qu'il y a une erreur PHP.
"fieldsClass" et "fields" sont définit de base dans le fichier "view" et permettent d'accéder à la class Fields ainsi qu'au custom fields pour le produit courant.
A moins qu'il y ai des modifications extérieurs, il n'y a pas de raison pour que cela génère une erreur.

Les erreurs possibles sont:
$this->fieldsClass inexistant - il est définit dans le view et assigné.
$this->fields inexistant - il est chargé dans le view et assigné.
$this->fields inexistant - Cela voudrait dire que le custom field possède un problème de définition. Afin d'éviter l'erreur, placer un @ aide toujours : @$this->fields

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

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

  • Posts: 2605
  • Thank you received: 65
11 years 10 months ago #53499

retour de vacances, je reviens sur ce probleme, ça ne marche pas, il faut recuperer la valeur et non la cle

$this->fieldsClass inexistant - il est définit dans le view et assigné


il n'est defini nulle part

concrètement comment je fais pour que ca marche ?


[11-Jun-2012 18:15:28] PHP Notice: Trying to get property of non-object in administrator/components/com_hikashop/classes/field.php on line 995 -->
if(substr($field->field_type,0,4) == 'plg.') {
$field->field_type = substr($field->field_type,4);
JPluginHelper::importPlugin('hikashop', $field->field_type);
}

[11-Jun-2012 18:15:28] PHP Notice: Trying to get property of non-object in administrator/components/com_hikashop/classes/field.php on line 999 -->
$classType = 'hikashop'.ucfirst($field->field_type);
[11-Jun-2012 18:15:28] PHP Fatal error: Call to undefined method hikashop::show() in administrator/components/com_hikashop/classes/field.php on line 1001 -->
$html = $class->show($field,$value);


merci

Last edit: 11 years 10 months ago by erickb.

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

  • Posts: 26015
  • Thank you received: 4004
  • MODERATOR
11 years 10 months ago #53653

Bonjour,

Si fieldsClass n'est définit nul part, HikaShop ne pourrait pas fonctionner.
Vu que la fonction "display" est appelé, il est donc bien définit quelque part et est accessible.
(merci de faire un "var_dump" ou autre fonction classique afin de vérifier l'existence et le contenu de vos variables).

L'erreur de la ligne 995 vient du fait que l'objet "field" donné à la fonction "display" est incorrect.
Ne pouvant pas avoir le type du field, il est impossible de charger la classe et donc de continuer le processus normal de fonctionnement.

Merci de vérifier l'objet field passé en paramètre : $this->fields
- Merci de vérifier que $this->fields contient bien des informations.
- Merci de vérifier que "semelle" est bien un custom field affiché dans le front end.
- Merci de faire du "var_dump", "print_r" afin d'inspecter le contenu des variables.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

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

  • Posts: 2605
  • Thank you received: 65
11 years 10 months ago #53659

le fieldsClass n'est défini nulle part dans cette page ni dans la view d'origine mais je ne comprend toujours pas que ce soit la cle qui soit lue et non sa valeur par defaut en natif

j'ai contourne ce problème avec un jTEXT sur la cle et je met les valeurs dans le fichier de langue overrides

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

  • Posts: 26015
  • Thank you received: 4004
  • MODERATOR
11 years 10 months ago #53665

Bonjour,

fieldClass est bel et bien définit dans HikaShop, dans le fichier "view.html" pour être plus précis (utilisation de la fonction assignRef).
Le problème actuel est que la fonction est appelée avec des paramètres incorrect.
Encore une fois, si la fonction "display" est appelé et qu'il y a des "warning" dans le fichier field. C'est bien que l'objet existe et qu'il est appelé.
Il serait donc intéressant de ne pas donner d'affirmation "il n'est pas définit" sans faire un simple test de type "var_dump" donnant une réponse claire et précise.

Quand vous chargez des custom fields, ceci sont stockés dans un tableau appelé "fields" (accessible via $this->fields) et nous utilisons un tableau associatif.
Il n'y a pas que la clé qui est lue, tout l'objet est chargé et la valeur est aussi stockée dans cet objet mais nous passons via des fonctions afin de généraliser l'affichage.

Pourquoi ?
Parce qu'une date s'affiche comme une date, un texte comme un texte et une liste déroulante comme une liste déroulante.
Nous avons aussi des custom field avec des affichages spécifiques, etc


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

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

  • Posts: 2605
  • Thank you received: 65
11 years 10 months ago #53673

ok pour tout ca , je peux tester ect ...

la question principale reste : pourquoi en natif $this->row->champ_perso retourne la cle et non la valeur, personne JAMAIS n'affichera la clé

mais je me suis simplifie la vie avec un JText::_($this->row->champ_perso)

Last edit: 11 years 10 months ago by erickb.

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

  • Posts: 26015
  • Thank you received: 4004
  • MODERATOR
11 years 10 months ago #53675

Bonsoir,

Ceci est déjà expliqué dans mon précédent message.
Parce que " echo $this->row->champ_perso " ne sert à rien. Un custom field ne va pas contenir que du texte.
Votre cas précis n'est pas forcement le cas unique, il existe des cas plus complexes qu'il faut gérer.

La question principale ne reste pas, j'ai donné la réponse et les explications du "pourquoi du comment".
Ce qu'il reste principalement est d'accepter cette réponse qui n'est plus ni moins qu'un design d'un système e-commerce évolutif et flexible.


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

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

  • Posts: 2605
  • Thank you received: 65
11 years 10 months ago #53678

exact $this->row->champ_perso ne contient pas que du texte mais quand on a un key > value , on attend la value pas la key , texte ou non
celui qui s'applique a cree un champ perso prend soit dans la value de mettre ce qu'il veut voir afficher
et une maniere simple comme $this->row->champ_perso dans le code source doit monter la value, il suffit juste d'un tout petit inner join dans la requete

ou au moins $this->row->champ_perso serait un array de key value on pourrait choisir

mais bon j'ai resolu ce probleme facilement avec jtext qui permet meme les traduction

Last edit: 11 years 10 months ago by erickb.

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

  • Posts: 26015
  • Thank you received: 4004
  • MODERATOR
11 years 10 months ago #53687

il suffit juste d'un tout petit inner join dans la requete

Pour faire simple, ce "il suffit juste de" a une répercution sur les performances qui est énorme (dans le mauvais sens) et ne marche pas dans tous les cas.

Quand nous avons une liste déroulante, un <select>. Nous avons à l'intérieur des <option> sous la forme : <option value="1">Ma Valeur 1</option>
Ce que vous appelez clé, moi je l'appel valeur (car value) et jamais le formulaire HTML va renvoyer "Ma Valeur 1" (sinon il faut aller se plaindre au W3C).
La valeur est unique, la valeur fait foie, la valeur est la donnée qui importe.
L'affichage n'est que l'affichage et ce qu'il y a affiché dans la liste déroulante importe que peu. L'affichage peut être totalement différent par la suite.
Je ne vais pas lister les tas d'exemples possibles mais ils sont plus que nombreux.

Donc pour afficher un custom field, il y a une méthode à suivre. C'est ainsi et ça gère tous les cas possible, même les "extended custom field" via plugin.
$this->fieldsClass->show($this->fields['my_custom_field'], $this->row->my_custom_field);
avec "my_custom_field" un custom field visible dans le front-end sinon il ne fera pas parti du tableau $this-fields.

Et en cas de soucis :
var_dump($this->fields);
var_dump(array_keys($this->fields));
var_dump($this->fields['my_custom_field']);

ou au moins $this->row->champ_perso serait un array de key value on pourrait choisir

Non, cela générerait des bugs, des incompatibilité avec les versions précédentes, les plugins et les surcharges de vue ainsi qu'un incompréhension générale.
La valeur doit contenir la valeur et uniquement la valeur.

Pour moi, le sujet est clos.


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

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

Time to create page: 0.091 seconds
Powered by Kunena Forum