# Кастомизация пользовательского портала

**URL:** <https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22>\
**Category:** Кастомизация\
**Created:** [05.Июнь.2014 09:33:36 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22 "2014-06-05T09:33:36Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![amsol](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/amsol/32/86_2.png) [@amsol](https://community.itop-itsm.ru/u/amsol)\
**Post date:** [05.Июнь.2014 09:33:36 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/1 "2014-06-05T09:33:36Z")

</div>

Добрый день.  
Знает кто-нибудь, как в интерфейсе пользовательского портала скрыть поля ВЛИЯНИЕ и СРОЧНОСТЬ и задать им значения по умолчанию? Возможно ли это сделать без глубокого проникновения в программирование? )))

---

<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:** [06.Июнь.2014 13:53:27 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/2 "2014-06-06T13:53:27Z")

</div>

Похоже, снова я)).  
Смотри в datamodel.itop-request-mgmt-itil.xml, в самом начале идет определение констант, тебя может заинтересовать эта строка:

```
<constant id="PORTAL_USERREQUEST_FORM_ATTRIBUTES" xsi:type="string" _delta="define"><![CDATA[title,description,impact,urgency]]></constant>

```

Кроме неё там ещё много всего, связанного с порталом. Мы же про iTop 2.0.2 говорим?

---

<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:** [10.Июнь.2014 13:06:49 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/3 "2014-06-10T13:06:49Z")

</div>

@amsol, ну как, получилось что-нибудь?

---

<div class="post-metadata">

