Cách hiển thị thông báo phiên ở giao diện người dùng trong magento 2 beta


12

Tôi muốn hiển thị một lỗi hoặc thông báo thành công trong mô-đun magento 2 của tôi. Tôi đã mở rộng bộ điều khiển front-end của mình với tên lớp \Magento\Framework\App\Action\Action. Sau đó, tôi chuyển hướng khách hàng đến trang chủ bằng cách sử dụng mã sau đây

$this->messageManager->addError($SomeMessage);
$resultRedirect = $this->resultRedirectFactory->create();
$resultRedirect->setPath($base_path);

Mọi thứ hoạt động tốt nhưng dòng này không bao giờ in lỗi

$this->messageManager->addError($SomeMessage);

Bạn có phải hiển thị tin nhắn trên cửa hàng hoặc trong bảng quản trị?
KAndy

Tôi muốn hiển thị tin nhắn trên cửa hàng
Shaheer Ali

Câu trả lời:


7

Tôi đã gặp phải vấn đề liên quan đến thông báo hiển thị trong nguồn Magento2 Beta. Trong một số nguồn theo mặc định hiển thị lỗi và thông báo thành công nhưng trong một số trường hợp nó không hiển thị thì hãy làm theo các bước dưới đây.

Bước 1: Tôi đã tạo tệp Message.php trong mô-đun tùy chỉnh của mình trong Darsh \ Crud \ Block \ Message.php


không gian tên Darsh \ Crud \ Block;

lớp Tin nhắn mở rộng \ Magento \ Framework \ View \ Element \ Messages {

    chức năng công cộng __construct (
        \ Magento \ Framework \ View \ Element \ Template \ Bối cảnh $ bối cảnh,
        \ Magento \ Framework \ Message \ Factory $ messageFactory,
        \ Magento \ Framework \ Message \ CollectionFactory $ sưu tậpFactory,
        \ Magento \ Framework \ Message \ ManagerInterface $ messageManager,       
        mảng $ data = []
    ) {
        cha mẹ :: __ xây dựng (
            $ bối cảnh,
            $ tin nhắn
            $ sưu tậpFactory,
            $ tin nhắn
            $ dữ liệu
        );       
    }

    hàm được bảo vệ _prepareLayout ()
    {
        $ this-> addMessages ($ this-> messageManager-> getMessages (true));       
        trả về cha mẹ :: _ readyLayout ();
    }

}

Bước 2: Đã thêm khối tin nhắn vào handeler trong Darsh \ Crud \ view \ frontend \ layout \ crud_index_form.xml

   <referenceContainer name="page.messages">
        <block class="Darsh\Crud\Block\Message" name="darsh.crud.message" />
    </referenceContainer>

Vui lòng thêm Thẻ mở và đóng <> để xử lý bố cục.

Bây giờ bạn có thể thấy tin nhắn tùy chỉnh của mình được thêm vào trong Darsh \ Crud \ Controller \ Index \ Form.

Nếu bạn gặp phải bất kỳ vấn đề nào, vui lòng xem mô-đun Ví dụ trên https://github.com/Darshanmodi1427/Magento2_Crud_Operation.git


Sau một vài sửa đổi, tôi đã nhận được kết quả :)
Shaheer Ali

7

Trong tập tin bố trí tôi đã sử dụng mã dưới đây. bây giờ tôi đã nhận được tin nhắn ở frontend.

<referenceContainer name="page.messages">            
    <block class="Magento\Framework\View\Element\Template" name="ajax.message.placeholder" template="Magento_Theme::html/messages.phtml"/>
    <block class="Magento\Framework\View\Element\Messages" name="messages" as="messages" template="Magento_Theme::messages.phtml"/>
</referenceContainer>

Thankyou Marius
Naveenbos

1
Cảm ơn @Naveen. Hoạt động tốt trong Magento 2 trong mô-đun tùy chỉnh của tôi
Ankit Shah

6

Tôi đã đối mặt với cùng một vấn đề và tôi đã có thể khắc phục bằng cách thêm vào phần sau trong tệp bố cục của mình:

<body>
    <!-- your layout content -->
    <referenceContainer name="page.messages">
        <block class="Magento\Framework\View\Element\Messages" name="messages" as="messages"/>
    </referenceContainer>
</body>

Điều này sẽ sửa nó;)


2

Bạn đã thử trả lại dòng mã cuối cùng của mình chưa?

return $resultRedirect->setPath($base_path);

