перенаправить на определенную страницу после отправки контактной формы в Magento - PullRequest
8 голосов
/ 23 июля 2010

как я могу перенаправить на определенную страницу после того, как пользователь отправит контактную форму в Magento?form.phtml имеет

<form action="<?php echo Mage::getUrl(); ?>contacts/index/post/" id="contactForm" method="post">

, но я не уверен, где найти php-файл, который контролирует отправку электронной почты и перенаправляет.есть идеи?спасибо

РЕДАКТИРОВАТЬ: нашел это в IndexController.php под app> code> core> Mage> Contacts> controller

$this->_redirect('*/*/');

Ответы [ 8 ]

14 голосов
/ 18 апреля 2011

Я знаю, что он ответил, просто делюсь своим опытом.Я сделал контактную форму через страницу CMS.Форма работала нормально.Но после отправки он перенаправит на контактную форму magento.Чтобы перенаправить его обратно на страницу CMS, мне пришлось поместить

$this->_redirect('contactus');

, где contactus - идентификатор URL.

Также после перенаправления сообщение об успехе / ошибке не будет отображаться.Для этого я должен был внести изменения здесь.

Перейти к /app/design/frontend/default/yourstore/template/contacts/form.phtml

<div id="messages_product_view">
<?php echo $this->getMessagesBlock()->getGroupedHtml() ?>
</div>

с:

<?php Mage::app()->getLayout()->getMessagesBlock()->setMessages(Mage::getSingleton('customer/session')->getMessages(true)); ?> 

Я получил решение от здесь

4 голосов
/ 30 марта 2016

Для следующего человека

  1. зайдите в шелковое программное обеспечение и создайте новый модуль, используя их создатель модуля http://www.silksoftware.com/magento-module-creator/
  2. Введите название вашей компании и название модуля
  3. Затем измените «Нужно переписать класс Magento» на Да
  4. нажмите «Добавить класс», имя класса будет Mage_Contacts_IndexController
  5. Это создаст модуль со всем необходимым
  6. Добавьте метод postAction от основного контроллера к вашему вновь созданному контроллеру
  7. Затем измените перенаправление на redirectReferer () в конце метода postAction

Создатель модуля создаст все необходимое для перегрузки контроллера контактов и сэкономит ваше время на устранение неполадок. Кроме того, избавьте себя от необходимости редактировать файлы ядра напрямую.

НЕ РЕДАКТИРОВАТЬ ОСНОВНЫЕ ФАЙЛЫ!

3 голосов
/ 07 января 2013

Может также просто создать пользовательское перенаправление URL.

  • идентификационный путь - контакты / индекс
  • путь запроса - контакты / индекс
  • целевой путь - 'URL перенаправления'
2 голосов
/ 13 января 2015

Во избежание перезаписи основных файлов и нарушения совместимости обновлений, я перегружал контроллер, как описано здесь: Учебник. Перегрузка контроллера

<frontend>
    <routers>
        <contacts>
            <args>
                <modules>
                    <My_Module_Contacts before="Mage_Contacts">My_Module_Contacts</My_Module_Contacts>
                </modules>
            </args>
        </contacts>
    </routers>
</frontend>

И переписали $this->_redirect('*/*/') на $this->_redirectReferer('contacts/index'), чтобы вы были перенаправлены на предыдущую страницу, и, если ни один реферер не был установлен, на / contacts / index как запасной вариант.

Также я изменил form.phtml с

<div id="messages_product_view">
  <?php echo $this->getMessagesBlock()->getGroupedHtml(); ?>
</div>

до

<div id="messages_product_view">
  <?php Mage::app()->getLayout()->getMessagesBlock()->setMessages(Mage::getSingleton('customer/session')->getMessages(true)); ?>
  <?php echo $this->getMessagesBlock()->getGroupedHtml(); ?>
</div>

для отображения сообщений об ошибках.

1 голос
/ 10 мая 2018

Судя по моему опыту, я изменил сообщение об успешном завершении после отправки страницы контактов.

  1. Я использовал приведенный ниже код на своей статической странице

    {{block type='core/template' name='contactForm' form_action='mywebsiteurl/contacts/index/post' template='contacts/form.phtml'}}
    
  2. Я перезаписываю действие контроллера по умолчанию в моем файле config.xml моего пользовательского модуля.

            <routers>
                <airhotels>
                    <args>
                        <modules>
                            <apptha_airhotels before="Mage_Contacts">Apptha_Airhotels</apptha_airhotels>
                        </modules>
                    </args>
                </airhotels>
            </routers>
    
  3. А в своем действии контроллера (Apptha_Airhotels_ContactsController) (postAction) я использовалмое пользовательское сообщение и перенаправление на пользовательский URL.

    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($formUrl); 
    

Этот URL-адрес формы определяется как: $ formUrl = basename ($ this -> _ getRefererUrl ());

1 голос
/ 23 июля 2010

IndexController.php в приложении> код> ядро> Маг> Контакты> контроллеры

изменено

$this->_redirect('*/*/');

до

$this->_redirect('');

и теперь он перенаправляет на домашнюю страницу.

0 голосов
/ 29 марта 2019

Довольно грязный, но простой подход - перенаправить /contact/index на /contact после отправки формы.

Допустим, вы расширяете контакт Magento в своем шаблоне, как здесь:

enter image description here

Добавить файл Magento_Contact/templates/form-submitted.phtml со следующим содержимым:

<?php
header('Location: /contact');
exit;

Затем измените Magento_Contact/layout/contact_index_index.html, чтобы использовать этот шаблон, как показано ниже:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
        <title>Contact</title>
    </head>
    <body>
        <referenceContainer name="content">
            <block class="Magento\Contact\Block\ContactForm" name="contactForm" template="Magento_Contact::form-submitted.phtml">
                <container name="form.additional.info" label="Form Additional Info"/>
            </block>
        </referenceContainer>
    </body>
</page>

Все работает, включая флеш-сообщение.

Вуаля!

0 голосов
/ 25 ноября 2015

Комбинированное решение дано в обоих ответах @Simon и других

  • изменить $this->_redirect('*/*/') везде app/code/core/Mage/Contacts/controllers/IndexController.php на $this->_redirectReferer();
  • и обновите форму phtml, включив сообщение об ошибке / успехе, отредактировав app/design/frontend/base/default/template/contacts/form.phtml и добавив строку <?php Mage::app()->getLayout()->getMessagesBlock()->setMessages(Mage::getSingleton('customer/session')->getMessages(true)); ?> в messages_product_view

Лучше всего скопировать файлы в 'local'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...