- Posts: 2696
- Thank you received: 74
produits field perso
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.
merci
Please Log in or Create an account to join the conversation.
echo $this->fieldsClass->show($this->fields, $this->row->semelle);
Please Log in or Create an account to join the conversation.
Please Log in or Create an account to join the conversation.
Une information sur l'erreur en question serait la bienvenue
Cordialement,
Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.
Please Log in or Create an account to join the conversation.
avec ce code : $semelle = $this->row->semelle ;
voir le fichier joint
avec ce code : $semelle = $this->fieldsClass->show($this->fields, $this->row->semelle);
Please Log in or Create an account to join the conversation.
Sinon, il faudrait regarder dans le log d'erreur PHP du serveur.
Please Log in or Create an account to join the conversation.
mon code complet des attributs dans ./templates/TPL/html/com_hikashop/product/show_default.php
je fais un str_replace en attendant de pouvoir récupérer la vraie valeur
Please Log in or Create an account to join the conversation.
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.
Please Log in or Create an account to join the conversation.
$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
Please Log in or Create an account to join the conversation.
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.
Please Log in or Create an account to join the conversation.
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.
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.
Please Log in or Create an account to join the conversation.
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)
Please Log in or Create an account to join the conversation.
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.
Please Log in or Create an account to join the conversation.
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
Please Log in or Create an account to join the conversation.
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.il suffit juste d'un tout petit inner join dans la requete
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.
Et en cas de soucis :
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.ou au moins $this->row->champ_perso serait un array de key value on pourrait choisir
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.
Please Log in or Create an account to join the conversation.