Hàm thực tế addErrortrông ổn trừ khi $SomeMessagebiến trống, bạn đã kiểm tra chưa?

Nếu thất bại, có thể bạn có thể thử chuyển hướng bằng cách sử dụng _redirectchức năng thay vì như:

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

Có thể resultRedirectchức năng xóa phiên tin nhắn để tin nhắn của bạn không bao giờ được hiển thị.


2

Có, tôi đã thêm thông báo bằng cách sử dụng đối tượng $ resultRedirect với

$ resultRedirect-> setUrl ($ this -> _ redirect ('crud / index / form'));

Vui lòng xem mã điều khiển bên dưới

không gian tên Darsh \ Crud \ Controller \ Index;

sử dụng Magento \ Framework \ App \ Filesystem \ DirectoryList;

bài đăng mở rộng \ Magento \ Liên hệ \ Trình điều khiển \ Index {
// bài đăng lớp mở rộng \ Magento \ Framework \ App \ Action \ Action {


    Hàm công khai thực thi () {
        $ data = $ this-> getRequest () -> getPostValue ();

        if (! $ data) {
            $ this -> _ redirect ('crud / index / form');
            trở về;
        }

        $ resultRedirect = $ this-> resultRedirectFactory-> create ();
        thử {
            $ model = $ this -> _ objectManager-> tạo ('Darsh \ Crud \ Model \ Crud');
            if (isset ($ _ FILES ['image'] ['name']) && $ _FILES ['image'] ['name']! = '') {
                thử {
                    $ uploader = $ this -> _ objectManager-> created ('\ Magento \ MediaStorage \ Model \ File \ Uploader', mảng ('fileId' => 'image'));
                    $ uploader-> set ALLowedExtensions (mảng ('jpg', 'jpeg', 'gif', 'png'));
                    $ uploader-> set ALLowRenameFiles (true);
                    $ uploader-> setFilesDispersion (đúng);
                    $ mediaDirectory = $ this -> _ objectManager-> get ('Magento \ Framework \ Filesystem')
                            -> getDirectoryRead (DirectoryList :: MEDIA);
                    $ config = $ this -> _ objectManager-> get ('Darsh \ Crud \ Model \ Crud');
                    $ result = $ uploader-> save ($ mediaDirectory-> getAbsolutePath ('bannerlider / hình ảnh'));
                    bỏ đặt ($ result ['tmp_name']);
                    bỏ đặt ($ result ['path']);
                    $ data ['image'] = $ result ['file'];
                } bắt (Ngoại lệ $ e) {
                    $ data ['image'] = $ _FILES ['image'] ['name'];
                }
            } if if (isset ($ data ['image'] ['xóa'])) {
                $ data ['hình ảnh]] =' ';
            } if if (isset ($ data ['image'] ['value'])) {
                $ data ['image'] = $ data ['image'] ['value'];
            }

            $ model-> setData ($ data);
            $ model-> setStoreId ($ this-> storeManager-> getStore () -> getId ())
                        -> setStores ([$ this-> storeManager-> getStore () -> getId ()])
                        -> lưu ();
            thử {
                $ model-> save ();
                $ this-> messageManager-> addSuccess (
                        __ ('Cảm ơn bạn đã liên hệ với chúng tôi với ý kiến ​​và câu hỏi của bạn. Chúng tôi sẽ sớm trả lời bạn.')
                );
                // $ this -> _ redirect ('crud / index / form');
                //trở về;
            } bắt (\ Ngoại lệ $ e) {
                $ this-> messageManager-> addError (
                        __ ('Chúng tôi không thể xử lý yêu cầu của bạn ngay bây giờ. Xin lỗi, đó là tất cả những gì chúng tôi biết.'));
                // $ this -> _ redirect ('crud / index / form');
                //trở về;
            }
        } bắt (\ Ngoại lệ $ e) {
            $ this-> messageManager-> addError (
                    __ ('Chúng tôi không thể xử lý yêu cầu của bạn ngay bây giờ. Xin lỗi, đó là tất cả những gì chúng tôi biết.')
            );
            // $ this -> _ redirect ('crud / index / form');
            //trở về;
        }

        $ resultRedirect-> setUrl ($ this -> _ redirect ('crud / index / form'));

        trả về $ resultRedirect;
    }

}

Cảm ơn.


2

Hãy thử sử dụng XDEBUG, đặt điểm dừng tại hành động điều khiển của bạn. Có thể nó đã được nhân đôi chuyển hướng và làm mất tin nhắn trong trình quản lý.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.