Afficher champ personnalisé user Fichier

  • Posts: 101
  • Thank you received: 4
10 years 1 month ago #207502

-- HikaShop version -- : 2.5.0

Bonjour,

Je suis en train de bosser sur une boutique avec Hikashop; pour laquelle le vendeur ne pourra pas utiliser le système de facturation d'hikashop; il doit forcément passer par le logiciel qu'il utilise habituellement.
En soi ce n'est pas un problème, j'ai désactivé le téléchargement des factures en front par le client.

Le vendeur voudrait tout de même pouvoir proposer les factures en libre téléchargement sur le site via l'espace client.
Je voudrais pour cela utiliser des champs personnalisés utilisateurs (je les utilise déjà pour rentrer certaines données spécifiques à chaque client).

J'ai donc créé un champs perso Fichier dans la table utilisateur. Côté admin, pas de soucis j'upload bien le fichier PDF; mais en front; comment afficher le lien vers ce fichier (je souhaite l'afficher directement dans la vue cpanel, dans un bloc en bas de page) ?

Pour les autres champs, il suffit de faire

$user = hikashop_loadUser(true);
echo $user->nomduchamps;
Mais pour un fichier, cela me donne uniquement le nom du fichier. J'ai vu que le fichier était uploadé dans le dossier safe; donc pas possible de faire un lien direct. Y-a-t-il une fonction qui me permette d'afficher un lien pour télécharger ce fichier en front (sans avoir besoin de désactiver le .htaccess qui protège le dossier safe) ?

Merci !

Last edit: 10 years 1 month ago by kiweerouge.

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

  • Posts: 26264
  • Thank you received: 4043
  • MODERATOR
10 years 1 month ago #207504

Bonjour,

Vous trouverez dans la vue "order | show" du code qui affiche les champs personnalisés

$this->fieldsClass->show($oneExtraField, $this->order->$fieldName);
Mais il faut passer la variable $oneExtraField qui est les données du champ personnalisé, donc il faut charger la données puisque de base le champs n'est pas affiché.

Si votre champs n'est de base pas accessible en front-end c'est parce que vous ne souhaitez pas l'afficher durant le checkout.
Mais le mieux est de le rendre accessible en front mais de le masquer durant le checkout.
Ainsi HikaShop s'occupera tout seul comme un grand de faire l'affichage.

Tout ce que vous avez à faire est de faire un override pour la vue "checkout | custom_fields" et de modifier le début de la vue
$showfields = array(
	'my_special_field1' => 0, // my_special_field1 display only on step 0
);
En utilisant une valeur négative, le champs personnalisé ne sera jamais affiché.

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: 101
  • Thank you received: 4
10 years 1 month ago #207613

Alors, le champs personnalisé n'est pas dans la table checkout mais dans la table Utilisateur; et je voudrais l'afficher dans la vue "user > cpanel".

En soi j'arrive à afficher le champs. Le code ci-dessous affiche bien le nom de mon fichier

$user = hikashop_loadUser(true);
echo $user->nomduchamps;
Seulement il affiche uniquement le nom du fichier, alors que je voudrais un lien vers ce fichier pour que les utilisateurs puissent le télécharger. OR le fichier est dans le dossier "safe", donc impossible de faire un lien direct.

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

  • Posts: 84233
  • Thank you received: 13673
  • MODERATOR
10 years 1 month ago #207616

Bonjour,

Nous avions compris que votre champs était dans la table utilisateur et non la table commande.
Et c'est un problème pour vous car les utilisateurs peuvent avoir plusieurs commandes et donc vous allez être coincé avec un seul champs.
C'est pourquoi Jérome vous a recommandé d'utiliser plutôt un champs commande.
Ainsi, vous pouvez mettre votre fichier dans chaque commande, et afficher le lien sur la page de la commande accessible via le listing des commandes avec le code que Jérome vous a fourni dans son message.

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

  • Posts: 101
  • Thank you received: 4
10 years 1 month ago #207699

Bonjour,

Non toujours pas; mon champs est bien dans la table utilisateur.
Le champs sera remplis par l'administrateur pour chaque client.

Je veux l'afficher dans la vue "user > cpanel".
Le but est que le client puisse télécharger le fichier directement sur cette page.

Last edit: 10 years 1 month ago by kiweerouge.

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

  • Posts: 26264
  • Thank you received: 4043
  • MODERATOR
10 years 1 month ago #207754

Bonjour

Nous avions compris que votre champs était dans la table utilisateur et non la table commande.
Et c'est un problème pour vous car les utilisateurs peuvent avoir plusieurs commandes et donc vous allez être coincé avec un seul champs.

Il est inutile de tourner en rond :)

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: 101
  • Thank you received: 4
