Что делать с тегом «Подсказка» в system.xml?

12

Я нашел непрозрачную ссылку на <hint/>тег в system.xmlфайлах. Что за дело с этим тегом? Задокументировано ли его использование где-либо?

Алан Сторм
источник
У тебя есть пример? Я не смог найти ни одного в Маге 1.8 или 1.9
Дэвид Мэннерс
@DavidManners См. Ниже - это был скорее вопрос «Я хочу задокументировать Magento» в ответ на вопрос, который кто-то написал мне в Твиттере, чем вопрос «У меня проблема». Знания и контекст других людей приветствуются.
Алан Шторм
Ах, я вас понимаю. Хотя какие-то модули на самом деле используют его или он спрятан?
Дэвид Мэннерс
@DavidManners Он спрятан, и способ настройки HTML конфигурации системы даже не работает. Я думаю, что функция подсказки рендеринга поля может работать на других формах (редактирование продукта и т. Д.), Но это не определяется system.xml. Также актуально, что создатель модуля Мариуса имеет собственную функцию помощи / подсказки. alanstorm.com/magento_ultimate_module_creator_review
Алан Сторм

Ответы:

16

Я не уверен насчет EE, но в CE это рудиментарный тег из никогда не завершенной справочной системы. Представляется, что целью было дать каждому полю формы в разделе «Конфигурация системы» небольшую «подсказку» или текст справки.

Текст справки добавляется при создании элемента поля

#File: app/code/core/Mage/Adminhtml/Block/System/Config/Form.php
$hint  = (string)$element->hint ? Mage::helper($helperName)->__((string)$element->hint) : '';

//...

$field = $fieldset->addField($id, $fieldType, array(
    'name'                  => $name,
    'label'                 => $label,
    'comment'               => $comment,
    'tooltip'               => $tooltip,
    'hint'                  => $hint,
    'value'                 => $data,
    'inherit'               => $inherit,
    'class'                 => $element->frontend_class . $sharedClass . $requiresClass,
    'field_config'          => $element,
    'scope'                 => $this->getScope(),
    'scope_id'              => $this->getScopeId(),
    'scope_label'           => $this->getScopeLabel($element),
    'can_use_default_value' => $this->canUseDefaultValue((int)$element->show_in_default),
    'can_use_website_value' => $this->canUseWebsiteValue((int)$element->show_in_website),
));

Эта первая строка читает значение <hint/>в system.xml.

Затем, когда Magento отображает поле как HTML, последнее, что он делает, это добавляет подсказку во вложенный div.

#File: app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field.php
$html.= '<td class="">';
if ($element->getHint()) {
    $html.= '<div class="hint" >';
    $html.= '<div style="display: none;">' . $element->getHint() . '</div>';
    $html.= '</div>';
}
$html.= '</td>';

Наконец, есть небольшой кусочек JavaScript, который вызывается при загрузке страницы администратора.

#File: app/design/adminhtml/default/default/template/system/config/js.phtml
function showHint() {    
    $$('.hint').each(function(element){
        Event.observe(element, 'mouseover', function(){            
            element.down().show()
        });
        Event.observe(element, 'mouseout', function(){
            element.down().hide()
        });
    });
}

Этот javascript настраивает обработчики событий таким образом, чтобы при отображении или вставке текста справки он отображался. Эта «подсказка» поможет пользователям понять, что делает каждое поле.

Проблема? HTML / CSS на серверной части делает подсказку tdшириной в один пиксель. Это препятствует тому, чтобы кто-нибудь намекал на подсказку, чтобы просмотреть его. Попробуйте добавить подсказку к вашей конфигурации поля, а затем выполните следующую команду из консоли javascript вашего браузера.

$$('.hint').each(function(el){
    el.down().show();
});

Вы увидите что-то подобное.

введите описание изображения здесь

( Это текст подсказки ).

Я всегда считал это одним из тех «Лучших планов», который упал после запуска Magento.

Алан Сторм
источник
6
Прекрасная часть археологии Magento - любите это!
Календжордан
1
Я впечатлен этим.
Philwinkle
Обратите внимание, что вы можете переопределить тему администрирования Magento, чтобы показывать подсказки по умолчанию. Я также изменил его, чтобы изменить шрифт текстового
поля