Изменение полей редактирования веб-пользователей в админ-панели.

Опубликовано: 26 Фев 2018

Взято тут. Полностью перепечатано, без изменений.

ManageUserFields. Несколько раз возникала необходимость при регистрации веб-пользователей на сайте использовать поля, отличные от тех, что уже имеются по-умолчанию в MODX Evo.


Что-то типа «Сфера деятельности» или «Организация» и т.п.
Когда таких нестандартных полей много — то проще использовать WebloginPE (или можно немного подправленную его версию из Clipper — WebUsers). С ним можно добавлять сколько угодно полей в отдельную таблицу БД. В этом же сниппете есть возможность для менеджера просматривать пользователей во фронтэнде. Хотя я ни разу этой возможностью не пользовался, поэтому не знаю насколько она функциональна и удобна.
А когда изменяемых полей не много, то достаточно и имеющихся стандартных. Только встает задача их переименовать. И если при регистрации и редактировании профиля это сделать не проблема в шаблоне, то в админке приходилось поступать некрасиво — лезть в языковой файл системы и там переименовывать нужные поля.
А если кому-то еще очень захочется и ненужные поля скрыть, то придется менять системный файл mutate_web_user.dynamic.php. А все знают(?), что делать это — не хорошо.
После того, как я пару раз поступал так вот нехорошо, решил все-таки решить эту задачу плагином.

Вешаем эту задачу на javascript. Не желая добавлять лишних библиотек, я решил все сделать на имевшемся Mootools. И если б не его очень старая версия (1.1.2) в админке MODX Evo, то потратилось бы значительно меньше времени на поиск решений и документации по древней версии. Т.к. с Mootools я до этого времени дел вообще не имел.
В итоге задача переименования и скрытия полей решается плагином.

Плагин ManageUserFields

/*
 *
 * ManageUserFields
 * Плагин для скрытия и переименования полей веб-пользователей в админ-панели MODX Evo
 *
 * @category    plugin
 * @version     0.1
 * @author      Akool
 * @internal    @properties &hideFields=Скрываем;text; &renameFields=Переименовываем;text;
 * @internal    @events OnWUsrFormRender
 * @internal    @modx_category Manager and Admin
 *
 * Exemple config: &hideFields=Скрываем;text;phone,mobilephone,zip,country,dob,gender &renameFields=Переименовываем;textarea;state||Регион:,comment||Контакты:
 *
 */

function replaceName($var) {
  $out = '[name='.trim($var).']';
  return $out;
}

$hideFields = isset($hideFields) ? explode(',', $hideFields) : false;
$renameFields = isset($renameFields) ? explode(',', $renameFields) : false;
$output = '';
$hideFieldsSrt = '';
$renameFieldsSrt = '';

$e = &$modx->Event;
if ($e->name == 'OnWUsrFormRender') {
 
  if (is_array($hideFields) && count($hideFields)>0) {
    $hideFieldsArr = array_map('replaceName', $hideFields);
    $hideFieldsSrt = "$$('".implode(', ', $hideFieldsArr)."').getParent().getParent().empty()";
  }

  if (is_array($renameFields) && count($renameFields)>0) {
    foreach ($renameFields as $field){
      $val = explode('||',$field);
      $renameRow .= "$$('[name=".$val[0]."]').getParent().getParent().addClass('".$val[0]."');
                    \$E('.".$val[0]." td').setText('".$val[1]."');"
        ;
    }
    $renameFieldsSrt = $renameRow;
  }

  if ('' != $hideFieldsSrt || '' != $renameFieldsSrt) {
    $output = "
<!-- ManageUserFields plugin -->
<script type=\"text/javascript\">
window.addEvent('domready', function() {
".$hideFieldsSrt."
".$renameFieldsSrt."
});
</script>";
  }
}
$e->output($output);


Да, код не так хорош, как мог бы быть. В нем смешиваются js и php. Надо было быстро решить задачу и на рефакторинг уже нет желания и времени. Улучшения приветствуются.

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

Для скрытия — перечисляем name-атрибуты полей через запятую.
Для переименования — записываем name-атрибут через две вертикальные черты с новым названием и эти пары пишем через запятую.

Результат

Было:

Стало:

В итоге:

    системные файлы целы
    менеджер сайта видит все как надо
    легко управлять

Добавлять новые поля тут, конечно, нельзя. Этакий мини ManagerManager для данных о веб-пользователях.

Такие вот возможности у плагинов в MODX.

 

Комментарии (0)


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




Разрешённые теги: <b><i><br>Добавить новый комментарий: