Добавляем поле с изображением в любой модуль Vtiger CRM

Добавляем поле с изображением в любой модуль Vtiger CRM

VtigerCRM даёт нам отличный функционал по управлению полями в любом модуле. Вы можете добавлять или удалять поля из его настроек. Но как быть, если вы хотите загружать в модуль изображения? Например, в Vtiger уже предусмотрен функционал, позволяющий загружать в карточку контактов и товаров картинки, которые затем будут отображаться в режиме просмотра. Как такой функционал добавить в другие модули?

VtigerCRM даёт нам отличный функционал по управлению полями в любом модуле. Вы можете добавлять или удалять поля из его настроек. Но как быть, если вы хотите загружать в модуль изображения? Например, в Vtiger уже предусмотрен функционал, позволяющий загружать в карточку контактов и товаров картинки, которые затем будут отображаться в режиме просмотра. Как такой функционал добавить в другие модули?

Если вы попробуете зайти в управление полями, то там не окажется типа "Изображение" или "Файл". Тем не менее, если посмотреть внимательно на то, как устроено добавление изображений в модуле "Товары" и "Контакты", то можно заметить, что этот функционал лежит именно на специальном поле. И называется оно во всей системе стандартно - imagename. UIType этому полю назначен 69.

Соответственно, можно предположить, что если мы добавим поле в любом модуле с именем imagename, то возможность прикреплять картинки у нас должно появиться автоматически.

Давайте проверим эту теорию на модуле "Контрагенты". Предположим, мы хотим видеть логотипы организаций в карточке контрагента.

Первое, с чего нам нужно начать разработку — это для нашего нового поля создать блок. Перейдём в управление полями и создадим новый блок под названием "Account Image".

Теперь напишем специальный скрипт, который добавит нам поле с изображением в модуль "Контрагенты" в блок Account Image:

 

<?php

$Vtiger_Utils_Log = true;

chdir('../');

require_once('vtlib/Vtiger/Module.php');

require_once('vtlib/Vtiger/Block.php');

require_once('vtlib/Vtiger/Field.php');

 

$module = Vtiger_Module::getInstance('Accounts');

 

$block = Vtiger_Block::getInstance('Account Image', $module);

 

 

// Add field

$fieldInstance = new Vtiger_Field();

$fieldInstance->name = 'imagename';

$fieldInstance->table = 'vtiger_account';

$fieldInstance->column = 'imagename';

$fieldInstance->label = 'Account Image';

$fieldInstance->columntype = 'varchar(150)';

$fieldInstance->uitype = 69;

$fieldInstance->typeofdata = 'V~O';

$fieldInstance->block = $block;

$fieldInstance->sequence = 1;

$fieldInstance->quickcreate = 3;

$fieldInstance->info_type = 'ADV';

$fieldInstance->masseditable = 0;

$block->addField($fieldInstance);

 

echo 'OK. done';

 

Сохраним скрипт в папке scripts и запустим его один раз из браузера. После этого вы можете удалить этот файл. Теперь вы можете наслаждаться новым функционалом в модуле "Контрагенты" - у вас появилась возможность прикреплять картинки. При этом после загрузки изображения, в режиме просмотра логотип будет виднеться прямо перед названием организации. Согласитесь, очень удобно.

Но есть одна недоработка. Если вы попытаетесь вывести это поле в списке Контрагентов, то там будет просто пустое значение. Никаких логотипов в таблице показано не будет. Давайте попробуем исправить этот баг. Для этого переходим в файл layouts/v7/modules/Vtiger/ListViewContents.tpl и в районе строки 214 перед закрытием блока if, а именно перед строчками 

{else}

{$LISTVIEW_ENTRY_VALUE}

{/if}

Добавляем наш блок кода:

{else if $LISTVIEW_HEADER->get('uitype') eq '69'}

{foreach key=ITER item=IMAGE_INFO from=$LISTVIEW_ENTRY->getImageDetails()}

{if !empty($IMAGE_INFO.url)}

<img src="{$IMAGE_INFO.url}" height="40">

{/if}

{/foreach}

 

После этого, если вы добавите в таблицу новое поле "Account Image", то в общем списке можете наблюдать логотип организации.

Как видите, очень простой в реализации функционал. Всего лишь нужно программно создать новое поле и откорректировать отображение таблицы. Остались вопросы — задавайте!