Sign in to follow this  
Followers 0
KonstantinT

Добавить функцию к полю

7 posts in this topic

Здравствуйте!
Как при создании поля по инструкции: 

добавить дополнительную функцию которая будет выводить под этим полем на странице редактирования Контрагента категории этого контрагента, заданные через связь с категориями товаров.


Если у контрагента задана одна или несколько категорий они выводятся на странице редактирования в выпадающем списке можно выбрать ответственного за эту категорию. Выпадающий список формируется из заданных контрагенту пользователей тоже через связь. При выборе для категории пользователя в поле выше записывается ID категории и имя пользователя: {"6153b311-251f-437a-5253-58380e8edb3a":" Петя","562e3004-e513-c0ca-2c09-583d48f94d92":" Аня","453e3004-e513-c0ca-2c09-583d48f9404":" Виктор"}. Пока лучше не придумал. По сохранению думаю буду дальше думать. Сейчас задача корректно подключить функцию из файла. Первый раз подключил по такому комменту:
 

1: add yourFieldname.php file
 path: \custom\Extension\modules\yourModule\Ext\Vardefs\yourFieldname.php
 code: $dictionary["yourModule"]["fields"]["yourFieldname"] = array (
'required' => false,
    'name' => 'yourFieldname',
    'vname' => 'LBL_YOURFIELDNAME',
    'type' => 'enum',
'required' => false,
'massupdate' => 0,
'comments' => '',
'help' => '',
'importable' => 'true',
'duplicate_merge' => 'disabled',
'duplicate_merge_dom_value' => '0',
'audited' => false,
'reportable' => true,
'len' => 70,
'size' => '20',
'function' => 'getDropdown',
);

In vardef i called a function 'getDropdown' 

2: getDropdown.php
path: \custom\Extension\application\Ext\Utils\getDropdown.php
code: function getDropdown(){
static $dropDown = null;
if(!$dropDown){
  global $db;
  $query = "SELECT id,name  FROM accounts where deleted = 0 order by name asc ";
  $result = $db->query($query, false);
  $dropDown = array();
  $dropDown[''] = '';
  while (($row = $db->fetchByAssoc($result)) != null) {
   $dropDown[$row['id']] = $row['name'];
  }
}
return $dropDown;
} 

Must Quick Repair and Rebuild to see the changes.

потом поставил чистую CRM пытался сделать то же самое но это не сработало.

В прикреплении наглядно то чего хочу добиться.

2016-12-14_11-41-55.png

Share this post


Link to post
Share on other sites

В общем создал в SuiteCRM/custom/Extension/modules/Accounts/Ext/Vardefs 
файл custom_fields.php с таким содержимым:

<?php
$dictionary["Account"]["fields"]["custom_fields"] = array (
'required' => false,
'name' => 'custom_fields',
'vname' => 'LBL_CUSTOM_FIELDS',
'type' => 'varchar',
'massupdate' => ,
'comments' => '',
'help' => '',
'importable' => 'true',
'duplicate_merge' => 'disabled',
'duplicate_merge_dom_value' => '0',
'audited' => false,
'reportable' => true,
'function' => array('name' => 'getFields', 'returns' => 'html', 'include' => 'сust_f/get_field.php'),
'source' => 'non-db',
);

?>

Возможно некоторые значения можно убрать но я с этим намучился так что пусть работает как есть.
Кодировку поставил UTF8 (без BOM)
 

 

Потом создал файл русификации для поля SuiteCRM/custom/Extension/modules/Accounts/Ext/Language/ru_RU.custom_fields.php
с содержимым

<?php
$mod_strings['LBL_CUSTOM_FIELDS'] = 'Категории и пользователи';

кодировка тоже UTF8 (без BOM)

 

Затем создал каталог сust_f и в нем файл get_drop.php 

SuiteCRM/сust_f/get_drop.php

там уже на Ваше усмотрение функцию пишите с именем которое указали в первом файле в этой строке:
 

'function' => array('name' => 'getFields', 'returns' => 'html', 'include' => 'Cust_f/get_field.php'),

в моем случае функция называется getFields

например:

function getFields ($bean, $event, $arguments){	
	$te = $bean->id; //получим ID контрагента
	return $te;
}

 

потом делаем Быстрое восстановление через админку и все работает.

Рекурсивно задал права всем файлам и каталогам SuiteCRM 755
и на каталоги и файлы cache, custom, data, modules, themes рекурсивно 775

Edited by KonstantinT

Share this post


Link to post
Share on other sites

Теперь еще вопрос как сохранить ? Могу сделать конечно как писал с помощью javascript вставлять в поле, а это поле сохранять. Но хотелось бы сразу сохранять без использования доп полей.

Share this post


Link to post
Share on other sites
В 14.12.2016 at 11:23, KonstantinT сказал:

Теперь еще вопрос как сохранить ? Могу сделать конечно как писал с помощью javascript вставлять в поле, а это поле сохранять. Но хотелось бы сразу сохранять без использования доп полей.

можете сделать хук before_save например, и в нем принимать данные из фомы, формировать из них массив, и переводить для сохранения массив в строку при помощи base64_encode(serialize())

а когда будете открывать страницу для редактирования, то можно читать эту строку, разворачивать массив и формировать нужный текст на странице.

а базовыми средствами CRM-системы не хотите сделать? сформировать модуль, который будет содержать связьку продукт-ответственный, и прикрепить его один-ко-многим к контрагенту, чтобы в виде сабпанели был. может не так удобно в плане редактирования, зато сделаете все из студии

Share this post


Link to post
Share on other sites

Здравствуйте! 
Нужна связка категория-ответственный, а не продукт-ответственный 
В чем будет неудобство редактирования?
Можете подробнее написать как Вы предлагаете сделать базовыми средствами?

Share this post


Link to post
Share on other sites
В 16.12.2016 at 12:04, SpravkaCRM.ru сказал:

можете сделать хук before_save например, и в нем принимать данные из фомы, формировать из них массив, и переводить для сохранения массив в строку при помощи base64_encode(serialize())

а когда будете открывать страницу для редактирования, то можно читать эту строку, разворачивать массив и формировать нужный текст на странице.

а как получить данные из формы если поля формируются отдельной функцией? В $bean этих полей нет.

Share this post


Link to post
Share on other sites
В 22.12.2016 at 13:26, KonstantinT сказал:

а как получить данные из формы если поля формируются отдельной функцией? В $bean этих полей нет.

$_REQUEST?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0