SalesPlatform Vtiger CRM Developers Динамическое сокрытие блоков карточки

Материал из SalesPlatform Wiki
Перейти к: навигация, поиск

Главная страница руководства


Система SalesPlatform Vtiger CRM позволяет скрывать поля для определенных ролей через Настройки CRM. Но иногда необходимо скрывать поля динамически в зависимости от выбранных значений других полей. Данную возможность можно реализовать программно.
В качестве примера скроем блок “Описание” для Модуля “MyModule” при выборе Статуса “Неактивно”, при выборе Статуса “Активно” блок “Описание” будет отображаться. Для реализации такой возможности необходимо создать файл “Edit.js” (скрипт, подключаемый ядром Vtiger при редактировании карточки) в директории “layouts/vlayout/modules/MyModule/resources/” со следующим содержимым:

Vtiger_Edit_Js("MyModule_Edit_Js", {}, {
    hideField : function () {
        //Получение Формы
        var editViewForm = this.getForm();
        //Получение выбранного значения 
        var category = editViewForm.find('[name="is_active_status"] option:selected').text();
        editViewForm.find('table').show();
        if (category == "Неактивно"){
            //Скрытие блока “Описание”
            editViewForm.find('table:contains(' + "Описание" + ')').hide();
        } else {
            //Отображение блока “Описание”
            editViewForm.find('table:contains(' + "Описание" + ')').show();
        }
    },
       
    registerHideField : function () {
         var editViewForm = this.getForm();
         var thisInstance = this;
         thisInstance.hideField();
         //Если значение поля Статус изменено, то вызывается метод “hideField()”
         editViewForm.find('[name="is_active_status"]').on('change', function (e) {
              thisInstance.hideField();
         });
    },
       
    registerEvents: function () {
        this._super();
        this.registerHideField();
    }
});
Vt important.png Важно
Для версии SalesPlatform Vtiger CRM 7 файл “Edit.js” следует создать в директории “layouts/v7/modules/MyModule/resources/” , и в строках, которые отвечают за скрытие и показ блока, добавить метод parent. В итоге строки будут выглядеть следующим образом:
...
editViewForm.find('table:contains('+ "Описание" + ')').parent("div").hide();
...
editViewForm.find('table:contains('+ "Описание" + ')').parent("div").show();
...

Для поиска HTML-элемента используется метод find() библиотеки jQuery. Скрывается элемент методом hide(). Методом show() элемент отображается.
В результате, при выборе в поле Статус значения “Активно” блок “Описание” отображается (см. Рисунок 1).

Рис. 1: Отображение блока “Описание”


При выборе в поле Статус значения “Неактивно” блок “Описание” скрывается (см. Рисунок 2).

Рис. 2: Скрытие блока “Описание”


Для реализации аналогичного поведения при детальном просмотре карточки Модуля необходимо создать файл “Detail.js” в директории “layouts/vlayout/modules/MyModule/resources/” с идентичным кодом (см. выше). Но только вместо метода “Vtiger_Edit_Js“ используется “Vtiger_Detail_Js”:

 Vtiger_Detail_Js("MyModule_Detail_Js", { … });
Vt important.png Важно
Для версии SalesPlatform Vtiger CRM 7 файл “Detail.js” следует создать в директории “layouts/v7/modules/MyModule/resources/” , и в строки, которые отвечают за получение статуса, скрытие и показ блока, необходимо внести изменения. В итоге строки будут выглядеть следующим образом:
...
var category = editViewForm.find('[data-name="is_active_status"]').attr("data-value");  
...
editViewForm.find('h4:contains('+ "Описание" + '),table:contains('+ "Описание" + ')').closest(".block").hide();
...
editViewForm.find('h4:contains('+ "Описание" + '),table:contains('+ "Описание" + ')').closest(".block").show();
...

В результате просмотра карточки Модуля в детальном режиме можно наблюдать изменения в зависимости от выбранного статуса (см. Рисунок 3, 4).

Рис. 3: Детальный просмотр карточки Модуля


Рис. 4: Детальный просмотр карточки Модуля



Главная страница руководства

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Документация
Разработчикам
Присоединяйтесь!
Инструменты