Jump to content

Список полезных ссылок в карте записи и отключение преобразования ссылок в поле типа 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

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

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...