2010-06-16 12 views
6

¿Cómo recupero un mensaje de éxito en Magento?¿Cómo recupero un mensaje de éxito en 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/ 
     )  
) 

Después de publicar la reseña, quiero mostrar el mensaje: "Tu opinión ha sido aceptada para moderación". Aparece en el array $ _SESSION, pero ¿cómo lo obtengo? Por favor ayuda. Gracias por adelantado.

+0

Podría por favor marque esta pregunta tan resuelto por la elección de una respuesta como la solución? ¡Gracias! – Nitroware

Respuesta

3

Dado que el mensaje se almacena en el subarreglo core, usará el bloque de mensajes del núcleo de Magento para recuperarlo. En su diseño, debe ser capaz de ver esta línea (en page.xml):

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

Esto significa que la página llama al bloque de mensaje y recupera los mensajes de esa matriz núcleo. Luego, en sus diseños, usted debería ser capaz de ver la línea que realmente invoca la salida:

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

En realidad, esto Echos los bloques de mensajes normales para cualquier mensaje en la sesión. . Si no puede encontrar esos bloques, añadirlos en si usted necesita para obtener el mensaje en un contexto diferente (esto puede interferir con otra operación de las instalaciones), probar esto en un archivo phtml:

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

Espero que ayude!

Gracias, Joe

2

he encontrado el bloque más adelante en page.xml

utilicé el siguiente dos líneas en mi código de mensaje de éxito, pero sin éxito.

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

Parece que lo que está solicitando ya existe en Magento. Una vez que el usuario ha publicado una reseña sobre un producto, el mensaje "Su revisión ha sido aceptada para moderación" aparece de manera predeterminada como se indica en la aplicación/código/núcleo/Mage/Review/controllers/ProductController.php en la línea 188 (Magento 1.4. 0.1)

de todos modos, si desea mostrar los mensajes (aviso, el éxito, el error, de advertencia) sólo tiene que utilizar, por ejemplo, en caso de un mensaje de éxito:

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

el mensaje se tienda en la sesión y aparecerán automáticamente en la interfaz siempre que el archivo de plantilla de la página tenga el código $ this-> getMessagesBlock() -> getGroupedHtml(), que es el caso en todas las páginas phtml predeterminadas que se envían con Magento. Entonces realmente no tienes que molestarte.

Por supuesto, en el ejemplo anterior, puede cambiar

addSuccess($message) 

por addError($message) o addWarning($message) o addNotice($message) dependiendo del tipo de información que su desea mostrar.

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

no se olvide de cambiar el modelo a sus necesidades: 'Mage :: getSingleton ('customer/session')' – tecmec

9

Es una combinación de todas sus respuestas.Esto funciona para mí desde casi cualquier bloque:

//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'); 

de crédito debido a:

http://www.magentocommerce.com/boards/viewthread/40324/ (¿Dónde he publicado la respuesta)

y

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

9

El siguiente código funciona para mí:

  1. un mensaje para establecer el controlador:

    Mage::getSingleton('customer/session') 
        ->addSuccess(Mage::helper('mymodule')->__('Data saved.')); 
    
  2. mensaje de inicio en el controlador en el que desea recuperar el mensaje :

    $this->loadLayout(); 
    $this->_initLayoutMessages('customer/session'); 
    $this->_initLayoutMessages('catalog/session'); 
    $this->renderLayout();` 
    
  3. recuperar el mensaje en su plantilla (.phtml) archivo:

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

tuve que usar $ this-> initLayoutMessages ('checkout/session'); en mi controlador ya que estaba buscando sacar el valor predeterminado "X se agregó a su carrito de compras". mensaje. Básicamente, encuentre dónde se está almacenando su mensaje y colóquelo en la llamada initLayoutMessages. – jay

+0

esta es la explicación más sucinta que pude encontrar de cómo funcionan los mensajes de Magento. Para otros que lo encuentren, otros tipos de mensajes comunes incluyen pago/sesión y núcleo/sesión. Las extensiones tienden a colocar mensajes en ubicaciones aleatorias, por lo que a veces es más fácil inicializar todos los mensajes y luego extraerlos uno por uno hasta que obtenga los mensajes que desea – Ucinorn

3

Supongamos que desea recuperar un mensaje de éxito de una sesión de catálogo:

Luego había que recuperar mensajes de la sesión de la siguiente manera:

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

Poner false no va a limpiar su colección de mensajes de sesión. Si desea borrar todos los mensajes después de recuperar use true en su lugar.

El $messages es del tipo Mage_Core_Model_Message_Collection. Puede recuperar su tipo necesario de los mensajes de la misma por:

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

puede recorrer esos mensajes por:

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

Funciona. Asegúrese de obtener el objeto de sesión correcto, necesitaba '('cliente/sesión')'. – Justin

Cuestiones relacionadas