Nous ne répondons seulement qu'aux sujets dont l'auteur a complété sa signature [Lire]



Vous avez des soucis avec votre Opencart v1.5.x, nous pouvons résoudre vos problèmes,
contactez le Bureau France !

par tel: 0 891 690 175 ou par
email

Ajout d'un champ dans une commande

Programmation, discussions et suggestions pour l'amélioration de OpenCart

Ajout d'un champ dans une commande

Messagepar nico56 » 26 Oct 2011, 06:23

Bonjour à tous,
J'essaie de personnaliser depuis qq mois Opencart (V1.4.9) pour créer un site de livraison de panier sur point relais. J'ai fait un peu de développement il y a qq années mais je suis qd même assez débutant.
Je bloque depuis qq jours sur l'ajout d'un champ "point relais" dans une commande.
* J'ai ajouté le champ "point_relais_id" dans la table "ORDER".
* J'ai modifié view\theme\default\template\checkout\shipping.php pour ajouter le champ dans le formulaire
* J'ai modifié le UPDATE dans model\checkout\order.php

Malheureusement il n'y a pas de fichier correspondant 'order.php' dans controller\checkout...
J'ai déjà réussi à ajouter des champs dans d'autres pages du site et à chaque fois on retrouve les mêmes noms de fichier dans model, controler et template.
En face de model\checkout\order.php, je ne trouve que controller\checkout\shipping.php et payment.php qui correspondent aux 2 premières pages de la saisie d'une nouvelle commande.
Ensuite lorsque l'on valide la page 'payment', il y a enregistrement de la commande dans la table 'ORDER' mais je ne comprend plus ce qui se passe ... :-(
Concrètement, il me dit qu'il ne connait pas $data['point_relais_id'] dans le UPDATE de model\checkout\order.php... où dois je le déclarer ?
J'ai essayé dans controller\checkout\shipping.php et payment.php mais ça ne marche pas.

J'espère que la demande est assez précise .... d'avance merci beaucoup pour vos pistes.
Dernière édition par nico56 le 07 Nov 2011, 08:26, édité 2 fois.
opencart v1.4.9_Fr
site non hébergé (en construction)
pas de module installé
nico56
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 10
Inscription: 26 Oct 2011, 05:50

Re: Ajout d'un champ dans une commande

Messagepar LeorLindel » 26 Oct 2011, 11:07

Bonjour et bienvenue,

Dans un premier temps, je te demanderai de compléter ta signature [Lire la mienne], cela sera fait une fois pour toutes, puis de bien vouloir lire ce sujet, cela t'aidera surement à t'y retrouver dans les fichiers.

Nous aurons comme cela les bases d'une bonne compréhension.

Cordialement.
Image
1 - A lire avant de poster un sujet
2 - Politique sur la signature.

Quand le sujet est résolu, pensez à ajouter la petite coche verte Image dans le titre initial en éditant votre premier message et non dans votre dernière réponse.
Merci


Toutes les extensions commerciales (templates ou modules payants) ne peuvent pas faire l'objet d'ouverture de sujet, prière de bien vouloir s'adresser au concepteur en cas de problème ou demande de renseignements.

Seul, on avance plus vite, à plusieurs on avance plus loin.
Avatar de l’utilisateur
LeorLindel
Administrateur
Administrateur
 
Messages: 4227
Inscription: 19 Fév 2010, 13:44
Localisation: Lutéce

Re: Ajout d'un champ dans une commande

Messagepar nico56 » 26 Oct 2011, 22:20

Merci de ta réponse.
J'avais déjà lu en effet ce sujet qui m'a beaucoup aidé à décrypter l'organisation et à faire mes 1ères modifications. J'ai réussi à ajouter de nouveaux champs dans plusieurs autres pages du site et à remonter les données dans la base.
Dans le cas de la commande je ne retrouve justement pas le lien entre controler, model et view.
Le fichier order.php est présent dans model/checkout mais aucun fichier du même nom dans controler/checkout et view/checkout.
J'ai ajouté mon champ "point_relais_id" dans mon formulaire de commande via les fichiers shipping.php côté controler et view.
Si j'ai bien compris, les données de commandes sont envoyées dans la base de donnée au moment de la validation de l'onglet paiement (2ème onglet de commande) via le fichier model/checkout/order.php (grâce à la fonction "create" qui reçoit les données de commande en argument dans $data).
Par contre je ne vois pas où et comment intégrer mon champ "point_relais_id" dans l'argument $data ???
A partir d'où cette fonction "create" est elle appelée ?
J’espère être assez précis sur mon blocage ...
opencart v1.4.9_Fr
site non hébergé (en construction)
pas de module installé
nico56
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 10
Inscription: 26 Oct 2011, 05:50

Re: Ajout d'un champ dans une commande

Messagepar LeorLindel » 26 Oct 2011, 22:32

Les fichiers "order" se trouvent dans l'admin dans les répertoires "sale" et la définition des variables se fait par le répertoire "controller". Ceci est pour le back office, pour le front les fichiers "order" se trouvent dans les répertoires "account".
Image
1 - A lire avant de poster un sujet
2 - Politique sur la signature.

Quand le sujet est résolu, pensez à ajouter la petite coche verte Image dans le titre initial en éditant votre premier message et non dans votre dernière réponse.
Merci


Toutes les extensions commerciales (templates ou modules payants) ne peuvent pas faire l'objet d'ouverture de sujet, prière de bien vouloir s'adresser au concepteur en cas de problème ou demande de renseignements.

Seul, on avance plus vite, à plusieurs on avance plus loin.
Avatar de l’utilisateur
LeorLindel
Administrateur
Administrateur
 
Messages: 4227
Inscription: 19 Fév 2010, 13:44
Localisation: Lutéce

