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", то в общем списке можете наблюдать логотип организации.
Как видите, очень простой в реализации функционал. Всего лишь нужно программно создать новое поле и откорректировать отображение таблицы. Остались вопросы — задавайте!