THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour

  j'ai absolument besoin d'ajouter plusieurs champs sur la fiche client (par exemple son identifiant dans notre ERP).

J'ai essayé de lire http://doc.thelia.net/en/documentation/form/index.html, et je comprend comment créer de nouveaux formulaires, pas comment ajouter des champs à un formulaire/modèle existant.

Comment procéder ?

(j'ai le même besoin avec les produits, et probablement les catégories ...)

Offline


Il ne faut pas modifier les coeur de Thelia pour faire ça, mais plutôt utiliser un module (qui reste à écrire, dans ton cas...).


OpenStudio Toulouse

Offline


oui j'ai bien compris qu'il fallait écrire un module (c'est pour çà que j'ai mis dans la catégorie Développement ...)
mais comment, via ce module ajouter des champs à un client ?

Last edited by griotteau (04-08-2014 10:06:27)

Offline


La documentation sur les modules devrait pouvoir t'aider: http://doc.thelia.net/en/documentation/ … index.html


OpenStudio Toulouse

Offline


ben justement elle ne m'a pas aidé ...
J'ai déjà crée des modules de transport, gérer des événements après création de commande, modifier quelques templates, etc ...
Mais je ne vois toujours pas comment mettre des champs supplémentaires

Offline


Il te faut créer dans ton module une form qui va hériter de CustomerUpdateForm, et la déclarer dans la section <forms> du config.xml du module en remplacement de la form standard :

    <forms>
        <form name="thelia.admin.customer.update" class="TonModule\Form\FormQuiHeriteDeCustomerUpdateForm" />
    </forms>

Par contre, pour ajouter les champs supplémentaires sur la page de gestion des customers, il semblerait qu'il manque le point d'entrée adéquat.

Tu peux y remédier, en ajoutant à la fin du formulaire :

{module_include location='customer_update_form'}

Il ne te restara plus alors qu'à créer une page TonModule/AdminIncludes/customer_update_form.html qui contiendra les champs supplémentaires.


OpenStudio Toulouse

Offline


j'avais tenté ceci, mais comme çà ne marchait pas je me suis dit que c'est une mauvaise piste ...

Dans mon config.xml :
  <forms>
        <form name="thelia.admin.customer.update" class="ERP\Form\ERPCustomerUpdateForm" />
  </forms>

J'ai copié/coller CustomerUpdateForm en ERPCustomerUpdateForm, et fait dériver ERPCustomerUpdateForm de CustomerUpdateForm  (et en adaptant les namespace et use ...)
(et vidage de cache à chaque fois)

En faisant celà, les données ne se charge pas dans le formulaire (tous les champs sont vides). Dès que j'enlève la partie <forms>, les données apparaissent dans les champs de saisie !


Edit : j'ai aussi essayé ensuite avec le formulaire d'enregistrement (thelia.front.customer.create), pour voir si c'était mieux.
Ca ne fonctionne pas aussi (quand je valide, il reste sur la même page, en vidant les champs que j'avais saisi ...)

Edit 2 : ces tests se sont fait sans ajout de champs supplémentaire (on fait par étapes ...)

Last edited by griotteau (04-08-2014 13:36:53)

Offline


Argh.

C'est logique, dans la mesure ou les contrôleurs du BO instancient la classe CustomerUpdateForm

Il te faut alors surcharger le controlleur du BO Thelia\Controller\Admin\CustomerController.php pour :

1) Instancier ERPCustomerUpdateForm au lieu de CustomerUpdateForm
2) populer les champs supplémentaires
3) traiter les inputs pour les ranger dans ta table.


OpenStudio Toulouse

Offline


ok çà marche mieux ainsi ... merci beaucoup pour ton aide !
Mais il reste le + important pour moi (et + dur) : ajouter des champs à un Customer, au niveau du model.
Je vois que processUpdateAction() est appelé, mais c'est assez obscur pour moi après ...

(Ce qui m’intéresse est de pouvoir enregistrer la valeur dans la table customer, puis de pouvoir le retrouver facilement dans les loop et autre code)

Offline


En continuant à chercher un peu, j'ai l'impression que pour faire ce que je veux, je dois modifier les classes Thelia\Model\Base\Customer et Thelia\Model\Map\CustomerTableMap.
Mais bon je n'ai pas envie de modifier les fichiers du core ...
Pas moyen d'ajouter des champs à un Customer ??

Offline


Tu ne dois pas modifier le schéma du core, sous peine de te couper de toutes les futures (et merveilleuses) mises à jour, ou de bien galérer pour les mettre en place.

Au lieu de ça, tu peux tout à fait créer un modèle spécifique à ton module, qui comprend une table qui va stocker ces champs supplémentaires. Avec une foreign key vers la table customer, et un delete cascade, c'est la façon la plus simple et sûre de faire.

Enfin, tu vas implémenter dans ton module une Action qui va gérer cette table.

Et voilà !


OpenStudio Toulouse

Offline


et donc je suppose que je devrais me créer un loop personnalité (genre my_customer), qui surchage le loop customer ?

Offline


Effectivement.

Lorsque tu ajoutes de l'information, il te faut écrire le logiciel qui va gérer cette information, à tous points de vue.

Pour Thelia 1, il existe un module qui réalise cette fonction (ajout de champs à la fiche client), et il fait exactement la même chose: gérer des tables, une interface de saisie en BO, une boucle pour le FO, etc.


OpenStudio Toulouse

Offline


Bonjour,
après un an de pause ( la remise en marche du cerveau s'avère difficile )  je m'intéresse à cette discussion. Car j'aurais besoin d'ajouter des champs nom, prénom, date de naissance à chaque produit. As-tu réussi ?


MAC OS LION MAMP
Quand on veut vraiment, on peut toujours.

Offline


Ajouter des champs à des produits ? Les caractéristiques sont là pour ça.


OpenStudio Toulouse

Offline


pardon je me suis mal exprimée. il faut que le client puisse les remplir


MAC OS LION MAMP
Quand on veut vraiment, on peut toujours.