Pergunta

Eu ter copiado /app/code/Core/Mage/CatalogInventory/Model/Stock/Item.php para /app/code/local/Mage/CatalogInventory/Model/Stock/Item.php.Na linha (aprox.) 580 existe o seguinte código

if (!$this->getIsInStock()) {
        $result->setHasError(true)
            ->setMessage(Mage::helper('cataloginventory')->__('This product is currently out of stock.'))
            ->setQuoteMessage(Mage::helper('cataloginventory')->__('Some of the products are currently out of stock.'))
            ->setQuoteMessageIndex('stock');
        $result->setItemUseOldQty(true);
        return $result;
    }

Eu preciso editar o texto dentro da setQuoteMessage função para incluir <a href="/shop">continue shopping </a>.Parece haver algum tipo de escape html função acertando-entre-o, deixando este arquivo e ele ficando para os modelos de modo de exibição porque não importa o que eu tente fazer o navegador exibe a a tag como texto normal.

Para a sessão de mensagens que eu encontrei este opção onde você acabou de definir $session->setEscapeMessages(false);.Há algum tipo de semelhante param posso adicionar na $result o que vai fazer o mesmo.

Eu tentei usar a sessão de mensagens, em vez disso, mas isso não significa que eu perder a funcionalidade em termos de produtos específicos e mensagens de mensagem de posição, de acordo com o produto que está fora de estoque.Assim, a adição de um sinalizador para o código original e o texto atualizado seria a minha absoluta solução preferencial.

Foi útil?

Solução 2

Usando um pouco de um hack e o link @tecjam, desde que eu tenho um sujo, mas a solução de trabalho.

No /app/code/local/Mage/CatalogInventory/Model/Stock/Item.php dentro da função checkQuoteItemQty nas partes onde qtd mensagens prepare-se eu definir uma variável de sessão;

Mage::getSingleton('core/session')->setCartCheckoutErr(true);

Depois de ter copiado Mage_Core_Block_Messages para /app/code/local/Mage/Core/Block/Messages.php Eu fui para a função getGroupedHtml() na linha 229 e modificado-lo assim;

public function getGroupedHtml()
{
    $types = array(
        Mage_Core_Model_Message::ERROR,
        Mage_Core_Model_Message::WARNING,
        Mage_Core_Model_Message::NOTICE,
        Mage_Core_Model_Message::SUCCESS
    );
    $html = '';
    foreach ($types as $type) {
        if ( $messages = $this->getMessages($type) ) {
            if ( !$html ) {
                $html .= '<' . $this->_messagesFirstLevelTagName . ' class="messages">';
            }
            $html .= '<' . $this->_messagesSecondLevelTagName . ' class="' . $type . '-msg">';
            $html .= '<' . $this->_messagesFirstLevelTagName . '>';

            foreach ( $messages as $message ) {
                $html.= '<' . $this->_messagesSecondLevelTagName . '>';
                $html.= '<' . $this->_messagesContentWrapperTagName . '>';
                $html.= ($this->_escapeMessageFlag) ? $this->escapeHtml($message->getText()) : $message->getText();

     ================================**MY CHANGES**============================================   

                 if(Mage::getSingleton('core/session')->getCartCheckoutErr()){
                    $html.= ' Email ' . Mage::getStoreConfig('trans_email/ident_sales/email') .' or <a href="/shop">continue shopping </a>';
                    Mage::getSingleton('core/session')->unsCartCheckoutErr();
                }
================================**MY CHANGES**============================================

                $html.= '</' . $this->_messagesContentWrapperTagName . '>';
                $html.= '</' . $this->_messagesSecondLevelTagName . '>';
            }
            $html .= '</' . $this->_messagesFirstLevelTagName . '>';
            $html .= '</' . $this->_messagesSecondLevelTagName . '>';
        }
    }
    if ( $html) {
        $html .= '</' . $this->_messagesFirstLevelTagName . '>';
    }
    return $html;
} 

Era importante para adicionar em um pouco de lógica para apenas adicionar a marcação em determinadas situações, porque, obviamente, eu não quero isso adicionados a cada vez que um erro é processado.No entanto, isso pode não ser necessário para todos e, em tais casos, uma solução de limpeza poderia ser mais facilmente alcançados.

Outras dicas

EDITAR:

A resposta pode ser encontrada aqui:

Magento 1.9 CE - Habilitar os links HTML no erro/mensagens personalizadas

O resto da sua resposta, pode ser disgarded.


Um exemplo de como isso pode ser feito pode ser encontrado aqui:

/app/design/frontend/base/default/template/checkout/success.phtml

<p><?php echo $this->__('Your order # is: %s.', sprintf('<a href="%s">%s</a>', $this->escapeHtml($this->getViewOrderUrl()), $this->escapeHtml($this->getOrderId()))) ?></p>

-- edit:

Assim, você pode usar 2 funções como acima, ou codificar-lo:

->setQuoteMessage(Mage::helper('cataloginventory')->__('Some of the products are currently out of stock. %s', sprintf('<a href="%s">%s</a>', '/shop', 'continue shopping')))

As funções são definidas por aqui:/app/code/core/Mage/Checkout/Block/Onepage/Success.php:

/**
 * Retrieve identifier of created order
 *
 * @return string
 * @deprecated after 1.4.0.1
 */
public function getOrderId()
{
    return $this->_getData('order_id');
}


/**
 * Get url for view order details
 *
 * @return string
 * @deprecated after 1.4.0.1
 */
public function getViewOrderUrl()
{
    return $this->_getData('view_order_id');
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top