Jump to content
SpravkaCRM.ru - Ваш справочник по CRM
SpravkaCRM.ru

Список полезных ссылок в карте записи и отключение преобразования ссылок в поле типа Text

Recommended Posts

Всем привет!

Столкнулся с небольшой проблемой: SuiteCRM автоматически при отображении поля типа Text преобразует все URL в ссылки. То есть берет URL и "пихает" его в тег <A>. Классная штука на самом деле, удобно. Но мне надо было отключить её, так как я создал поле "source" => "non-db", в котором хочу сам формировать список ссылок, чтобы в карточке записи был набор ссылок типа такого:

Именно так, нормальное название. А не:

Ведь удобнее видеть нормальное человеческое описание, кликнуть на него и попасть на желаемую страницу.

По реализации:

  • Добавил новое поле в модуль, в котором будет находится текст с списком ссылок:
'different_links' =>
    array (
        'required' => false,
        'name' => 'different_links',
        'vname' => 'LBL_DIFFERENT_LINKS',
        'type' => 'text',
        'massupdate' => 0,
        'no_default' => false,
        'comments' => '',
        'help' => '',
        'importable' => 'true',
        'duplicate_merge' => 'disabled',
        'duplicate_merge_dom_value' => '0',
        'audited' => true,
        'reportable' => true,
        'unified_search' => false,
        'merge_filter' => 'disabled',
        'source' => 'non-db',
    ),
  • Добавил хук after_retrieve в custom/Extension/modules/lm_CRMSystems/Ext/LogicHooks/calculateFields.php, чтобы можно было наполнять поле текстом:
if (!isset($hook_array) || !is_array($hook_array)) {
    $hook_array = array();
}
if (!isset($hook_array['after_retrieve']) || !is_array($hook_array['after_retrieve'])) {
    $hook_array['after_retrieve'] = array();
}
$hook_array['after_retrieve'][] = Array(10, 'Ссылка на карточку на сервере', 'custom/modules/lm_CRMSystems/hooks.php', 'lm_CRMSystemsHooks', 'calculateFields');
  • Добавляем функцию для хука в файле custom/modules/lm_CRMSystems/hooks.php:
/**
 * Получение ссылки на карточку CRM-системы на ее Сервере
 * @param $bean
 * @param $event
 * @param $arguments
 */
public function calculateFields($bean, $event, $arguments) {
    global $db;
    global $sugar_config;

    // Ссылки
    $bean->different_links = "";

    // Ссылка на карточку на другом сервере
    switch ($sugar_config['CRMSystems']['systemType']) {

        case 'base':
            // Мы находимся на Базовом сервере
            // Пытаемся сформировать ссылка на карточку на сервере с проектами

            // Получаем URL сервера
            if(!empty($bean->lm_crmservers_lm_crmsystemslm_crmservers_ida)) {
                $sql = "SELECT `url` FROM `lm_crmservers` WHERE `deleted` = 0 AND `id` = '{$bean->lm_crmservers_lm_crmsystemslm_crmservers_ida}'";
                $url = $db->getOne($sql, true);
                $bean->different_links .= '<li><A href="'.$url . '/index.php?module=lm_CRMSystems&action=DetailView&record=' . $bean->id.'" target="_blank">Карта на сервере с проектом</A></li>';
            }

            break;

        case 'projects':
            // Мы находимся на Сервере с проектами
            // Добавляем ссылку на карточку на Базовом сервере

            // Ищем базовый сервер
            $sql = "SELECT `url` FROM `lm_crmservers` WHERE `deleted` = 0 AND `type` = 'base'";
            $url = $db->getOne($sql, true);
            $bean->different_links .= '<li><A href="'.$url . '/index.php?module=lm_CRMSystems&action=DetailView&record=' . $bean->id.'" target="_blank">Карта на базовом сервере</A></li>';
            break;

    }

    if($bean->different_links != '') {
        $bean->different_links = '<ul>'.$bean->different_links.'</ul>';
    }

}

 

И вот что у меня получилось:

2018-09-22_11-05-09.thumb.png.c7c13380bf2c698e52b7238c0a23f65c.png

Получается, что я сформировал корректную HTML-ссылку, а SuiteCRM внутри нее нашла URL, и обрамила ее своей ссылкой. Вышло не очень.

Полез в функцию-обработчик полей типа Text include/SugarFields/Fields/Text/SugarFieldText.php, и видим там следующее:

class SugarFieldText extends SugarFieldBase {

   function getDetailViewSmarty($parentFieldArray, $vardef, $displayParams, $tabindex) {
        if(!isset($displayParams['nl2br'])){
            $displayParams['nl2br'] = true;
        }
        if(!isset($displayParams['htmlescape']) && $vardef['editor'] != "html") {
            $displayParams['htmlescape'] = true;
        }
            if(!isset($displayParams['url2html'])) {
            $displayParams['url2html'] = true;
        }
      return parent::getDetailViewSmarty($parentFieldArray, $vardef, $displayParams, $tabindex);
    }

 

Тут особо интересный блок:

if(!isset($displayParams['url2html'])) {
    $displayParams['url2html'] = true;
}

То есть если при отображении поля использовать 'url2html' => false, то в теории оно не должно преобразовывать ссылки.

Пробуем: в файле custom/modules/lm_CRMSystems/metadata/detailviewdefs.php описываем поле different_links:

 

11 => 
array (
  0 => 'lm_crmservers_lm_crmsystems_name',
  1 => array(
      'name' => 'different_links',
      'label' => 'LBL_DIFFERENT_LINKS',
      'displayParams' => array(
          'url2html' => false,
      ),
  ),
),

И вот что получилось после быстрого восстановления:

2018-09-22_11-10-49.thumb.png.541f2a46800ebdbd365bc3aea595ecf3.png

То, что нужно!

 

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

×