0

フォームの送信後に連絡先フォームをホームページにリダイレクトしようとしています。モジュールをセットアップし、動作していることを確認できました。以下のコードでは、「Pre-dispatched」と「Index Action」のログ メッセージは表示されますが、「Post Action」は表示されず、完了時にホームページにリダイレクトされません。連絡先の電子メールは正しく受け取ります。最初の 2 つの関数が正しく機能し、postAction() が機能しない理由を誰か教えてもらえますか?

トラブルシューティングの目的で、元のコントローラーからコントローラーにすべてのコードをコピーしました。ログメッセージの追加と下部のリダイレクトを除いて、すべてがデフォルトです。

class MyCompany_Contacts_IndexController extends Mage_Contacts_IndexController
{   
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();
    Mage::log('Pre-dispatched');

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

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

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

public function postAction()
{
    parent::postAction();
    Mage::log('Post Action.');
    $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('');
    }
}

}

config.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <modules>
    <MyCompany_Contacts>
        <version>0.0.1</version>
    </MyCompany_Contacts>
  </modules>

  <frontend>
    <routers>
      <contacts>
        <args>
          <modules>
              <MyCompany_Contacts before="Mage_Contacts">MyCompany_Contacts</MyCompany_Contacts>
          </modules>
        </args>
      </contacts>
    </routers>
  </frontend>
</config>
4

2 に答える 2

1

問題は、parent::postAction();カスタムpostAction内の部分にあります。現在行っているのは、フォームを/postに投稿することです。最終的にはpostActionになりますが、その後、parent :: postAction()を介して直接ルーティングされます。

したがってMage_Contacts_IndexController::postAction()、親メソッドには、電子メールを送信するロジックも含まれています。したがって、あなたはそれを受け取っています。問題は、親メソッドの最後にまだリダイレクトがあること$this->_redirect('*/*/');です。これにより、コードが `Mage :: log('Post Action。')および残りのカスタムコードに到達するのを防ぎます。

解決策:を削除するparent::postAction()と、メソッド内のカスタムコードpostActionが実行され、最終的にホームページへの独自のリダイレクトが実行されます。

于 2012-08-14T17:22:08.020 に答える
0

私はこれを理解したと思います。投稿データは送信される前にAkismetによって分析されるので、デフォルトのMage_Contactsがすでに拡張されており、最初にそのモジュールを通過する可能性があることを思い出しました。AkismetコントローラーのpostAction()にログを追加し、それを検証しました。私を正しい軌道に乗せてくれてありがとう。

于 2012-08-14T18:10:12.330 に答える