**Author:** ![amsol](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/amsol/32/86_2.png) [@amsol](https://community.itop-itsm.ru/u/amsol)\
**Post date:** [16.Июнь.2014 07:34:01 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/4 "2014-06-16T07:34:01Z")

</div>

Добрый день.  
К сожалению пока не было времени.  
На этой неделе планирую сделать, на выходных отпишусь.

---

<div class="post-metadata">

**Author:** ![Alexander](https://community.itop-itsm.ru/letter_avatar_proxy/v4/letter/a/bc8723/32.png) [@Alexander](https://community.itop-itsm.ru/u/Alexander)\
**Post date:** [28.Июль.2014 07:17:18 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/5 "2014-07-28T07:17:18Z")

</div>

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

---

<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:** [28.Июль.2014 11:19:45 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/6 "2014-07-28T11:19:45Z")

</div>

@Alexander, после правки запускал setup или toolkit?  
iTop при установке компилирует код из папок datamodels и extensions в env-production. После любого изменения в файлах моделей данных или дополнительных модулей нужно запускать setup и прогонять установку в режиме обновления iTop.

---

<div class="post-metadata">

**Author:** ![Alexander](https://community.itop-itsm.ru/letter_avatar_proxy/v4/letter/a/bc8723/32.png) [@Alexander](https://community.itop-itsm.ru/u/Alexander)\
**Post date:** [30.Июль.2014 06:09:28 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/7 "2014-07-30T06:09:28Z")

</div>

Запустил setup и обновил - все заработало. Спасибо!

---

<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:** [31.Июль.2014 07:43:05 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/8 "2014-07-31T07:43:05Z")

</div>

@Alexander, рад помочь).  
Небольшое дополнение: изменение стандартных моделей в datamodels допустимо только для нужд тестирования и разработки. Если собираешься переносить эти изменения в продакшн, делай отдельный модуль! Иначе при очередном обновлении iTop запутаешься, где и чего поменял.

---

<div class="post-metadata">

**Author:** ![iilitv](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/iilitv/32/72_2.png) [@iilitv](https://community.itop-itsm.ru/u/iilitv)\
**Post date:** [28.Октябрь.2015 06:04:13 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/9 "2015-10-28T06:04:13Z")

</div>

Как отобразить на портале причину перевода Запроса/Инцидента в режим ожидания ?

---

<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:** [29.Октябрь.2015 17:24:59 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/10 "2015-10-29T17:24:59Z")

</div>

[http://sourceforge.net/p/itop/code/HEAD/tree/tags/2.2.0/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml#l10](http://sourceforge.net/p/itop/code/HEAD/tree/tags/2.2.0/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml#l10)

Переопределите объявление этой константы в своем модуле, добавив нужное поле в список.

---

<div class="post-metadata">

**Author:** ![iilitv](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/iilitv/32/72_2.png) [@iilitv](https://community.itop-itsm.ru/u/iilitv)\
**Post date:** [30.Октябрь.2015 05:12:06 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/11 "2015-10-30T05:12:06Z")

</div>

Спасибо. Все получилось.  
Я видел эту переменную. Но подумал, что pending\_reason - поле “Текст”, будет всегда отображаться.

---

<div class="post-metadata">

**Author:** ![Veter111](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/veter111/32/159_2.png) [@Veter111](https://community.itop-itsm.ru/u/Veter111)\
**Post date:** [12.Декабрь.2016 14:37:57 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/12 "2016-12-12T14:37:57Z")

</div>

Коллеги, добрый день!  
А как тоже самое сделать в версии 2.3?  
Нашел константу, исправил, прогнал setup и ничего не изменилось ((

---

<div class="post-metadata">

**Author:** ![react](https://community.itop-itsm.ru/letter_avatar_proxy/v4/letter/r/ecccb3/32.png) [@react](https://community.itop-itsm.ru/u/react)\
**Post date:** [18.Январь.2017 15:45:49 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/13 "2017-01-18T15:45:49Z")

</div>

Привет.  
Тоже задался этим вопросом.  
На 2.3 пользовательский портал выполнен в современном стиле (если ставили в установщике) и кастомизируется (сам вид , не классы которые могут быть использованы для вывода в этот вид) в основном в файле index.php  
Вот тема на их форуме [https://sourceforge.net/p/itop/discussion/922360/thread/c7421d93/](https://sourceforge.net/p/itop/discussion/922360/thread/c7421d93/)  
Ответ кого-то из разрабов -

Hello,  
The portal is a self contained application. Therefore, you can easily modify it and adapt it to your needs. For that purpose, you’ll need to look at the /portal directory and mainly into the index.php file. Everything you need is in that file.  
Modifying the portal/index.php should not be too complex for a developper.  
Best regard

---

<div class="post-metadata">

**Author:** ![togoltsova](https://community.itop-itsm.ru/letter_avatar_proxy/v4/letter/t/c4cdca/32.png) [@togoltsova](https://community.itop-itsm.ru/u/togoltsova)\
**Post date:** [23.Январь.2017 07:55:06 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/14 "2017-01-23T07:55:06Z")

</div>

Добрый день, коллеги.

1. Кастомизировать портал можно в своем модуле путем определения/переопределения компонентов xsi:type=“Combodo\iTop\Portal\Brick\BrowseBrick” в блоке:

2. Нужна помощь!  
При определении дополнительных полей для запросов через расширение - шаблоны запросов ([https://wiki.openitop.org/doku.php?id=extensions:request-templates](https://wiki.openitop.org/doku.php?id=extensions:request-templates)) поля типа duration НЕ отображаются в форме создания запроса на портале пользователя.  
Кто-нибудь сталкивался с этой проблемой?

Заранее спасибо за ответ.

---

<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:** [23.Январь.2017 11:22:42 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/15 "2017-01-23T11:22:42Z")

</div>

> [@react](#):
>
> На 2.3 пользовательский портал выполнен в современном стиле (если ставили в установщике) и кастомизируется (сам вид , не классы которые могут быть использованы для вывода в этот вид) в основном в файле index.php

Кастомизируется он ни в коем случае не в index.php.

Практически всё, что можно изменить в новом портале через XML, лежит в `datamodels/2.0/itop-tickets/datamodel.itop-tickets.xml`. Там же описаны поля формы тикетов. Некоторые модули могут добавлять на портал свои разделы, как это делает модуль Известных ошибок и FAQ. В этом случае исходные данные нужно брать в XML-модели данных соответствующего модуля, и переопределять в своем модуле.

---

<div class="post-metadata">

**Author:** ![Epic](https://community.itop-itsm.ru/letter_avatar_proxy/v4/letter/e/e274bd/32.png) [@Epic](https://community.itop-itsm.ru/u/Epic)\
**Post date:** [30.Май.2018 11:26:27 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/16 "2018-05-30T11:26:27Z")

</div>

Привет, Владимир.  
Как показать в портале причину отклонения запроса?  
В стандартной версии iTop не надо указывать причину отклонения запроса.  
Поэтому я установил расширение [Approval process automation](https://www.itophub.io/wiki/page?id=extensions%3Aapproval_extended), которое добавило в Itop окно с причиной отклонения.  
В Модели Данных я нашел атрибут abort\_comment, который как я думаю содержит причину отклонения. Других атрибутов я не нашел.  
Я вставлял abort\_comment в форму для вывода отклоненного запроса, но при просмотре запроса выходит ошибка: Обратитесь к админу.  
Я хотел вывести данный атрибут наподобие атрибута “режим ожидания (pending\_reason)”, но не получилось.  
Вы пользовались данным расширением? Можете чем нибудь помочь? Спасибо.

---

<div class="post-metadata">

**Author:** ![Epic](https://community.itop-itsm.ru/letter_avatar_proxy/v4/letter/e/e274bd/32.png) [@Epic](https://community.itop-itsm.ru/u/Epic)\
**Post date:** [31.Май.2018 04:03:01 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/17 "2018-05-31T04:03:01Z")

</div>

Атрибут abort\_comment относится к объекту ApprovalScheme, но не к объекту UserRequest и связать два объекта не получится, т.к. нет одинаковых атрибутов. Получается, что у этого расширения нет никакой связи причины отклонения запроса с самим запросом. В админской консоли в запросе тоже не выводится причина отклонения.  
Есть мысли как решить проблему с выводом причины отклонения в портале?

---

<div class="post-metadata">

**Author:** ![Epic](https://community.itop-itsm.ru/letter_avatar_proxy/v4/letter/e/e274bd/32.png) [@Epic](https://community.itop-itsm.ru/u/Epic)\
**Post date:** [05.Июнь.2018 06:13:59 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/18 "2018-06-05T06:13:59Z")

</div>

Я создал новое поле в запросе, куда можно вписать причину отклонения запроса и на пользовательском портале в форму вывода добавил строку “Причина отклонения”, причина туда выводится. Работает нормально.  
Но конечно получилось не совсем удобно, т.к. сначала надо написать причину отклонения, потом нажать “применить”, только потом отклонять запрос через расширение Approval process automation.  
Я внес изменения напрямую в файлах:

- datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml
- env-production/core/module\_designs/itop-portal.xml.

Когда вношу данные изменения через отдельное расширение, то не работает.  
**Как сделать данные изменения через расширение?**  
Код расширения (сначала добавляю поле для ввода в запрос в админской консоли, потом запись в форму вывода в пользовательском портале):

```
<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
<classes>
<class id="UserRequest">
      <fields>
        <field id="rejection_reason" xsi:type="AttributeText" _delta="define">
          <sql>rejection_reason</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
      </fields>
<presentation>
        <details _delta="redefine">
          <items>
		  <item id="col:col3">
			<items>
			<item id="fieldset:Ticket:resolution">
			<rank>20</rank>
				<items>
				<item id="rejection_reason">
				<rank>100</rank>
				</item>
				</items>
			</item>
            </items>
		</item>
        </items>
        </details>
      </presentation>
</class>
</classes>
  
<module_designs>
<module_design id="itop-portal" xsi:type="portal" _delta="redefine">
<form id="ticket-edit">
<class>Ticket</class>
<fields/>
<twig>
    <div class="row">
        <div class="col-sm-7">
        <fieldset>
              <legend>{{'Ticket:baseinfo'|dict_s}}</legend>
			  <div class="col-sm-6">
					<div class="form_field" data-field-id="rejection_reason" data-field-flags="read_only"/>
			  </div>
        </fieldset>
		</div>
	</div>
</twig>
</form>
</module_design>
</module_designs> 
 </itop_design>

```

Еще не получается вывести имя пользователя отклонившего запрос, т.к. этот атрибут принадлежит классу ApprovalScheme.  
Поэтому возникает вопрос:  
**Как можно связать 2 класса, чтобы объекты одного класса можно было выводить в другом классе?**  
Надо связать классы UserRequest и ApprovalScheme, чтобы выводить причину отклонения и пользователя отклонившего запрос из класса ApprovalScheme в запросе и на пользовательском портале?

---

<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:** [06.Июнь.2018 07:36:27 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/19 "2018-06-06T07:36:27Z")

</div>

> [@Epic](#):
>
> Когда вношу данные изменения через отдельное расширение, то не работает.

Всё не работает?

---

<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:** [06.Июнь.2018 07:40:27 UTC](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22/20 "2018-06-06T07:40:27Z")

</div>

> [@Epic](#):
>
> \<details \_delta=“redefine”\>

> [@Epic](#):
>
> \<module\_design id=“itop-portal” xsi:type=“portal” \_delta=“redefine”\>

redefine означает переопределение всего содержимого тега. В данном случае ты целиком переписал всё представление тикета, заменив его на одно поле rejection\_reason, а весь портал превратил в одну форму, состоящую из того же поля.

[Следующая страница](https://community.itop-itsm.ru/t/kastomizacziya-polzovatelskogo-portala/22.md?page=2)
