Как получить сообщение об успехе в Magento? - PullRequest
6 голосов
/ 16 июня 2010

Как мне получить сообщение об успехе в 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/
        )     
)

После публикации отзыва я хочу отобразить сообщение: "Ваш отзыв принят на модерацию".Он появляется в массиве $ _SESSION, но как мне его получить?Пожалуйста помоги.Заранее спасибо.

Ответы [ 7 ]

10 голосов
/ 23 декабря 2010

Это комбинация всех ваших ответов. Это работает для меня практически из любого блока:

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

Кредит причитается:

http://www.magentocommerce.com/boards/viewthread/40324/ (где я разместил ответ)

и

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

9 голосов
/ 04 мая 2011

У меня работает следующий код:

  1. установить сообщение контроллера:

    Mage::getSingleton('customer/session')
        ->addSuccess(Mage::helper('mymodule')->__('Data saved.'));
    
  2. сообщение инициализации в контроллере, где вы хотитечтобы получить сообщение:

    $this->loadLayout();
    $this->_initLayoutMessages('customer/session');
    $this->_initLayoutMessages('catalog/session');
    $this->renderLayout();`
    
  3. Получить сообщение в файле шаблона (.phtml):

    echo $this->getMessagesBlock()->getGroupedHtml();
    
7 голосов
/ 21 июня 2010
$messages = Mage::getSingleton('core/session')->getMessages(true);
foreach($messages->getItems() as $message)
{
   // Do something   
   $message->getText();
}
5 голосов
/ 19 июня 2010

Кажется, что вы запрашиваете, уже существует в Magento.После того как пользователь опубликовал отзыв о продукте, по умолчанию появляется сообщение «Ваш отзыв принят на модерацию», как указано в app / code / core / Mage / Review / controllers / ProductController.php в строке 188 (Magento 1.4.0.1)

В любом случае, если вы хотите отобразить сообщения (уведомление, успех, ошибка, предупреждение), просто используйте, например, в случае сообщения об успехе:

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

Сообщение будетсохранить в сеансе и автоматически появиться во внешнем интерфейсе, если файл шаблона страницы имеет код $ this-> getMessagesBlock () -> getGroupedHtml (), который имеет место на всех phtml-страницах по умолчанию, поставляемых с Magento.Таким образом, вам не нужно беспокоиться.

Конечно, в приведенном выше примере вы можете изменить

addSuccess($message)

на addError($message) или addWarning($message) или addNotice($message) в зависимости отвид информации, которую вы хотите отобразить.

3 голосов
/ 26 марта 2014

Предположим, вы хотите получить сообщение об успешном завершении сеанса каталога:

Затем вам нужно было получать сообщения из сессии следующим образом:

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

Установка false не удалит вашу коллекцию сообщений из сеанса. Если вы хотите удалить все сообщения после получения, используйте true.

$messages относится к типу Mage_Core_Model_Message_Collection. Вы можете извлечь из него нужный тип сообщений:

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

Вы можете просмотреть эти сообщения:

foreach ($successMessages as $message) {
   //do whatever you like
}
3 голосов
/ 16 июня 2010

Поскольку сообщение хранится в подмассиве core, вы будете использовать основной блок сообщений Magento для его получения. В вашем макете вы должны увидеть эту строку (в page.xml):

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

Это означает, что страница вызывает блок сообщений и извлекает сообщения из этого основного массива. Затем в ваших макетах вы сможете увидеть строку, которая фактически вызывает вывод:

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

Это фактически повторяет обычные блоки сообщений для любых сообщений в сеансе. Если вы не можете найти эти блоки, добавьте их. Если вам нужно получить сообщение в другом контексте (это может помешать другой работе сайта), попробуйте это в файле phtml:

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

Надеюсь, это поможет!

Спасибо, Джо

2 голосов
/ 18 июня 2010

Я нашел следующий блок в page.xml

Я использовал следующие две строки в своем коде для сообщения об успехе, но безуспешно.

getChildHtml ('global_messages')?> getLayout () -> createBlock ( 'ядро / сообщения') -> toHtml (); ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...