Какой самый простой способ ввести ограничения по длине адреса клиента в панели администратора?


Для клиента мы экспортируем всю адресную информацию, которая поступает в Magento, в стороннюю систему обработки. Подробности об этом не важны, но важно то, что все идет ужасно неправильно, если поля длиннее ожидаемого количества символов.

По этой причине мы используем API с substr, чтобы сократить данные до ожидаемого размера, но этого недостаточно. Персонал, использующий панель администратора, является по-видимому, приличного размера и не может быть обучен его правильному использованию, поэтому нам также необходимо применить эти ограничения к самой панели администратора.

Поскольку мы на самом деле не заботимся о том, чтобы они использовали технические ноу-хау, чтобы преодолеть эти ограничения, все, что нам действительно нужно, - это maxlength="x" на элементах формы. Требуется, чтобы разные элементы формы могли иметь разную максимальную длину.

Какой самый чистый и надежный для обновления способ обеспечить максимальную длину для клиента поля адреса в панели администратора?

Моей первой мыслью было использовать JavaScript - но поля не имеют действительно предсказуемых идентификаторов, поэтому я не уверен, что смогу легко. Поскольку все они используют средства визуализации форм, я также не могу просто отредактировать файл шаблона, создав пользовательскую тему администратора.

Сформулировано по-другому: Какой самый простой и чистый способ добавить атрибут maxlength в эти поля?

Author: Navarr, 2015-04-09

3 answers

В метод _afterToHtml добавьте следующее:

    if($this instanceof Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element)
    {
        //this code will prevent update unnecessary items in other parts of admin area
        if(!strpos($html, 'account[')) {
            return $html
        }

        if(strpos($html, 'account[prefix]')) {
            $length = 15;
        } elseif(strpos($html, 'account[firstname]')) {
            $length = 25;
        } elseif(strpos($html, 'account[lastname]')) {
            $length = 35;
        //.....
        }

        $string = '<input maxlength="' . $length . '" ';
        return str_replace('<input ', $string, $html);
    }

Внутри параметра maxlength укажите значение, которое вам нравится.

Упд.1

Если хотите, вы можете включить getStoreConfig вместо постоянного значения

$length = Mage::getStoreConfig(......)

Упд.2

Вот еще несколько идей.

Где хранить значения максимальной длины?

  • непосредственно в методе
  • система/конфигурация (Mage::getstoreconfig())
  • как новое поле деятельности клиента атрибут

Хранить значения непосредственно в методе - самый простой способ. Но выглядит это не очень хорошо. Вы также можете сохранить значение в системе/конфигурации, но вам нужно написать дополнительную конфигурацию. И 3-й вариант намного лучше. Но здесь есть много недостатков. Во-первых, в magento CE нет сетки атрибутов и страниц редактирования атрибутов. Во-вторых, вам нужно настроить существующий атрибут, добавив новое поле. Теоретически вы можете взять некоторое расширение, подобное этому http://www.magentocommerce.com/magento-connect/manage-customer-attributes.html и немного настройте его (в нем нет такого поля, как maxlength - чтобы получить его значение в шаблоне). На мой взгляд, если вам не нужно много раз редактировать значения длины - просто используйте первый вариант, и вы сэкономите много времени.

Например, вы решили, как добавить это поле. Вам нужно решить, где вам нужно заменить код. Я думаю, что переписать метод _afterToHtml($html) - это нормальный способ, потому что magento создал этот метод для таких целей.

И еще одно: magento EE поддерживает все функции, которые вам нравятся. Конечно, устанавливать EE слишком дорого. Надеюсь, эта информация может быть полезной.

 4
Author: zhartaunik, 2015-04-13 20:06:47

При использовании Magento Enterprise длину этих атрибутов можно задать в разделе Клиенты > Атрибуты > Управление атрибутами адресов клиентов

 1
Author: Navarr, 2015-04-17 17:11:02

Вы можете добавить строку javascript:

setMaxLengths = function() {
    $$("input[name^='address']").each(function (obj) { obj.setAttribute('maxlength','256'); });
}; Event.observe(window, "load", function(){ setInterval(function(){ setMaxLengths(); }, 1000); });

(отредактировано, чтобы добавить сердцебиение, чтобы оно работало с динамическими загруженными элементами DOM...)

До конца/js/prototype/validation.js файл, и он будет применять максимальный лимит, установленный вами как на интерфейсе, так и на администраторе для всех текстовых полей адреса. Просто замените 256 на фактический предел длины, который вы хотите.

Кроме того, обратите внимание на изменение файла, чтобы вы могли повторить его после любого обновления. в идеале вы бы поместили его в свой собственный файл js, который вы включаете через xml, но вышеописанный самый быстрый способ добавить его во все правильные места. Я бы лично включил его в пользовательский модуль magento, я не в восторге от того, чтобы делать все правильно в magento, но это выходит за рамки вопроса. :-) Надеюсь, это поможет.

Если вы хотите добавить разную максимальную длину в разные поля, просто добавьте несколько строк java-скрипта с более конкретными селекторами. это, безусловно, самый простой способ!

 0
Author: ReDesigned, 2018-03-13 08:21:07