Vtiger CRM даёт нам отличную возможность быстро и легко созавать поля в любом модуле. Но при таком подходе есть одна загвоздка.
В редакторе полей вы можете задавать заголовок поля, даже его длину, но при создании система назначает имя вновь созданному полю автоматически, при этом имя будет совсем нечитаемым, например cf_997. Где cf - сокращённо "Custom Field", а 997 - это номер нового поля.
И это совсем не удобно для разработки или для интеграции по API. Если вы создаёте только одно поле, то ничего страшного. А если кастомных полей много, то такое разнообразие цифр превращается в кошмар.
Вы просто будете вынуждены проверять по базе как называется ваше поле, чтобы вставить его номер в код. Но что если вместо номера будет какой-то понятный текст. Например, cf_friend_name. Согласитесь, это намного более удобно и проще в поддержке?
Ниже я предлагаю несколько рекомендаций по изменению редактора полей, чтобы вы имели возможность задать собственное имя полю. Для этого вам потребуются базовые знания программирования и внести корректировки в 4 файла.
Итак, для начала меняем файл layouts/v7/modules/Settings/LayoutEditor/FieldCreate.tpl, в районе строки 77.
Под этой строкой:
{if !$IS_FIELD_EDIT_MODE}
Добавляем следующее:
<div class="form-group">
<label class="control-label fieldLabel col-sm-5">
{vtranslate('Field Name', $QUALIFIED_MODULE)}
<span class="redColor">*</span>
</label>
<div class="controls col-sm-7">
<input type="text" class='inputElement col-sm-9' maxlength="50" {if $IS_FIELD_EDIT_MODE}disabled="disabled"{/if} name="fieldName" value="{vtranslate($FIELD_MODEL->get('label'), $SELECTED_MODULE_NAME)}" data-rule-alphanumeric='true' style='width: 75%' />
</div>
</div>
Далее файл modules/Settings/LayoutEditor/models/Module.php в районе строки 146
Измените следующий код:
$max_fieldid = $db->getUniqueID("vtiger_field");
$columnName = 'cf_'.$max_fieldid;
$custfld_fieldid = $max_fieldid;
На этот:
if(!empty($params['fieldName'])){
$columnName = 'cf_'.$params['fieldName'];
}
else
{
$max_fieldid = $db->getUniqueID("vtiger_field");
$columnName = 'cf_'.$max_fieldid;
$custfld_fieldid = $max_fieldid;
}
Далее нам потребуется добавить своего рода валидации, чтобы система принимала только цифры и буквы, а также символ нижнего подчёркивания. Колонки в базе данных создаются с таким же названием, как и имя поля. Поэтому без валидации здесь никуда.
layouts/v7/modules/Settings/LayoutEditor/resources/LayoutEditor.js на строке 854,
под строкой:
form.find('[name="fieldLabel"]').attr('data-rule-illegal', "true");
добавьте следующую:
form.find('[name="fieldName"]').attr('data-rule-alphanumeric', "true");
layouts/v7/modules/Vtiger/resources/validation.js на строке 22 добавляем:
jQuery.validator.addMethod("alphanumeric", function(value, element, params) {
if(value){
var regex = /^[a-z0-9_]+$/g;
if(!value.match(regex)){
return false;
}
}
return true;
}, jQuery.validator.format("Small Letters, numbers, and underscores only please"));
Итак, теперь когда вы напишете в поле friendname система создаст новое поле под названием cf_friendname. Т.е. перед названием поля будет добавлен префикс cf_
Это системный префикс, который говорит, что поле было создано вручную и может быть безопасно удалено из CRM.
Если вы не заполните поле, то всё пойдёт по старинке и имя будет создано автоматом, из цифр.