10 years 1 month ago #207760

Certes, mais je ne comprends pas en quoi cette réponse :

Jerome wrote: Bonjour,

Vous trouverez dans la vue "order | show" du code qui affiche les champs personnalisés

$this->fieldsClass->show($oneExtraField, $this->order->$fieldName);
Mais il faut passer la variable $oneExtraField qui est les données du champ personnalisé, donc il faut charger la données puisque de base le champs n'est pas affiché.

(...)

m'aide à résoudre mon problème. Il y est surtout question des vues checkout et order, qui ne me concernent pas du tout.

Je veux bien utiliser ce code, mais comment récupérer la variable $oneExtraField, et faire fonctionner l'ensemble dans la vue "user | cpanel" ?

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

  • Posts: 84233
  • Thank you received: 13673
  • MODERATOR
10 years 1 month ago #207768

Les données des champs personnalisés ne sont chargés ni pour les champs personnalisés "utilisateur" ni pour les champs personnalisés "commande" dans la vue "user | cpanel".
Dans cette vue, tout ce qui est affiché, c'es une liste de bouton.
Donc il faudrait rajouter du code personnalisé pour d'abord charger les données des champs personnalisés du type souhaité, ensuite charger les données de l"utilisateur courant (ou des commandes de l'utilisateur courant) et enfin procéder à l'affichage.
Voici un exemple pour un champs utilisateur.

$fieldClass = hikashop_get('class.field');
$user = hikashop_loadUser(true);
$fields = $fieldsClass->getFields('frontcomp', $user, 'user', 'checkout&task=state');
foreach($itemFields as $fieldName => $oneExtraField) {
$fieldClass->show($oneExtraField,$user->$fieldName);
}

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

  • Posts: 101
  • Thank you received: 4
10 years 1 month ago #207887

Alors ce code me renvoie une erreur 500 sur la page.

J'ai essayé de modifier 2-3 choses pour mieux l'adapter mais rien n'y fait, la ligne

$fields = $fieldsClass->getFields('frontcomp', $user, 'user', 'checkout&task=state');
me renvoi systématiquement une erreur 500

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

  • Posts: 84233
  • Thank you received: 13673
  • MODERATOR
10 years 1 month ago #207890

Si vous regardez dans votre log d'erreur php vous devriez avoir une "fatal error" qui donne des infos sur la source du problème.
En relisant mon code, je vois que la class.field est instanciée dans la variable $fieldClass alors que sur la ligne de l'erreur c'est la variable $fieldsClass qui est utilisée (un s en plus).
Enlevez le s à $fieldsClass sur cette ligne et cela évitera l'erreur.

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

  • Posts: 101
  • Thank you received: 4
10 years 1 month ago #207938

Ah ba cette erreur m'avais échappée, et du coup elle résoud l'erreur 500.

On a donc :

$fieldClass = hikashop_get('class.field');
$user = hikashop_loadUser(true);
$fields = $fieldClass->getFields('frontcomp', $user, 'user', 'checkout&task=state');
foreach($fields as $fieldName => $oneExtraField) { // $fields et pas $itemFields
     $fieldClass->show($oneExtraField,$user->$fieldName);
}

Merci !

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

Time to create page: 0.073 seconds
Powered by Kunena Forum