2012-03-23 12 views
0

カスタムMagentoフォームを作成するにはどうすればよいですか?私はコンタクトフォームに言及している拡張子やサンプルは必要ありません。私は、Magentoが修正されたZendフォームハンドラでどのように動作するのかを理解する必要があることを意味します。完全なカスタムフォームを作成する方法

そこで質問です:

誰がコントローラで作成されたMagentoのためのコード例がありますか?

答えて

0
<?php 

class Mage_Contacts_IndexController extends Mage_Core_Controller_Front_Action 
{ 

    const XML_PATH_EMAIL_RECIPIENT = 'contacts/email/recipient_email'; 
    const XML_PATH_EMAIL_SENDER  = 'contacts/email/sender_email_identity'; 
    const XML_PATH_EMAIL_TEMPLATE = 'contacts/email/email_template'; 
    const XML_PATH_ENABLED   = 'contacts/contacts/enabled'; 

    public function preDispatch() 
    { 
     parent::preDispatch(); 

     if(!Mage::getStoreConfigFlag(self::XML_PATH_ENABLED)) { 
      $this->norouteAction(); 
     } 
    } 

    public function indexAction() 
    { 
     $this->loadLayout(); 
     $this->getLayout()->getBlock('contactForm') 
      ->setFormAction(Mage::getUrl('*/*/post')); 

     $this->_initLayoutMessages('customer/session'); 
     $this->_initLayoutMessages('catalog/session'); 
     $this->renderLayout(); 
    } 

    public function postAction() 
    { 
     $post = $this->getRequest()->getPost(); 
     if ($post) { 
      $translate = Mage::getSingleton('core/translate'); 
      /* @var $translate Mage_Core_Model_Translate */ 
      $translate->setTranslateInline(false); 
      try { 
       $postObject = new Varien_Object(); 
       $postObject->setData($post); 

       $error = false; 

       if (!Zend_Validate::is(trim($post['name']) , 'NotEmpty')) { 
        $error = true; 
       } 

       if (!Zend_Validate::is(trim($post['comment']) , 'NotEmpty')) { 
        $error = true; 
       } 

       if (!Zend_Validate::is(trim($post['email']), 'EmailAddress')) { 
        $error = true; 
       } 

       if (Zend_Validate::is(trim($post['hideit']), 'NotEmpty')) { 
        $error = true; 
       } 

       if ($error) { 
        throw new Exception(); 
       } 
       $mailTemplate = Mage::getModel('core/email_template'); 
       /* @var $mailTemplate Mage_Core_Model_Email_Template */ 
       $mailTemplate->setDesignConfig(array('area' => 'frontend')) 
        ->setReplyTo($post['email']) 
        ->sendTransactional(
         Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE), 
         Mage::getStoreConfig(self::XML_PATH_EMAIL_SENDER), 
         Mage::getStoreConfig(self::XML_PATH_EMAIL_RECIPIENT), 
         null, 
         array('data' => $postObject) 
        ); 

       if (!$mailTemplate->getSentSuccess()) { 
        throw new Exception(); 
       } 

       $translate->setTranslateInline(true); 

       Mage::getSingleton('customer/session')->addSuccess(Mage::helper('contacts')->__('Your inquiry was submitted and will be responded to as soon as possible. Thank you for contacting us.')); 
       $this->_redirect('*/*/'); 

       return; 
      } catch (Exception $e) { 
       $translate->setTranslateInline(true); 

       Mage::getSingleton('customer/session')->addError(Mage::helper('contacts')->__('Unable to submit your request. Please, try again later')); 
       $this->_redirect('*/*/'); 
       return; 
      } 

     } else { 
      $this->_redirect('*/*/'); 
     } 
    } 

} 
関連する問題