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

  • Последние публикации

  • Последнее с форума

    • Всем привет! Столкнулся с небольшой проблемой: SuiteCRM автоматически при отображении поля типа Text преобразует все URL в ссылки. То есть берет URL и "пихает" его в тег <A>. Классная штука на самом деле, удобно. Но мне надо было отключить её, так как я создал поле "source" => "non-db", в котором хочу сам формировать список ссылок, чтобы в карточке записи был набор ссылок типа такого: Ссылка 1 Ссылка 2 Ссылка 3 Именно так, нормальное название. А не: http://site.ru/page1.html http://site.ru/page2.html http://site.ru/page3.html Ведь удобнее видеть нормальное человеческое описание, кликнуть на него и попасть на желаемую страницу. По реализации: Добавил новое поле в модуль, в котором будет находится текст с списком ссылок: '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>'; } }   И вот что у меня получилось: Получается, что я сформировал корректную 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, ), ), ), И вот что получилось после быстрого восстановления: То, что нужно!  
    • uid=48(apache) gid=48(apache) groups=48(apache) find /var/www/vhosts/crmhosting.ru/crm/public_html -type f | xargs chmod 0644 - команда не прошла : Много строчек с:
      chmod: cannot access '\320\260\320\273\321\214\320\261\320\276\320\274\320\275.jpg': No such file or directory
        После этого на сайте появляется: You don't have permission to access / on this server. Выставил на все файлы 777 - сайт опять заработал/ В таблицу стали заноситься данные. Галочка аудита не заработала. #       modified:   custom/Extension/modules/Buildings/Ext/Vardefs/sugarfield_about_owner.php
      #       modified:   custom/modules/Buildings/Ext/Vardefs/vardefs.ext.php
        Галочка аудита не заработала. Так же не работает.
    • Hi nvnam1 ! You must copy the minimize code from  include / javascript / yui / build / autocomplete / autocomplete.js  in  include / javascript / yui / build / autocomplete / autocomplete-min.js  Data in the cache comes from there. After you need to delete the cache folder or js filles which contain YAHOO.widget.AutoComplete.prototype._updateValue  function you might need to clear your browser cache. Sorry for bad english.  
    • Ок, спасибо, SpravkaCRM.ru. Хотелось убедиться, что я правильно понимаю функционал этого ограничения. Наша очередь писем не рассылалась совсем, поэтому я решил, что превышение этого параметра блокирует рассылку. Это, к счастью, не так . В ходе дальнейших тестов мне удалось добиться нормального поведения очереди писем и заданий планировщика. При каждом срабатывании задания на рассылку почты отправлялась пачка писем, равная количеству, заданному параметром. А проблема была в планировщике, там зависла предыдущая задача в состоянии "running" и блокировала последующие задания. Так как время жизни этих заданий сутки(!) пришлось прибить её руками, примерно так: SELECT * FROM [ваша база].job_queue WHERE status != 'done'; //Получаем id
      UPDATE [ваша база].job_queue SET status = 'done', resolution = 'success' WHERE id = '[ставим сюда id ]'; А время жизни зависших заданий планировщика можно поменять в config_override.php, добавив/изменив параметр $sugar_config['jobs']['timeout'] = время в секундах, например 3600 (час).
    • Добрый день! при помощи этой настройки можно регулировать нагрузку как на собственный сервер, так и на почтовый сервер. Большое количество писем, если сервер не очень мощный, может привести к нехватке памяти и все встанет. Так же некоторые почтовые сервера имеют ограничения на кол-во отправляемых через них писем в течении какого то кол-ва времени (в рамках борьбы со спамом или предлагая бизнес-тарифы).  Для регулирования подобных вещей и применяется этот параметр
×