Adicionar a marcação para fora de checkout/cart estoque mensagem
-
12-12-2019 - |
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.
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');
}