Domanda

Sto cercando di rimuovere il bando nel carrello su come il cliente deve avere un totale parziale di dire $ 20 nel loro carrello comunque voglio ancora la restrizione lì per quando i tentativi del cliente di andare nel carrello (io personalmente penso che noi non dovrebbe rimuovere il bando, ma l'ordine scende dal livello alto)

Al momento, questo è il mio codice

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

Ho testato il codice andando nel carrello con 1 elemento e usando il tasto aggiorna carrello quando nuova qty è qualcosa di stupido come 99.999.999,999999 millions

dalla discarica var ho fatto di $this->getMessagesBlock() c'è un pezzo di dati chiamati _messages protetta utilizzando getMessages() restituire una matrice di 2 elementi, uno è l'errore circa il qty di indice 0, l'altro è un avviso circa l'acquisto minimo .

Ho provato ad utilizzare unset($messages[1]); per rimuovere l'avviso come un test per vedere se riuscivo a rimuoverlo. Se ha funzionato, avrei poi risolvere il problema fino a cercare l'avviso e rimuoverlo non importa dove nella matrice esso sia.

ho chiamato setMessages($messages) e ha fatto un'altra discarica var. Posso vedere è stato rimesso in $this->getMessagesBlock() così ho pensato che avrebbe funzionato, ma nulla sembrava.

Ho fatto un var_dump di $this->getMessagesBlock()->getGroupedHtml() e mostra una stringa vuota.

Mi chiedo quello che ho potuto fare male qui o se c'è un modo migliore per rimuovere solo il messaggio non voglio.


questo è ciò che è vardumped da $ 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
È stato utile?

Soluzione

Vorrei cercare di risolvere questo su un altro livello. È aggiunto il preavviso per non raggiungere l'importo minimo di ordine abbastanza presto in Mage_Checkout_CartController.

Uno dei prossimi eventi che viene inviato è controller_action_layout_load_before. Creare un osservatore per questo evento e in là si può usare qualcosa di simile al seguente:

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

Il vero sarà cancellare tutti i messaggi per cassa, quindi questo non è del tutto ciò che si vuole così abbiamo bisogno di aggiungere nuovamente quelli che non vogliamo filtrare di nuovo in.

Purtroppo Magento non dà l'avviso della spesa alcun identificativo univoco (che consentirebbe di utilizzare Mage_Core_Model_Message_Collection :: deleteMessageByIdentifier). La distinzione tra il carrello e la cassa è che uno è un avviso e l'altro è un messaggio di errore. Qualcosa come il seguente dovrebbe fornire un buon punto di partenza.

$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);
            }
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top