2010-06-16 9 views
6

Come posso recuperare un messaggio di successo in Magento?Come posso recuperare un messaggio di successo in Magento?

Array 
(
    [core] => Array 
     (
      [_session_validator_data] => Array 
       (
        [remote_addr] => 192.168.151.102 
        [http_via] => 
        [http_x_forwarded_for] => 
        [http_user_agent] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4 
       ) 

      [session_hosts] => Array 
       (
        [technova2] => 1 
       ) 

      [messages] => Mage_Core_Model_Message_Collection Object 
       (
        [_messages:protected] => Array 
         (
         ) 

        [_lastAddedMessage:protected] => Mage_Core_Model_Message_Success Object 
         (
          [_type:protected] => success 
          [_code:protected] => Your review has been accepted for moderation 
          [_class:protected] => 
          [_method:protected] => 
          [_identifier:protected] => 
          [_isSticky:protected] => 
         ) 

       ) 

      [just_voted_poll] => 
      [visitor_data] => Array 
       (
        [] => 
        [server_addr] => -1062692990 
        [remote_addr] => -1062693018 
        [http_secure] => 
        [http_host] => technova2 
        [http_user_agent] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4 
        [http_accept_language] => en-US,en;q=0.8 
        [http_accept_charset] => ISO-8859-1,utf-8;q=0.7,*;q=0.3 
        [request_uri] => /~rahuls/sextoys/index.php/review/product/list/id/169/ 
        [session_id] => 21bq2vtkup5m1gtghknlu1tit42c6dup 
        [http_referer] => http://technova2/~rahuls/sextoys/index.php/review/product/list/id/169/ 
        [first_visit_at] => 2010-06-16 05:49:56 
        [is_new_visitor] => 
        [last_visit_at] => 2010-06-16 06:00:00 
        [visitor_id] => 935 
        [last_url_id] => 23558 
       ) 

      [last_url] => http://technova2/~rahuls/sextoys/index.php/review/product/list/id/169/ 
     )  
) 

Dopo aver pubblicato la recensione, desidero visualizzare il messaggio: "La tua opinione è stata accettata con moderazione". Appare nell'array $ _SESSION, ma come posso recuperarlo? Per favore aiuto. Grazie in anticipo.

+0

La prego di segnare questa domanda come risolto scegliendo una risposta come la soluzione? Grazie! – Nitroware

risposta

3

Poiché il messaggio è archiviato nell'array secondario core, verrà utilizzato il blocco dei messaggi principale di Magento per recuperarlo. Nel layout, si dovrebbe essere in grado di vedere questa linea (in page.xml):

<block type="core/messages" name="global_messages" as="global_messages"/> 

Questo significa che la pagina chiama il blocco dei messaggi e recupera i messaggi da quella fila ordinata di anime. Poi, nel tuo layout, si dovrebbe essere in grado di vedere la linea che richiama effettivamente l'output:

<?php echo $this->getChildHtml('global_messages') ?> 

