Magento – How to display custom message

ajaxaddtocartmagento2.2success-message

I want to display a custom message on product page after Ajax add to cart success message in list page. Can you suggest anyway?

Best Answer

You can use plugin or event/observer to update the success message.

app/code/{Vendor}/{Module}/etc/frontend/events.xml

<event name="controller_action_postdispatch_checkout_cart_add">
    <observer name="updatemessage" instance="{Vendor}\{Module}\Observer\UpdateMessage" />
</event>

In observer, Use \Magento\Framework\Message\ManagerInterface to get last added message and add new/updated success message.

app/code/{Vendor}/{Module}/Observer/UpdateMessage.php

<?php
namespace {Vendor}\{Module}\Observer;

use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\App\RequestInterface;

class UpdateMessage implements ObserverInterface
{
    /** @var \Magento\Framework\Message\ManagerInterface */
    protected $messageManager;

    /** @var \Magento\Framework\UrlInterface */
    protected $url;

    public function __construct(
        \Magento\Framework\Message\ManagerInterface $managerInterface,
        \Magento\Framework\UrlInterface $url
    ) {
        $this->messageManager = $managerInterface;
        $this->url = $url;
    }

    public function execute(\Magento\Framework\Event\Observer $observer) {
        $messageCollection = $this->messageManager->getMessages(true);
        $customMessage = '<div>Your Message Here</div>';
        $this->messageManager->addSuccess($messageCollection->getLastAddedMessage()->getText() . '  ' . $customMessage);
    }
}
Related Topic