Question

Je suis en train de retirer l'avis dans le panier sur la façon dont le client doit disposer d'un sous-total de dire 20 $ dans leur panier mais je veux encore la restriction là pour quand les essais des clients pour aller dans le panier (Personnellement, je pense que nous ne devrait pas retirer l'avis, mais l'ordre revient d'en haut)

À l'heure actuelle, voici mon code

$messages = $this->getMessagesBlock()->getMessages();
unset($messages[1]);
$this->getMessagesBlock()->setMessages($messages);
echo $this->getMessagesBlock()->getGroupedHtml();

J'ai testé le code en allant dans le panier avec 1 article et en utilisant la mise à jour bouton panier quand ils nouveau qté est quelque chose de stupide comme 99999999999999

de la décharge var je l'ai fait de $this->getMessagesBlock() il y a une pièce protégée de données appelées _messages, en utilisant getMessages() retourner un tableau de 2 éléments, l'un est l'erreur sur l'qté à l'index 0, l'autre est un avis au sujet de l'achat minimum .

J'ai essayé d'utiliser unset($messages[1]); pour enlever l'avis comme un test pour voir si je pouvais l'enlever. Si cela a fonctionné, je fixerais plus tard à rechercher l'avis et le retirer, peu importe où dans le tableau, il est.

J'ai appelé setMessages($messages) et a fait une autre décharge var. Je vois qu'il a été remis en $this->getMessagesBlock() donc je pensais que ça marcherait, mais rien ne semblait.

Je l'ai fait une var_dump de $this->getMessagesBlock()->getGroupedHtml() et il montre une chaîne vide.

Je me demande ce que je pourrais faire mal ici ou s'il y a une meilleure façon de supprimer simplement le message que je ne veux pas.


est ce vardumped de $ messages

array (size=2)
  0 => 
    object(Mage_Core_Model_Message_Error)[196]
      protected '_type' => string 'error' (length=5)
      protected '_code' => string 'The requested quantity for "6899WSAND" is not available.' (length=56)
      protected '_class' => string '' (length=0)
      protected '_method' => string '' (length=0)
      protected '_identifier' => null
      protected '_isSticky' => boolean false
  1 => 
    object(Mage_Core_Model_Message_Notice)[820]
      protected '_type' => string 'notice' (length=6)
      protected '_code' => string '' (length=0)
      protected '_class' => string '' (length=0)
      protected '_method' => string '' (length=0)
      protected '_identifier' => null
      protected '_isSticky' => boolean false
Était-ce utile?

La solution

Je voudrais essayer de résoudre ce à un autre niveau. L'avis de ne pas atteindre le montant minimum de commande est ajouté assez tôt dans Mage_Checkout_CartController.

L'un des prochains événements qui est dépêchés controller_action_layout_load_before. Créer un observateur pour cet événement et là, vous pouvez utiliser quelque chose comme ce qui suit:

$messages = Mage::getSingleton('checkout/session')->getMessages(true);

La vraie effacera tous les messages de la caisse donc ce n'est pas tout à fait ce que vous voulez que nous devons ajouter à nouveau ceux que nous ne voulons pas filtrer avant.

Malheureusement Magento ne donne pas le panier avis d'un identificateur unique (qui vous permettra d'utiliser Mage_Core_Model_Message_Collection :: deleteMessageByIdentifier). La distinction entre le chariot et la caisse est que l'on est un avis et l'autre est un message d'erreur. Quelque chose comme ce qui suit devrait vous fournir un bon point de départ.

$messageTypes =  array(
    Mage_Core_Model_Message::ERROR,
    Mage_Core_Model_Message::NOTICE,
    Mage_Core_Model_Message::SUCCESS,
    Mage_Core_Model_Message::WARNING
);
//Sidenote just because something is a collection in Magento it does not mean you
//can easily loop over it - see Mage_Core_Model_Message_Collection
foreach ($messageTypes as $type){
    foreach ($messages->getItems($type) as $typeMessages) {
        foreach ($typeMessages as $message){
            if (!($type == Mage_Core_Model_Message::NOTICE
                && $message == Mage::getStoreConfig('sales/minimum_order/description'))
            ) {
                $messageObject = Mage::getModel('core/message_'.$type, $message);
                Mage::getSingleton('checkout/session')->addMessage($messageObject);
            }
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top