Développer avec RBS Change : [Résolu] Envoi d'informations supplimentaires - Module Ordre

  • 77790.1

    24/04/2013 15:58


    mamous
    Rang : Expert
    Bonjour,

    Je viens d'ajouter un block d'un module spécifique dans la page panier,composé d'un checkbox et un textarea, je voulais savoir s'il est possible que j'envoie la valeur de ces deux champs la avec les infos qui sont ajouter dans la table m_order_doc_order de la base de donnée lors de la confirmation de la commande.

    - Envoyer 0 ou 1 pour l'état du checkbox
    - Envoyer le contenu du textarea.

    Sachant que j'ai prévu d'ajouter 2 champs dans la table ordre (deux attributs) pour y stocker l'info.

    Merci

    Édité par mamous 24/04/2013 17:41


    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 77790.2 en réponse à 77790.1 écrit par mamous

    24/04/2013 17:43


    Jean-Michel
    Titre : Community Manager
    Rang : Expert
    Avez vous besoin de faire des requêtes (query) sur ces champs? Si ce n'est pas le cas, le plus simple serait d'ajouter des attributs sur votre commande, un peu comme on procède dans le tuto d'ajout d'un champ commentaire sur la commande.

    Pour une meilleure réponse, pensez à indiquer la version sur laquelle vous rencontrez des difficultés, ainsi que son type (CMS ou eCommerce core).
    Pour tout problème d'installation indiquez le nom de l'hébergeur et s'il s'agit d'un serveur mutualisé ou dédié.
  • 77790.3 en réponse à 77790.2 écrit par Jean-Michel

    25/04/2013 12:39


    mamous
    Rang : Expert
    Bonjour Jean-Michel,

    J'ai suivi le tuto d'ajout du champs de commentaire, j'ai injecter le template de Cart au lieu de StdShipping et tout fonctionne nickel sans que j'ai aucun erreur lors du processus de la commande, dans la page de StdBillingStep-Payment j'ai eu une erreur m'indiquant [/nobb]Call to undefined method order_CartInfo::getProperty() in /.../template/tpl_1_1_8987e55a166b9ecd1d2c3da016b0e2904.php on line 289 J'ai pas su ce que sa veut dire que la méthode getProperty() n'est pas définie dans le Cartinfo??? Et en second lieu, mon besoin est d'ajouter à la fin les infos de ces champs là au niveau de la table m_order_doc_order dans deux nouvelles colonnes qui porterons les noms de ces attributs là.

    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 77790.4 en réponse à 77790.3 écrit par mamous

    25/04/2013 12:42


    mamous
    Rang : Expert
    Re,
    A ce qu'il parait le getProperty n'existe pas dans la v3.5.2 :|
    Que dois je faire???

    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 77790.5 en réponse à 77790.4 écrit par mamous

    25/04/2013 13:20


    mamous
    Rang : Expert
    Je crois que le problème est même au niveau du
    $cartInfo->setProperties('xxx_comments', $request->getParameter('xxx_comments'));
    Parce que j'ai essayé de faire un
    var_dump($request->getParameter('xxx_comments'));
    exit;
    dans le executeOrder (le submit du form du validation du panier) et il me retourne un NULL même j'ai essayé de faire un
    $cartInfo = order_CartService::getInstance()->getDocumentInstanceFromSession();
    var_dump($cartInfo->getProperties('xxx_comments'));
    exit;
    donc comme si le parametre du comment ne passe pas dans le processus de commande et c'est normal que j'aurais rien afficher dans la recup de la commande.
    Any idea???

    Édité par mamous 25/04/2013 13:24


    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 77790.6 en réponse à 77790.5 écrit par mamous

    25/04/2013 15:37


    Jean-Michel
    Titre : Community Manager
    Rang : Expert
    Vous n'avez pas répondu à la première question ; avez vous besoin d'utiliser ces champs pour faire des requêtes? (au sens $query = DocumentService::getInstance->createQuery()).

    Édité par Jean-Michel 25/04/2013 15:37


    Pour une meilleure réponse, pensez à indiquer la version sur laquelle vous rencontrez des difficultés, ainsi que son type (CMS ou eCommerce core).
    Pour tout problème d'installation indiquez le nom de l'hébergeur et s'il s'agit d'un serveur mutualisé ou dédié.
  • 77790.7 en réponse à 77790.6 écrit par Jean-Michel

    25/04/2013 15:48


    mamous
    Rang : Expert
    Je suis désolé j'ai pas fait attention, oui normalement dans l'action du block je fais deja l'appel a cette méthode là pour récupérer un document:
    /**
    	   * Ceci va récupérer toutes les instances publiées de monDoc de monModule
    	   * @return <monModule_persistendocument_mondoc> array
    	   */
    	  public function getXxxDocuments()
    	  {
    		$query = xxx_xxxService::getinstance()->createQuery();
    		$query->add(Restrictions::published());
    		
    		return $query->find();
    	  }
    Après dans la méthode execute je fais un
    $request->setAttribute('xxx', $monDoc);

    Édité par mamous 25/04/2013 15:49


    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 77790.8 en réponse à 77790.7 écrit par mamous

    27/04/2013 12:54


    Mathias
    Rang : Expert
    Bonjour Mamous,

    Je pars du principe que tu n'as pas besoin de faire de requête sur ce type de champs (ça te donnera déjà une bonne idée de ce qu'il faut faire, on verra plus tard si tu en as besoin ou pas).

    [pour info, l'objet createQuery est disponible sur TOUS les documents et te permet de faire des requêtes en BDD pour récupérer des instance du document souhaité, donc ce n'est pas parce que tu l'utilise sur ton document spé que tu l'utilise obligatoirement sur le document order ;)]

    Pour que tes champs spécifiques soient enregistrés au moment où tu valides le panier, il faut que ces champs soient au sein du formulaire HTML qui est soumis via le input type=submit associé.

    Dans le cas du panier, c'est à la ligne 242 du template Order-Block-Cart-Success.all.all.html :
    <form change:form="">
    			<fieldset tal:define="generalSalesConditionsURL tagurl:'ctx_order_cgv'">
    				<legend class="h-2">${trans:m.order.frontoffice.orderProcess.do-order,ucf}</legend>
    				<tal:block tal:condition="not: configuration/getShowAcceptationCheckbox">
    					<p class="normal">${trans:m.order.fo.general-sales-conditions-help,ucf,url=generalSalesConditionsURL}</p>
    				</tal:block>
    				<tal:block tal:condition="configuration/getShowAcceptationCheckbox">
    					<ul change:errors="relKey cgv"></ul>
    					<p class="normal">${trans:m.order.fo.general-sales-conditions-checkbox-help,ucf,url=generalSalesConditionsURL}</p>		
    					<ol>
    						<li><label change:label="" name="cgv_1" required="true" labeli18n="m.order.frontoffice.orderprocess.cgv"></label> 
    							<input change:checkboxinput="withcolon false" name="cgv" value="true" labeli18n="m.order.frontoffice.orderprocess.cgv-agree" />
    						</li>
    					</ol>
    				</tal:block>
    				<p class="buttons">
    					<a class="link" change:link="module order; action ContinueShopping; cmpref cart/getShopId">${trans:m.order.frontoffice.continue-shopping,ucf}</a>
    					<input change:submit="name Order" class="button primary" labeli18n="m.order.frontoffice.order-button" />
    				</p>
    			</fieldset>			
    		</form>

    Je présume que le HTML de ta vue SUCCESS de ton block spé est du genre (ni plus, ni moins) :
    <input type="Boolean" value="XXX" />
    <textarea>XXX</textarea>


    Donc désormais, il faut faire en sorte que ton block spécifique, soit injecté dans le bout de template du panier affiché plus haut. Pour cela, il existe l'inclusion de block qui te permet d'inclure un block dans un autre.
    Ca donnera quelquechose comme :
    <div change:block="" module="mymodule" name="myblock" />


    A partir de là, tes champs spécifiques sont passés dans la requête au moment où l'utilisateur valide son panier, et il te suffit de suivre le tutorial sur comment ajouter un champs sur une commande.
    Attention, ici on démarre l'ajout d'information dès le panier, contrairement au tutorial, qui démarre à l'étape des adresses.
    Il te faudra donc a priori, injecter le block d'identification pour enregistrer tes paramètres via :
    $cartInfo = order_CartService::getInstance()->getDocumentInstanceFromSession();
    $cartInfo->setProperties('xxx_comments', $request->getParameter('xxx_comments'));

    Édité par Mathias 27/04/2013 12:57


    Développe sous linux Ubuntu 12.04 LTS Desktop
    Projet ecommerce core 3.6.7
  • 77790.9 en réponse à 77790.8 écrit par Mathias

    29/04/2013 11:35


    mamous
    Rang : Expert
    Merci pour votre réponse,

    Déjà c'est presque comme sa que j'ai procédé et j'ai pu récupèrer les champs dans la page de résumé de commande et j'ai réussi à les avoirs dans la base :)

    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
 
Merci de prendre connaissance et de respecter les règles des forums.
 
1471 membres
Aucun membre connecté