Navigation Menu

Задача: Изменить внешний вид системных сообщений.

Порой не всегда подходит для использования стандартная разметка Magento для вывода системных сообщений по разным причинам. В этой статье ты узнаешь как подогнать разметку под требуемую.


Решение:

Открой, пожалуйста, папку на сервере:

/magento/app/code/local/

Внутри создай директорию с любым названием (в статье я буду использовать папку «Naturalife«)
Далее создай следующие файлы и папки:

/magento/app/code/local/Naturalife/Catalog/Block/
/magento/app/code/local/Naturalife/Catalog/etc/config.xml
/magento/app/etc/modules/Naturalife_SystemNotifications.xml

Скопируй файл по адресу:

/magento/app/code/core/Mage/Core/Block/Messages.php

к себе в директорию:

/magento/app/code/local/Naturalife/Catalog/Block/Messages.php

Открой файл Naturalife_SystemNotifications.xml и вставь следующее:
[sourcecode language=»xml»]




true
local



[/sourcecode]
Открой файл config.xml следующее:
[sourcecode language=»xml»]






Naturalife_Core_Block_Messages





[/sourcecode]

Далее открой файл Naturalife/Catalog/Block/Messages.php и найди строку:
[sourcecode language=»php»] class Mage_Core_Block_Messages extends Mage_Core_Block_Template [/sourcecode]
Замени её на следующую:
[sourcecode language=»php»] class Naturalife_Core_Block_Messages extends Mage_Core_Block_Template [/sourcecode]

Имя родительского и дочернего тега устанавливается в строках:
[sourcecode language=»php»]
/**
* Store first level html tag name for messages html output
*
* @var string
*/
protected $_messagesFirstLevelTagName = ‘ul’;

/**
* Store second level html tag name for messages html output
*
* @var string
*/
protected $_messagesSecondLevelTagName = ‘l’;
[/sourcecode]

А следующий код в текущем файле отвечает за разметку:
[sourcecode language=»php»]
$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->_escapeMessageFlag) ? $this->htmlEscape($message->getText()) : $message->getText();
$html.= ‘_messagesSecondLevelTagName . ‘>’;
}
$html .= ‘_messagesFirstLevelTagName . ‘>’;
$html .= ‘_messagesSecondLevelTagName . ‘>’;
}
}
[/sourcecode]

К примеру для того что бы сообщения положить в <div> а текст в <i> нужно сделать следующее:
[sourcecode language=»php»]
/**
* Store first level html tag name for messages html output
*
* @var string
*/
protected $_messagesFirstLevelTagName = ‘div’;

/**
* Store second level html tag name for messages html output
*
* @var string
*/
protected $_messagesSecondLevelTagName = ‘i’;
[/sourcecode]
и убрать лишнее с разметки тем же самым упростить её:
[sourcecode language=»php»]
$html = »;
foreach ($types as $type) {
if ( $messages = $this->getMessages($type) ) {
if ( !$html ) {
$html .= ‘<' . $this->_messagesFirstLevelTagName . ‘ class=»b-notif_’ . $type . ‘»>’;
}

foreach ( $messages as $message ) {
$html.= ‘<' . $this->_messagesSecondLevelTagName . ‘ class=»b-notif__txt_’ . $type . ‘»>’;
$html.= ($this->_escapeMessageFlag) ? $this->htmlEscape($message->getText()) : $message->getText();
$html.= ‘_messagesSecondLevelTagName . ‘>’;
}

}
}
[/sourcecode]

Внеси правки и сохрани. Обнови кеш. Проверь в браузере.

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.