Версии: 4+
Описания разделов CRM системы хранятся в каталоге config/sections/<Код раздела>. В каждом каталоге содержится файл structure.xml с описанием таблиц и карточек раздела. А также .js и .php файлы с описанием бизнес-логики.
Если Вы желаете упростить процесс обновления системы до свежих версий, то мы не рекомендуем изменять эти файлы. Вместо этого мы рекомендуем выполнять изменения в одноимённых файлах с окончанием _custom. Например, если требуется в карточку компании добавить новое поле, то скопируйте файл config/sections/Account/structure.xml в config/sections/Account/structure_custom.xml и выполните необходимые настройки в новом файле.
Далее подробнее описан принцип работы с каждым типом файла.
XML
При копировании XML файла (в structure_custom.xml) всё его содержимое будет переопределяться новой копией файла. При обновлении системы будет перезаписан только прежний XML файл. Это означает, что изменения XML файла из обновления не будут отражены в системе. Но и настройки, выполненные Вами, не будут изменены.
PHP
Часто требуется к стандартной бизнес-логике добавить свои функции. Для этой цели скопируйте PHP файл, в котором содержится необходимый обработчик. Например, s_account.php в s_account_custom.php. Переименуйте класс соответствующим образом (в данном случае s_Account
в s_Account_custom
). Вы можете наследовать новый класс от старого. Например.
<?php
require_once dirname(__FILE__) . '/s_account.php';
class s_Account_custom extends s_Account
{
function onPrepare($params)
{
// Обработчик родительского класса
$result = parent::onPrepare($params);
// Заполняем значения по умолчанию только при создании новой записи
if ($params['mode'] != 'insert') {
return $result;
}
// Пример
$result = FieldValueFormat('Description', 'Test description', null, $result);
return $result;
}
}
В таком случае при обновлении системы заменяется старый PHP файл с родительским классом. В итоге оба файла будут выполнять свои функции.
Javascript
По аналогии с PHP допускается создавать копии .js файлов (c _custom), в которых можно дополнять или переопределять обработчики родительского класса.
irisControllers.classes.c_Account_custom = irisControllers.classes.c_Account.extend({
onOpen: function () {
// Родительский обработчик
irisControllers.classes.c_Account_custom.__super__.onOpen.call(this);
alert('Новый функционал');
}
});
Изменение порядка наследования
Для версии 4.0.09+.
По умолчанию определена 3-уровневая иерархия. На примере c_account.js:
c_account_custom.js —> c_account_industry.js —> c_account.js
Если Вы желаете изменить порядок наследования, то для этого можно создать файл config/loader_custom.php следующего содержания.
<?php
class Loader_custom extends Loader
{
// Конструктор
public function __construct()
{
parent::__construct();
/**
* В порядке наследования
*/
$this->_order = array(
'',
'_bank',
'_mycompany',
'_myfilial',
);
}
}
Теперь иерархия будет выглядеть так.
c_account_myfilial.js —> c_account_mycompany.js —> c_account_bank.js —> c_account.js
Шаблоны
В 4-й версии Iris CRM стандартные представления содержатся в каталоге core/engine/views/. Если в шаблоне представление не переопределено, то используется стандартное представление. Для изменения представления скопируйте файл с соответствующим представлением из ядра в каталог views Вашего шаблона (в core/templates/<Ваш шаблон>/views).
Описание представлений.
Представление | Описание |
---|---|
card.php | Карточка |
card-details.php | Вкладки карточки |
card-field-<Тип>.php | Поле карточки соответствующего типа |
card-form.php | Форма карточки |
card-header.php | Заголовок карточки |
card-loading.php | Загрузка карточки |
card-title.php | Заголовок карточки |
current-time.php | Текущее время |
dialog.php | Диалоговое окно |
filter.php | Фильтры раздела |
grid.php | Таблица с данными |
grid-buttons.php | Нижняя панель с кнопками таблицы |
grid-search.php | Строка поиска в таблице с данными |
grid-summary.php | Строка с итоговыми данными таблицы |
menu.php | Меню |
menu-refresh-icon.php | Иконка для пункта меню при загрузке раздела |
reminder.php | Напоминания |
report.php | Отчёт |
user-info-panel.php | Информация о пользователе |
workspace.php | Шаблон |
База данных
- Добавлять/редактировать таблицы и колонки рекомендуется только из интерфейса системы в разделе Администрирование-Таблицы. В этом случае созданные таблицы и колонки будут доступны для вывода в отчеты. В такие таблицы можно импортировать данные штатными средствами.
- Не стоит переименовывать таблицы и колонки, относящиеся к стандартной конфигурации. Также не рекомендуется менять типы стандартных колонок. Это усложнит дальнейшую поддержку системы. В таких случаях рекомендуется создавать новые таблицы/колонки. С другой стороны, изменить ограничения в стандартных колонках — нормальная практика.
- Соглашение о наименованиях
- Названия таблиц и колонок на английском языке в нижнем регистре.
- В названиях таблиц необходимо использовать префикс iris_. Например, таблица раздела «Компании» — irisaccount. В этом случае не будет проблем при работе с API.
- Поля-справочники (т.е. колонки, ссылающиеся на другие записи), по возможности следует называть по следующему шаблону: {Название таблицы}id. Например, поле, ссылающееся на справочник компании — accountid.
- Символ «» в названиях таблиц рекомендуется использовать только в префиксе и для таблиц-вкладок. Например, iris_projectproduct — таблица продукта в заказе, тут project от product разделен символом «». А таблица iris_projecttype — справочник типов заказа. В ней project от type ничем не разделен.
Обработчики в отчетах
Если стандартных возможностей конструктора отчетов недостаточно, то можно использовать серверные и клиентские обработчики отчетов. Для этого в первую очередь в конструкторе отчета необходимо указать код отчета, для которого надо переопределить логику отрисовки. Для этого заполните поле Код в карточке отчета. Например, TasksByState.
Серверные обработчики
Создайте файл iriscrm/config/sections/Report/reports/tasksbystate_custom.php (в нижнем регистре). Класс, который определяется в этом файле, должен переопределять необходимые методы класса ReportRender. Обратите внимание на название класса, оно состоит из <Код отчёта>Report.
<?php
class TasksByStateReport_custom extends ReportRender
{
/**
* Построение таблицы отчёта
*/
public function buildTable()
{
$table = null;
if (!$this->format || $this->format == 'html') {
$table .= '<h2 id="headers">this::_show_info</h2><pre>';
$table .= print_r($this->_show_info, true);
$table .= '</pre>';
$table .= '<h2 id="data">this::data</h2><pre>';
$table .= print_r($this->data, true);
$table .= '</pre>';
// Если этих элементов нет в стандартном шаблоне,
// то можно их добавить вручную (для вызова JavaScript):
// (в версиях до 4.0.29)
$table .= '<!--#aftershowscript#-->';
$table .= '<!--#aftershowfunction#-->';
}
else
if ('csv' == $this->format) {
$table = BuildReportTable($this->data, $this->_show_info,
$this->_sql, $this->_params,
$this->errorinfo, $this->format);
}
return $table;
}
}
Метод buildTable()
должен возвращать табличную часть.
Аналогично можно переопределять и другие методы класса ReportRender.
Клиентские обработчики
Создайте файл iriscrm/config/sections/Report/reports/tasksbystate_custom.js (в нижнем регистре). Обратите внимание на название класса, оно состоит из <Код отчёта>Report. В этом классе достаточно определить обработчик onOpen().
irisControllers.classes.TasksByStateReport_custom = IrisController.extend({
onOpen: function() {
alert(jQuery('#headers').text());
}
});