Re: Ajout d'un champ dans une commande

Messagepar nico56 » 27 Oct 2011, 07:11

Merci pour ton aide.
Il doit malheureusement y avoir des écarts entre les versions pour le front office.
Voici le contenu de mes répertoires controller/account et view/.../account :
account.php ; address.php ; create.php ; download.php ; edit.php ; forgotten.php ;
history.php ; invoice.php ; login.php ; logout.php ; newsletter.php ; password.php ;
success.php

Pas de fichier order.php ...
opencart v1.4.9_Fr
site non hébergé (en construction)
pas de module installé
nico56
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 10
Inscription: 26 Oct 2011, 05:50

Re: Ajout d'un champ dans une commande

Messagepar LeorLindel » 27 Oct 2011, 10:17

Pour une version 1.4.9 ce sont les répertoires model/account et model/checkout
Image
1 - A lire avant de poster un sujet
2 - Politique sur la signature.

Quand le sujet est résolu, pensez à ajouter la petite coche verte Image dans le titre initial en éditant votre premier message et non dans votre dernière réponse.
Merci


Toutes les extensions commerciales (templates ou modules payants) ne peuvent pas faire l'objet d'ouverture de sujet, prière de bien vouloir s'adresser au concepteur en cas de problème ou demande de renseignements.

Seul, on avance plus vite, à plusieurs on avance plus loin.
Avatar de l’utilisateur
LeorLindel
Administrateur
Administrateur
 
Messages: 4227
Inscription: 19 Fév 2010, 13:44
Localisation: Lutéce

Re: Ajout d'un champ dans une commande

Messagepar Marc » 28 Oct 2011, 11:10

Bonjour nico56,

Je suis moi aussi en train de chercher à comprendre comment fonctionne l'enregistrement des commandes.

Mon objectif est de pouvoir ajouter des informations spécifiques à un paiement donné dans le mail de confirmation envoyé au client. J'expose ce besoin dans autre post. Ce mail envoyé lors de la validation du paiement, ne reprend que les informations présentes dans la commande. C'est pourquoi j'étudie le fonctionnement des commandes.

Voici ce que j'en ai compris, en espérant que ça éclaircira ta lanterne :

Les actions de création (create), modification (update), lecture (getOrder) et confirmation de commande (confirm) sont bien effectués dans la partie model du MVC, dans : catalog/model/checkout/order.php

Il n'y a pas de contrôleur spécifique pour lancer ces actions car chacune de ces actions peut être lancé par différents modules d'OC : confirmation de commande (lors de l'accès au paiement), confirmation de paiement (fonction du module paiement utilisé), modification de commande sur l'admin, ...

Effectivement, la création d'une commande se fait bien lorsque le client confirme sa commande (écran obtenu après le choix du paiement). Cette page correspond aux fichiers suivants dans les différentes parties du MVC :
  • Controler : catalog/controller/checkout/confirm.php
  • View : catalog/view/.../checkout/confirm.tpl
  • Model : multiples fichiers dont catalog/model/checkout/order.php

La commande create est donc appelée dans le controler confirm.php (vers la ligne 204 sur ma version 1.4.8) :
Code: Tout sélectionner
$this->load->model('checkout/order');
$this->session->data['order_id'] = $this->model_checkout_order->create($data);


Dans ton cas, il te faut ajouter un index "point_relais_id" dans le tableau associatif $data.
Selon moi, ce paramètre devrait être fourni par ton module de livraison gérant tes points relais.
Je n'ai personnellement pas fait de tel module. Le fonctionnement standard fonctionne par le stockage d'un certain nombre d'adresses enregistrées par l'utilisateur. Puis il en sélectionne une lors de sa commande. Cette adresse sélectionnée est reprise lors de la création de la commande, dans le fichier confirm.php (vers la ligne 87 chez moi) :
Code: Tout sélectionner
$this->load->model('account/address');
if ($this->cart->hasShipping()) {
   $shipping_address_id = $this->session->data['shipping_address_id'];
   ...


Je pense que ton champ "point_relais_id" doit être inscrit en session par le module de livraison. Puis, avant la ligne
Code: Tout sélectionner
$shipping_address_id = $this->session->data['shipping_address_id'];

Mettre un test sur l'existence d'un point relais, par exemple :
Code: Tout sélectionner
if( isset( $this->session->data['point_relais_id'] ) )
{
   $data['point_relais_id'] = $this->session->data['point_relais_id'];
   .... // Inscrire l'adresse du point relais dans les champs adresses de la commandes par exemple, ainsi l'adresse du point relais s'affichera dans le mail, l'historique de la commande, le récap, etc sans avoir à modifier tous les templates....
}
else
{
   $shipping_address_id = $this->session->data['shipping_address_id'];
   -- ancien code gérant les adresses de l'utilisateur --
   ...
}


Voilà, ce n'est pas la solution toute prête... Mais si ça peut t'aider à avancer un peu...
Seul on va plus vite, ensemble on va plus loin...
Avatar de l’utilisateur
Marc
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 84
Inscription: 03 Aoû 2010, 14:08
Localisation: France - Tours

Re: Ajout d'un champ dans une commande

Messagepar nico56 » 07 Nov 2011, 08:19

Bonjour à tous et désolé de ne pas avoir répondu + tôt.

J'ai en effet résolu mon problème en ajout mon info point_relais_id dans $data du fichier catalog\controller\checkout\confirm.php.

Code: Tout sélectionner
$data['point_relais_id'] = $this->session->data['point_relais_id'];


Merci beaucoup Marc pour ta réponse très détaillée et très précise.
opencart v1.4.9_Fr
site non hébergé (en construction)
pas de module installé
nico56
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 10
Inscription: 26 Oct 2011, 05:50


Retourner vers Développement

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

cron