Questo Echos in realtà i blocchi di segnalazione normali per eventuali messaggi nella sessione. . Se non riesci a trovare quei blocchi, aggiungerli in Se avete bisogno di ottenere il messaggio in un contesto diverso (puo 'interferire con altre operazioni del sito), provate questo in un file phtml:

<?php print $this->getLayout()->createBlock('core/messages')->toHtml(); ?> 

Speranza che aiuta!

Grazie, Joe

2

ho trovato il blocco di seguito in page.xml

ho usato il seguito due linee nel mio codice per il messaggio di successo, ma senza successo.

getChildHtml ('global_messages')?> getLayout() -> createBlock ('core/messages') -> toHtml(); ?>
5

Sembra che quello che stai richiedendo esiste già in Magento. Una volta che l'utente ha pubblicato una recensione su un prodotto, per impostazione predefinita viene visualizzato il messaggio "La tua recensione è stata accettata per moderazione" come indicato in app/code/core/Mage/Review/controller/ProductController.php alla riga 188 (Magento 1.4. 0.1)

in ogni caso, se si desidera visualizzare i messaggi (preavviso, buon fine, errore, di avvertimento) basta usare, ad esempio in caso di un messaggio di successo:

<?php 
$message = $this->__('Your success message here'); 
Mage::getSingleton('core/session')->addSuccess($message); 
?> 

il messaggio sarà negozio nella sessione e appaiono automaticamente sul frontend fintanto che il file template della pagina ha il codice $ this-> getMessagesBlock() -> getGroupedHtml() che è il caso in tutte le pagine phtml predefinite fornite con Magento. Quindi non devi preoccuparti di niente.

Naturalmente, nell'esempio di cui sopra, è possibile modificare

addSuccess($message) 

da addError($message) o addWarning($message) o addNotice($message) a seconda del tipo di informazioni il tuo desidera visualizzare.

6
$messages = Mage::getSingleton('core/session')->getMessages(true); 
foreach($messages->getItems() as $message) 
{ 
    // Do something 
    $message->getText(); 
} 
+0

non dimenticare di cambiare il modello in base alle tue esigenze: 'Mage :: getSingleton ('cliente/sessione')' – tecmec

9

È una combinazione di tutte le vostre risposte.Questo funziona per me da qualsiasi blocco:

//A Success Message 
    Mage::getSingleton('checkout/session')->addSuccess("Your cart has been updated successfully!"); 

    //A Error Message 
    Mage::getSingleton('checkout/session')->addError("Your cart has been updated successfully!"); 

    //A Info Message (See link below) 
    Mage::getSingleton('checkout/session')->addNotice("This is just a FYI message..."); 

    //These two lines are required to get it to work 
    session_write_close(); //THIS LINE IS VERY IMPORTANT! 
    $this->_redirect('checkout/cart'); 

di credito a causa di:

http://www.magentocommerce.com/boards/viewthread/40324/ (dove ho postato la risposta)

e

http://www.deepcodeonline.com/blog/magento/how-to-display-error-success-and-notice-messages-in-magento/

9

Il codice seguente lavora per me:

  1. messaggio impostato il controller:

    Mage::getSingleton('customer/session') 
        ->addSuccess(Mage::helper('mymodule')->__('Data saved.')); 
    
  2. messaggio init nel controller in cui si desidera recuperare il messaggio :

    $this->loadLayout(); 
    $this->_initLayoutMessages('customer/session'); 
    $this->_initLayoutMessages('catalog/session'); 
    $this->renderLayout();` 
    
  3. recuperare il messaggio nel vostro template (.phtml) file:

    echo $this->getMessagesBlock()->getGroupedHtml(); 
    
+0

ho dovuto usare $ this-> initLayoutMessages ('checkout/session'); nel mio controller, mentre stavo cercando di estrarre il valore predefinito "X è stato aggiunto al tuo carrello." Messaggio. in pratica, trova dove viene archiviato il tuo messaggio e inseriscilo nella chiamata initLayoutMessages. – jay

+0

questa è la spiegazione più succinta che ho trovato su come funzionano i messaggi Magento. Per altri che lo trovano, altri tipi di mesage comuni includono checkout/session e core/session. Le estensioni tendono a collocare i messaggi in posizioni casuali, quindi è talvolta più semplice inizializzare tutti i messaggi, quindi estrarli uno alla volta fino a quando non si ottengono i messaggi desiderati – Ucinorn

3

si supponga di voler recuperare un messaggio di successo da una sessione di catalogo:

Poi si doveva recuperare i messaggi da sessione come segue:

$messages = Mage::getSingleton('catalog/session')->getMessages(false); 

Mettere false non cancella il messaggio per la raccolta sessione. Se si desidera cancellare tutti i messaggi dopo aver recuperato utilizzare invece true.

Il $messages è di tipo Mage_Core_Model_Message_Collection. È possibile recuperare il tipo di bisogno di messaggi da esso da:

$successMessages = $messages->getItemsByType(Mage_Core_Model_Message::SUCCESS); 

è possibile scorrere i messaggi di:

foreach ($successMessages as $message) { 
    //do whatever you like 
} 
+0

Works. Assicurati di ottenere l'oggetto di sessione corretto, avevo bisogno di '('cliente/sessione')'. – Justin

Problemi correlati