Формат вывода ФИО

Добрый день! Необходимо поменять порядок отображения ФИО в ITOP с Имя Фамилия на Фамилия Имя. Куда смотреть? Возможно ли это в принципе?

Добрый день, в файле HOME_ITOP/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml можете просто поменять очередность в строке class id=“Person” в теге naming и произведите Setup

   <naming>
      <attributes>
        <attribute id="name"/>
        <attribute id="first_name"/>
      </attributes>
    </naming>
1 лайк

… и записать на листочке, чтобы не забыть исправить снова после очередного обновления iTop :slightly_smiling_face:

Если серьезно, то нужно сделать свой модуль и вынести туда этот кусочек XML-кода. Да, это чуть сложнее, чем просто поправить в datamodels, но при первом же обновлении вы сами себе скажете спасибо (ну или тот, кто будет это поддерживать).

1 лайк

Попробовал поменять местами, не вышло, после Setup всё осталось по-старому.

Какие ещё варианты? Установить с нуля?

Да, @vladimir Вы правы, но в этом случае подумал нет необходимости так как структуру данных не менять а лишь отображение.

@Steroid , у я себя проверил, поменяло

Менял в каждом найденном файле с именем datamodel.itop-config-mgmt.xml .
Затем запустил Setup, он завершился успехом, но ничего не изменилось.
После Setup нужно делать Update в Toolkit?

upd.
Попробую поставить заново и подцепиться к боевой базе.

Удалось поменять порядок Фамилии и Имени через Update текущей инсталяции.
Инсталятор скачан с официального сайта, в файле datamodel.itop-config-mgmt.xml поменял как советовали:

<naming>
  <attributes>
    <attribute id="name"/>
    <attribute id="first_name"/>
  </attributes>
</naming>

К сожалению, все остальные настройки были потеряны в ходе обновления (синхронизация с AD, расширения и прочее).
Сделал кастомный модуль следующего содержания:

<?xml version="1.1" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
  <classes>
    <class id="Person">
      <properties>
        <naming>
          <attributes>
            <attribute id="name"/>            
            <attribute id="first_name"/>
          </attributes>
        </naming>
    </class>
  </classes>
</itop_design>

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

Прям из пушки по воробьям :slightly_smiling_face:

Чтобы ваш модуль что-то изменил в стандартной модели данных, нужно на изменяемом XML-узле добавить атрибут _delta="redefine", например <naming _delta="redefine">.

А вообще вот самый правильный способ изменить порядок полей, из которых формируется отображаемое название объекта:

Dict::Add('RU RU', 'Russian', 'Русский', array(
    'Class:Person/Name' => '%2$s %1$s',
));

Это нужно добавить в кастомный модуль в файл с переводами (ru.dict.my-custom-module-name.php). В XML при этом менять ничего не нужно. Шаблон %1$s будет заменен на первый из атрибутов в <attributes>, %2$s – на второй и т.д. При этом в строку можно добавить какие-нибудь фиксированные значения:

    'Class:Person/Name' => 'Человек с именем %1$s и фамилией %2$s',

Такие дела.:man_factory_worker:

1 лайк

Сделал модуль + словарь (как Вы советовали).
Затем запустил Update с помощью Toolkit.
Всё сработало, в Back-Office портале Фамилия выводится перед Именем.

Но…

В пользовательском портале Имя по-прежнему выводится перед фамилией.
Как с этим быть?

Приведите пожалуйста пример готового XML, кастомного модуля привести. Я только начал разбираться, опыта совсем мало, содержимое для XML следующего вида будет корректно:

<?xml version="1.1" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
  <classes>
    <class id="Person" naming _delta="redefine">
      <properties>
        <naming>
          <attributes>
            <attribute id="name"/>            
            <attribute id="first_name"/>
          </attributes>
        </naming>
    </class>
  </classes>
</itop_design>

Вот тут)), можно подробнее, заранее спасибо!

Не понял, в чем вопрос (если это вопрос). Для изменения порядка атрибутов в названии не нужен XML, достаточно php файла с переводом, как показано выше.

Если хочешь через XML всё таки сделать, то _delta="redefine" нужно вставлять в том узле, который хочешь поменять. В данном случае поменять ты хочешь <naming>, а не весь <class>.

Неправильно:

...
<class id="Person" naming _delta="redefine">
...

Правильно:

...
<naming _delta="redefine">
...

Если речь про имя и фамилию под аватаркой, то этот порядок зашит в коде, и человеческим способом его не исправить (datamodels/2.x/itop-portal-base/portal/src/views/layout.html.twig).

То есть модуль создавать не нужно? Где должен тогда располагаться PHP с переводом?

Да, допустим если менять с помощью XML, не понимаю где прописать эту часть кода:

... naming _delta="redefine"&gt; ...

Нужно. Только в этом модуле не будет XML.

<?xml version="1.1" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
  <classes>
    <class id="Person">
      <properties>
        <naming _delta="redefine">
          <attributes>
            <attribute id="name"/>            
            <attribute id="first_name"/>
          </attributes>
        </naming>
    </class>
  </classes>
</itop_design>

Спасибо большое, всё понятно!

Здравствуйте. Не подскажите, где нужно разместить этот XML файл чтобы изменения применились?

Этот код нужно добавить файл datamodel.my-super-module-name.xml своего модуля.
Чтобы понять, как сделать свой модуль, пройдите этот туториал: https://www.itophub.io/wiki/page?id=3_0_0:customization:add-attribute-sample

1 лайк