# Новый тип attribute

**URL:** <https://community.itop-itsm.ru/t/novyj-tip-attribute/2078>\
**Category:** Кастомизация\
**Created:** [24.Декабрь.2024 15:46:51 UTC](https://community.itop-itsm.ru/t/novyj-tip-attribute/2078 "2024-12-24T15:46:51Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![inil\_pw](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/inil_pw/32/649_2.png) [@inil\_pw](https://community.itop-itsm.ru/u/inil_pw)\
**Post date:** [24.Декабрь.2024 15:46:51 UTC](https://community.itop-itsm.ru/t/novyj-tip-attribute/2078/1 "2024-12-24T15:46:51Z")

</div>

Надеюсь форум еще живой.

Хотел бы узнать, есть возможность добавлять свои типы атрибутов на примере:  
AttributeDashboard  
AttributeLinkedSet  
AttributeDBFieldVoid  
AttributeExternalField  
AttributeBlob  
AttributeStopWatch  
и другие…

По аналогии: (решение 8 летней давности и очень сомнительный)

> **[GitHub - itop-itsm-ru/alarm-clock-attribute: Add Alarm Clock attribute for Combodo iTop](https://github.com/itop-itsm-ru/alarm-clock-attribute)**
>
> Add Alarm Clock attribute for Combodo iTop

Все из-за класса ormStopWatch, разработчики “захордкодили” html табличку, которая выводит данные об этом атрибуте “AttributeStopWatch”. Если есть возможность переопределить класс ormStopWatch, без изменения ядра, то отпадает необходимость создавать новый атрибут.

---

<div class="post-metadata">

**Author:** ![vladimir](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/vladimir/32/687_2.png) [@vladimir](https://community.itop-itsm.ru/u/vladimir)\
**Post date:** [25.Декабрь.2024 09:07:00 UTC](https://community.itop-itsm.ru/t/novyj-tip-attribute/2078/2 "2024-12-25T09:07:00Z")

</div>

Привет!  
Переопределить какой-то из базовых классов нет проблем, но вот сказать стандартному атрибуту, что теперь нужно использовать твой переопределённый класс, не выйдет. Поэтому нужно и атрибут делать свой, наследующий от стандартного атрибута. Но у твоего атрибута будут какие-то дополнительные параметры (а обычно они нужны) кроме базовых sql, default\_value, is\_null\_allowed и allowed\_values, то “компилятор” их пропустит, т.к. о твоём новом атрибуте ему ничего не известно. Разбирая XML и превращая его в PHP, “компилятор” не проверяет цепочку наследования класса атрибута, а просто сравнивает название с известными ему классами.

Выхода два знаю.

Первый – использовать AttributeCustomFields и CustomFieldsHandler. Плюсы:

- это публичный API;
- в сети можно найти примеры использования.

Минусы:

- куча писанины, если нужно минимально изменить какой-то стандартный атрибут;
- общая “заточка” под доп.формы полей.

Второй вариант это недокументированные возможности объявления новых атрибутов внутри тега `<meta>`, который для ITSM Designer зарезервирован. Это путь для тех, кто любит в исходном коде ковыряться. Искать тут: `\MFCompiler::LoadDynamicAttributeDefinitions`. `\MFCompiler::CompileDynamicAttribute`.

---

<div class="post-metadata">

**Author:** ![vladimir](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/vladimir/32/687_2.png) [@vladimir](https://community.itop-itsm.ru/u/vladimir)\
**Post date:** [25.Декабрь.2024 09:10:31 UTC](https://community.itop-itsm.ru/t/novyj-tip-attribute/2078/3 "2024-12-25T09:10:31Z")

</div>

А чем табличка мешает? Может есть какое другое решение?

---

<div class="post-metadata">

**Author:** ![inil\_pw](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/inil_pw/32/649_2.png) [@inil\_pw](https://community.itop-itsm.ru/u/inil_pw)\
**Post date:** [25.Декабрь.2024 11:36:36 UTC](https://community.itop-itsm.ru/t/novyj-tip-attribute/2078/4 "2024-12-25T11:36:36Z")

</div>

Спасибо за ответ, ну табличка то нормальная, но она на английском, ее не перевести, еще там есть лишние поля, которые хотелось бы скрыть.

MFCompiler - это все таки уже ядро. его ковырять чревато.  
Хуков не хватает, вот они бы решили проблему.

---

<div class="post-metadata">

**Author:** ![vladimir](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/vladimir/32/687_2.png) [@vladimir](https://community.itop-itsm.ru/u/vladimir)\
**Post date:** [25.Декабрь.2024 14:15:44 UTC](https://community.itop-itsm.ru/t/novyj-tip-attribute/2078/5 "2024-12-25T14:15:44Z")

</div>

> [@inil\_pw](#):
>
> MFCompiler - это все таки уже ядро. его ковырять чревато.

Ковырять не предлагаю) Нужно изучить указанные методы и понять, как в XML можно новые типы атрибутов динамически объявлять.

---

<div class="post-metadata">

**Author:** ![vladimir](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/vladimir/32/687_2.png) [@vladimir](https://community.itop-itsm.ru/u/vladimir)\
**Post date:** [25.Декабрь.2024 14:16:48 UTC](https://community.itop-itsm.ru/t/novyj-tip-attribute/2078/6 "2024-12-25T14:16:48Z")

</div>

> [@inil\_pw](#):
>
> она на английском, ее не перевести, еще там есть лишние поля, которые хотелось бы скрыть.

Это всё внутренняя кухня таймера, а чтобы перевести в вывести нужные значение, есть AttributeSubItem.

---

<div class="post-metadata">

**Author:** ![inil\_pw](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/inil_pw/32/649_2.png) [@inil\_pw](https://community.itop-itsm.ru/u/inil_pw)\
**Post date:** [25.Декабрь.2024 15:03:36 UTC](https://community.itop-itsm.ru/t/novyj-tip-attribute/2078/7 "2024-12-25T15:03:36Z")

</div>

Спасибо за наводки, буду ковырять.
