So zeigen Sie Sitzungsnachrichten im Front-End in Magento 2 Beta an

12

Ich möchte eine Fehler- oder Erfolgsmeldung in meinem Magento 2-Modul anzeigen. Ich habe meinen Front-End-Controller um den Klassennamen erweitert \Magento\Framework\App\Action\Action. Dann leite ich den Client mit folgendem Code auf die Homepage um

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

Alles funktioniert gut, aber diese Zeile gibt den Fehler nie aus

$this->messageManager->addError($SomeMessage);
Shaheer Ali
quelle
Müssen Sie Nachrichten in der Storefront oder im Admin-Bereich anzeigen?
KAndy,
Ich möchte Nachrichten im Schaufenster
anzeigen

Antworten:

7

Ich habe Probleme mit der Anzeige von Meldungen in der Magento2 Beta-Quelle. In einigen Quellen werden standardmäßig Fehler und Erfolgsmeldungen angezeigt, in einigen Fällen jedoch nicht. Führen Sie dann die folgenden Schritte aus.

Schritt 1: Ich habe die Datei Message.php in meinem benutzerdefinierten Modul in Darsh \ Crud \ Block \ Message.php erstellt


Namespace Darsh \ Crud \ Block;

class Nachricht erweitert \ Magento \ Framework \ View \ Element \ Messages {

    public function __construct (
        \ Magento \ Framework \ View \ Element \ Template \ Context $ context,
        \ Magento \ Framework \ Message \ Factory $ messageFactory,
        \ Magento \ Framework \ Message \ CollectionFactory $ collectionFactory,
        \ Magento \ Framework \ Message \ ManagerInterface $ messageManager,       
        array $ data = []
    ) {
        parent :: __ construct (
            $ context,
            $ messageFactory,
            $ collectionFactory,
            $ messageManager,
            $ data
        );       
    }

    geschützte Funktion _prepareLayout ()
    {
        $ this-> addMessages ($ this-> messageManager-> getMessages (true));       
        return parent :: _ prepareLayout ();
    }

}

Schritt 2: Hinzufügen eines Nachrichtenblocks zum Handeler in Darsh \ Crud \ view \ frontend \ layout \ crud_index_form.xml

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

Fügen Sie das öffnende und schließende Tag <> für das Layout-Handle hinzu.

Jetzt können Sie Ihre benutzerdefinierte Nachricht unter Darsh \ Crud \ Controller \ Index \ Form anzeigen.

Bei Problemen lesen Sie bitte das Beispielmodul unter https://github.com/Darshanmodi1427/Magento2_Crud_Operation.git

Darsh modi
quelle
Nach einigen Modifikationen habe ich die Ergebnisse erhalten :)
Shaheer Ali
7

In der Layout-Datei habe ich den folgenden Code verwendet. Jetzt habe ich die Nachricht im 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>
Naveenbos
quelle
Vielen Dank
1
Danke @Naveen. Funktioniert gut in Magento 2 in meinem benutzerdefinierten Modul
Ankit Shah
6

Ich hatte das gleiche Problem und konnte es beheben, indem ich Folgendes in meine Layoutdatei hinzufügte:

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

Dies sollte es beheben;)

user3245246
quelle
2

Haben Sie versucht, Ihre letzte Codezeile zurückzugeben?

return $resultRedirect->setPath($base_path);

Die tatsächliche addError Funktion sieht gut aus, es sei denn, die $SomeMessageVariable ist leer. Haben Sie das auch überprüft?

Wenn dies fehlschlägt, können Sie _redirectstattdessen versuchen, mithilfe der Funktion umzuleiten :

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

Möglicherweise resultRedirectlöscht die Funktion die Nachrichtensitzung, sodass Ihre Nachricht nie angezeigt wird.

Javier Villanueva
quelle
2

Ja, ich habe eine Nachricht mit dem Objekt $ resultRedirect mit hinzugefügt

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

Bitte siehe unten Controller-Code

Namespace Darsh \ Crud \ Controller \ Index;

Verwenden Sie Magento \ Framework \ App \ Filesystem \ DirectoryList.

Klasse Post erweitert \ Magento \ Contact \ Controller \ Index {
// Klasse Post erweitert \ Magento \ Framework \ App \ Action \ Action {


    public function execute () {
        $ data = $ this-> getRequest () -> getPostValue ();

        if (! $ data) {
            $ this -> _ redirect ('crud / index / form');
            Rückkehr;
        }

        $ resultRedirect = $ this-> resultRedirectFactory-> create ();
        Versuchen {
            $ model = $ this -> _ objectManager-> create ('Darsh \ Crud \ Model \ Crud');
            if (isset ($ _ FILES ['image'] ['name']) && $ _FILES ['image'] ['name']! = '') {
                Versuchen {
                    $ uploader = $ this -> _ objectManager-> create ('\ Magento \ MediaStorage \ Model \ File \ Uploader', Array ('fileId' => 'image'));
                    $ uploader-> setAllowedExtensions (Array ('jpg', 'jpeg', 'gif', 'png'));
                    $ uploader-> setAllowRenameFiles (true);
                    $ uploader-> setFilesDispersion (true);
                    $ mediaDirectory = $ this -> _ objectManager-> get ('Magento \ Framework \ Filesystem')
                            -> getDirectoryRead (DirectoryList :: MEDIA);
                    $ config = $ this -> _ objectManager-> get ('Darsh \ Crud \ Model \ Crud');
                    $ result = $ uploader-> save ($ mediaDirectory-> getAbsolutePath ('bannerslider / images'));
                    unset ($ result ['tmp_name']);
                    unset ($ result ['path']);
                    $ data ['image'] = $ result ['file'];
                } catch (Ausnahme $ e) {
                    $ data ['image'] = $ _FILES ['image'] ['name'];
                }
            } else if (isset ($ data ['image'] ['delete'])) {
                $ data ['image'] = '';
            } else if (isset ($ data ['image'] ['value'])) {
                $ data ['image'] = $ data ['image'] ['value'];
            }

            $ model-> setData ($ data);
            $ model-> setStoreId ($ this-> storeManager-> getStore () -> getId ())
                        -> setStores ([$ this-> storeManager-> getStore () -> getId ()])
                        -> save ();
            Versuchen {
                $ model-> save ();
                $ this-> messageManager-> addSuccess (
                        __ ("Vielen Dank, dass Sie sich mit Ihren Kommentaren und Fragen an uns gewandt haben. Wir werden Ihnen sehr bald antworten.")
                );
                // $ this -> _ redirect ('crud / index / form');
                //Rückkehr;
            } catch (\ Exception $ e) {
                $ this-> messageManager-> addError (
                        __ ('Wir können Ihre Anfrage momentan nicht bearbeiten. Entschuldigung, das ist alles, was wir wissen.'));
                // $ this -> _ redirect ('crud / index / form');
                //Rückkehr;
            }
        } catch (\ Exception $ e) {
            $ this-> messageManager-> addError (
                    __ ("Wir können Ihre Anfrage derzeit nicht bearbeiten. Tut uns leid, das ist alles, was wir wissen.")
            );
            // $ this -> _ redirect ('crud / index / form');
            //Rückkehr;
        }

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

        return $ resultRedirect;
    }

}

Vielen Dank.

Darsh modi
quelle
2

Versuchen Sie es mit XDEBUG, setzen Sie den Haltepunkt bei Ihrer Controller-Aktion. Möglicherweise wurde die Weiterleitung dupliziert und verlorene Nachrichten im Manager.

De Nguyen
quelle