Est-il possible de traiter les messages succès / erreur à l'intérieur des blocs?

magento.stackexchange https://magento.stackexchange.com/questions/219

  •  16-10-2019
  •  | 
  •  

Question

En général, je gérer les exceptions et l'affichage ou le succès des messages d'erreur dans les contrôleurs. Par exemple:

 Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__("The cache storage has been flushed."));

Mais dans certains cas, j'aimerais être en mesure de rendre un message d'erreur à partir d'un bloc. Par exemple, je bloque dans ma page qui dépendent de certaines configurations qui ne sont pas correctement défini actuellement, donc ce que je veux faire est de rendre pas ces blocs, mais encore permettre à d'autres blocs autour d'eux pour rendre.

Dans certains cas, les autres éléments de la page sont nécessaires pour résoudre le problème qui est à l'origine l'exception en premier lieu.

Mais je pense que le bloc de messages est initialisé très tôt dans le processus de rendu de mise en page, donc au moment où vous êtes dans un bloc, si vous essayez de définir un message sur la session, il ne sera pas affiché jusqu'à ce que la charge page suivante , qui serait assez déroutant bien sûr.

Je recherche le cœur et je ne vois aucune instance de addError () dans Mage / Adminhtml / Bloc /

Je l'ai fait tomber sur ce petit bijou, mais il ne semble pas fonctionner comme je pense:

$this->getLayout()->getMessagesBlock()->addError('oh what');
Était-ce utile?

La solution

Vous pouvez le faire par la fonction _prepareLayout écrasant () dans votre bloc:

protected function _prepareLayout() {
    // IF statement check for config  or something else
        $this->getMessagesBlock()->addError('oh what');
    // End of IF
    return parent::_prepareLayout();
}

_prepareLayout() est appelée avant que toutes les fonctions de _toHtml() sont appelés sur chaque bloc et après la mise en page a été chargée.

Autres conseils

Je ne suis pas sûr, je comprends wether vous corriger.

Vous pouvez obtenir le bloc de message via

Mage_Core_Block_Abstract::getMessagesBlock()
// means $this in block context (template and Block class)

vous pouvez tout ce que vous voulez, par exemple ajouter de nouvelles erreurs:

$this->getMessagesBlock()->addError('Configuration is wrong!');

ou afficher les messages d'erreur avec votre propre modèle:

$this->getMessageBlock()->setTemplate('my_template.phtml');
echo $this->getMessageBlock()->toHtml();

Avoir un regard sur les méthodes suivantes pour modifier la mise en page des messages:

Mage_Core_Block_Messages::setMessagesFirstLevelTagName()
Mage_Core_Block_Messages::setMessagesSecondLevelTagName()
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top