【问题标题】:Magento - Enable HTML links in error/custom messagesMagento - 在错误/自定义消息中启用 HTML 链接
【发布时间】:2014-09-03 09:20:18
【问题描述】:

我想知道这是否可以在自定义消息中启用 HTML 链接(即:错误消息)。

这是我的例子: 我已经覆盖了我对 Mage_CatalogInventory_Model_Stock_Item/Item.php 的需求

功能 checkQuoteItemQty :

if (!$this->checkQty($summaryQty) || !$this->checkQty($qty)) {
     //$message = Mage::helper('cataloginventory')->__('The requested quantity for "%s" is not available.', $this->getProductName());
     $message = Mage::helper('cataloginventory')->__('The requested quantity for "%s" is not available (max:%s).', $this->getProductName(), ($this->getQty() * 1));
     $cat_id = $this->getProduct()->getCategoryIds();
     if($cat_id){
         $url = Mage::getModel('catalog/category')->load($cat_id[0])->getUrl();
         $message .= Mage::helper('cataloginventory')->__('You might be interested in <a href="%s">those products</a>.', $url);
      }
      $result->setHasError(true)
           ->setMessage($message)
           ->setQuoteMessage($message)
           ->setQuoteMessageIndex('qty');
     return $result;
}

但我在 $message 中创建的 HTML 链接不可点击并被视为文本(我猜是因为翻译...)。 是否可以改变这种行为?

问候。

【问题讨论】:

    标签: php magento tags custom-errors magento-1.9


    【解决方案1】:

    对于那些想知道的人,我必须覆盖 Mage_Core_Block_Messages,第 249 行:

    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()) : html_entity_decode($message->getText());
                        $html.= '</' . $this->_messagesContentWrapperTagName . '>';
                        $html.= '</' . $this->_messagesSecondLevelTagName . '>';
                    }
                    $html .= '</' . $this->_messagesFirstLevelTagName . '>';
                    $html .= '</' . $this->_messagesSecondLevelTagName . '>';
                }
            }
            if ( $html) {
                $html .= '</' . $this->_messagesFirstLevelTagName . '>';
            }
            return $html;
        }
    

    在这一行添加一个 html_entity_decode :

    $html.= ($this->_escapeMessageFlag) ? $this->escapeHtml($message->getText()) : html_entity_decode($message->getText());
    

    如果您找到更好的解决方案,请告诉我。

    【讨论】:

      【解决方案2】:

      我不知道为什么,但就我而言,通过调用不带“消息”的过时方法可以解决链接问题。 我没有使用addNoticeMessage,而是改为addNotice,链接出现了。 就我而言:

      $noticeMsg = __('You must be <a href="%1">logged in</a> or <a href="%2">registered</a> to purchase these products.',
                              $this->_storeManager->getStore()->getUrl('customer/account/login'),
                              $this->_storeManager->getStore()->getUrl('customer/account/create')
                          );
      $this->_messageManager->addNotice($noticeMsg);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-15
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-21
        相关资源
        最近更新 更多