2010-07-23 17 views
8

come posso reindirizzare a una determinata pagina dopo che l'utente invia il modulo di contatto in Magento? form.phtml hareindirizzare a una determinata pagina dopo che il modulo di contatto è stato inviato in Magento

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

ma non sono sicuro dove trovare il file php che controlla l'invio di email e reindirizzamenti. qualche idea? grazie

EDIT: trovato questo IndexController.php sotto app>> codice di base> Mage> Contatti> controller

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

risposta

2

IndexController.php sotto app>> codice di base> Mage> Contatti> controller

cambiato

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

a

$this->_redirect(''); 

e si reindirizza alla pagina iniziale ora.

+11

Per quelli di voi che visualizzano questo, si prega di non apportare modifiche al nucleo! NON modificare questo file. – sanbornm

+5

Cattiva pratica. Non modificare i file core. –

+0

Allora cosa suggerisci di fare? Sto usando Contattaci in una pagina CMS come blocco. –

14

So che ha risposto, condividendo solo la mia esperienza. Avevo fatto un modulo di contatto attraverso una pagina CMS. Il modulo ha funzionato bene. Ma dopo averlo inviato, reindirizza al modulo di contatto Magento. Per reindirizzare indietro alla pagina CMS, ho dovuto mettere

$this->_redirect('contactus'); 

dove contactus è l'identificativo URL.

Anche dopo il reindirizzamento, il messaggio di errore/riuscita non viene visualizzato. Per questo ho dovuto apportare modifiche qui.

Vai /app/design/frontend/default/yourstore/template/contacts/form.phtml

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

con:

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

ho ottenuto la soluzione da here

+0

grazie per aver condiviso – pixeltocode

+0

"anch'io! Grazie!" –

+1

@noobcode Dove hai messo la riga '$ this -> _ redirect ('contactus');'? Grazie. – shnozolla

3

Potrebbe anche solo creare un reindirizzamento URL personalizzato.

percorso

id - contatti/index richiesta percorso - contatti/index percorso target - 'URL di reindirizzamento'

2

Per evitare di sovrascrivere file di base e la compatibilità aggiornamento danno, ho sovraccarico del controllo come descritto qui: Tutorial: Overload a controller

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

e riscritto $this->_redirect('*/*/')-$this->_redirectReferer('contacts/index'), in modo da ottenere reindirizzati alla pagina precedente, e se non è stato impostato referer, a/contatti/indice come un ripiego.

Inoltre ho cambiato forma.phtml da

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

a

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

per visualizzare i messaggi di errore.

-1

La soluzione combinata è dato in entrambe le risposte da @Simon e gli altri

  • cambiamento $this->_redirect('*/*/') ovunque in app/code/core/Mage/Contacts/controllers/IndexController.php-$this->_redirectReferer();
  • e aggiornare il modulo phtml per includere il messaggio di errore/il successo modificando app/design/frontend/base/default/template/contacts/form.phtml e aggiungendo la riga <?php Mage::app()->getLayout()->getMessagesBlock()->setMessages(Mage::getSingleton('customer/session')->getMessages(true)); ?> in messages_product_view

migliore per copiare i file di 'locale'

+0

Copiare i file su 'local' è meglio che modificare direttamente in' core', ma non è ancora la procedura migliore, ovvero riscrivere il file del controller in un modulo personalizzato e apportare le modifiche lì.In questo modo, quando è il momento di aggiornare, dovrai solo confrontare 'postAction' con la versione aggiornata, invece dell'intero file Controller. – pcronin

4

per la prossima persona

  1. andare al software seta e creare un nuovo modulo utilizzando il loro modulo creatore http://www.silksoftware.com/magento-module-creator/
  2. Inserire il nome dell'azienda e il nome del modulo
  3. Poi cambiare "Hai bisogno di riscrittura Magento Class" per Sì
  4. fare clic su "Aggiungi classe" il nome della classe sarà Mage_Contacts_IndexController
  5. Ciò creerà un modulo con tutto ciò che è necessario
  6. Aggiungere il metodo postAction dal controller Nucleo per il controller di nuova creazione
  7. quindi modificare il reindirizzamento a redirectReferer() alla fine del metodo postAction

Il creatore del modulo creerà tutto il necessario per sovraccaricare il Contatti Controller e risparmiare tempo dalla risoluzione dei problemi di battitura. Inoltre, risparmiatevi la fatica di modificare direttamente i file principali.

NON MODIFICARE I FILE DEL CORE!

Problemi correlati