Jump to content

editCustomer, problème avec le context customer sur mode guest checkout


Recommended Posts

Bonjour,

 

Je vais surement avoir du mal à expliquer mon problème...(qui ne mérite pas encore un post sur la forge je précise)

 

J'ai modifié la page OPC afin qu'en mode "commande instantanée", le bouton d'enregistrement des données reste affiché, j'ai déjà ouvert un Post à ce sujet. J'ai en effet besoin que l'utilisateur puisse modifier ses informations tant que la commande n'a pas été payée (c'est d'ailleurs ce qui me dérange dans le process de commande en Guest de PS).

 

J'ai qlq overrides qui ajoutent des champs à la var static $definition de Customer et qui modifient les attributs required notamment si jamais l'internaute les active pendant sa saisie d'infos.

Un exemple (important pour la suite de mon explication) : si sa date de naissance confirme qu'il a plus de 18ans, alors le champ "bidule" suivant devient obligatoire (alors que facultatif au départ). Mon override PHP se charge donc de vérifier la date de naissance à sa réception et de modifier l'attribut required du $field "bidule". C'est un exemple...

 

Le cas problématique :

En mode Guest (et uniquement en mode guest), l'internaute clique une première fois pour sauvegarder ses infos. Tout fonctionne donc le contrôle date de naissance et passage en required de bidule si nécessaire.

 

Le bouton d'enregistrement, que je laisse donc affiché, cible maintenant l'action "editCustomer" de OrderOpcController.php (line 109) qui utilise le context customer pour les maj.

 

Mettons que mon internaute se soit bêtement trompé dans sa date de naissance au premier enregistrement et confirme finalement qu'il a plus de 18 ans, il va donc rendre obligatoire le champ "bidule" qui ne l'était pas.

 

Dans cette suite, mettons qu'il ne remplisse pas le champ "bidule" (alors qu'obligatoire), l'action d'enregistrement fonctionnera malgré tout (pas de message indiquant "bidule est obligatoire").

 

C'est tout simplement parceque le context customer utilisé dans editCustomer ne contient pas les bonnes définitions des champs ($definition) que je veux donc overrider ici aussi. Mais le context->customer est protected et donc, à ce niveau, les déf de champs ne sont pas modifiables.

 

Voilà...donc en gros j'ai besoin d'avoir la main sur les champs et leurs attributs dans la dite-méthode "editCustomer" mais je ne vois pas trop comment faire. J'ai dans l'idée d'instancier le customer puisqu'existant mais je ne voudrais être hors logique métier de PS.

 

Si quelqu'un (m'a compris et) peut me conseiller...

 

 

Merci de votre coup de main.

 

A+

Link to comment
Share on other sites

Petite idée... Par sur que ce soit ce que tu désire.

 

Cela passe par l'override de la classe Context.php

Si tu rajoute un :

 


 

setCustomer($customer)

{

$this->customer=$customer;

}

[code]

 

Tu va pouvoir modifier $this->context->customer comme ceci :

 

[code]

 

$customer = $this->context->customer;

$new_customer = new Customer($customer);

// faire tes modif ici

 

//puis :

$this->context->setCustomer($new_customer);

 

// et la tu pourra accéder à ton client modifier

 

[code]

 

Cela te va ?

 

Ps: pas sur que le code est fonctionnel :( car je te répond via mon iPhone et grâce à mon bon souvenir du context :P

 

Loic.

Link to comment
Share on other sites

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...