2012-07-31 3 views
7

Je souhaite ajouter un nouveau champ personnalisé à une page de paiement dans Magento. J'ai créé un module avec l'installateur:Comment ajouter un champ personnalisé pour commander dans Magento?

$installer = $this; 
$installer->startSetup(); 
$setup = new Mage_Eav_Model_Entity_Setup('core_setup'); 

$setup->addAttribute('order', 'deliverydate', array(
    'position'  => 1, 
    'input'   => 'text', 
    'type'   => 'varchar', 
    'label'   => 'Choose delivery date', 
    'visible'  => 1, 
    'required'  => 0, 
    'user_defined' => 1, 
    'global'  => 1, 
    'visible_on_front' => 1, 
)); 

$installer->endSetup(); 

Je peux voir avec phpmyadmin que le champ a été ajouté à mage_eav_attribute table. J'ai également ajouté cela à shipping-method.phtml:

<div class="form-list field"> 
    <label for="deliverydate"><?php echo $this->__('Choose delivery date') ?></label> 
     <div class="input-box"> 
     <input type="text" name="deliverydate" id="deliverydate" title="<?php echo $this->__('deliverydate') ?>" class="input-text" /> 
    </div> 
</div> 

Lorsque je passe une commande, le champ personnalisé ne sera pas enregistré. Comment le faire fonctionner? J'ai ajouté quelques champs personnalisés au client de cette façon et ils fonctionnent bien. Je peux également voir mes champs client personnalisés automatiquement sur admin/client mais ne peux pas voir mon champ de commande personnalisé dans admin/sales_order. Merci

* Edit:

Voici ce que je l'ai fait:

J'ajouté observer.php à companyName/module/modèle/observer.php

class Company_Module_Model_Observer 
{ 
    public function Deliverydate($observer){ 
     //get event data 
     $event = $observer->getEvent(); 

       //get order 
     $order = $event->getOrder(); 

     //set the country here 
     $order->setDeliverydate('11.11.2012'); 
     //echo "observer"; 
     } 
} 

Et est ici mon config.xml:

<?xml version="1.0"?> 
<config> 
    <modules> 
    <Company_Module> 
     <version>0.1.0</version> 
    </Company_Module> 
    </modules> 
    <global> 
    <resources> 
    <Company_Module_setup> 
    <setup> 
     <module>Company_Module</module> 
     <class>Company_Module_Model_Resource_Mysql4_Setup</class> 
    </setup> 
    </Company_Module_setup> 
</resources> 
     <events> 
      <checkout_type_onepage_save_order> 
       <observers> 
        <Company_Module_Model_Observer> 
         <type>singleton</type> 
         <class>Company_Module_Model_Observer</class> 
         <method>Deliverydate</method> 
        </Company_Module_Model_Observer> 
       </observers> 
      </checkout_type_onepage_save_order> 
     </events> 
    </global> 
</config> 

I pense qu'il y a un problème avec mon observateur. Je pense que ça ne déclenche pas.

* Edit:

Mon observateur travaille actuellement. Le nom de fichier doit être Observer.php, pas observer.php.

+0

pouvez-vous partager pleinement code.for moi .Je dois ajouter dans l'onglet revue de commande .. –

Répondre

13

Ajouter un observateur:

<events> 
    <checkout_type_onepage_save_order> 
     <observers> 
      <Savefield_observer> 
       <type>singleton</type> 
       <class>mymodule/observer</class> 
       <method>Savefield</method> 
      </Savefield_observer> 
     </observers> 
    </checkout_type_onepage_save_order> 
</events> 

Et dans le mymodule/saveField/modèle/obsever.php fichier ajouter ceci:

class Mymodule_Savefield_Model_Observer 
{ 
    public function Savefield($observer){ 
     //get event data 
     $event = $observer->getEvent(); 

     //get order 
     $order = $event->getOrder(); 

     //set the variable here 
     $order->setMyField($fieldVal); 
    } 
} 
+1

Je ne peux pas sembler le faire fonctionner. – Joonas

+0

J'ai ajouté plus d'informations à ma question. – Joonas

+0

Ça fonctionne maintenant et votre réponse m'a montré la bonne direction. Merci! – Joonas

0

Vous pouvez ajouter quelques observateurs d'événements pour capturer devis sauver , et charger des événements. Insérez le code suivant dans votre fichier de module config.xml à l'intérieur de la balise <global>. L'ajout de champs personnalisés à la page de paiement implique plusieurs étapes et nécessite l'édition de plusieurs fichiers. Pour obtenir un guide étape par étape complet, consultez le didacticiel suivant.

http://www.demagento.com/tutorial-magento-add-custom-field-to-order-checkout-page/

Questions connexes