Доброго дня, коллеги.
Дано: форма задачи какого-либо бизнес-процесса. История выводится как поле html дока.
Нужно: сделать ссылки "кликабельными" (если такие имеются).
Т.е. есть некий процесс с кучей задач, исполнители зачастую ссылки вставляют, автор или контролирующий просит сделать их ссылками, а не текстом (странно, что разработчики 1с:ДО это сделали).
Предположительное решение:
При создании формы задачи на сервере имеем:
В ней как раз и формируется html:
Где шаблон html с css выглядит как
Получается, что мне нужно найти все http-ссылки и добавить им тег.
Но как лучше это сделать? regexp? Может кто уже сталкивался и подскажет шаблон по замене? По поиску то их куча...
Или каждый раз вызывать регулярку при открытии задачи не по-феншую? Тогда как оптимальней выполнить замену?
Заранее спасибо.
Дано: форма задачи какого-либо бизнес-процесса. История выводится как поле html дока.
Нужно: сделать ссылки "кликабельными" (если такие имеются).
Т.е. есть некий процесс с кучей задач, исполнители зачастую ссылки вставляют, автор или контролирующий просит сделать их ссылками, а не текстом (странно, что разработчики 1с:ДО это сделали).
Предположительное решение:
При создании формы задачи на сервере имеем:
РаботаСБизнесПроцессамиВызовСервера.ФормаЗадачиПриСозданииНаСервере(ЭтаФорма, Объект);
В ней как раз и формируется html:
Если Форма.Элементы.Найти("ПредставлениеHTML") <> Неопределено Тогда
Форма.ПредставлениеHTML = ОбзорЗадачВызовСервера.ПолучитьОбзорЗадачи(Объект);
КонецЕсли;
Где шаблон html с css выглядит как
HTMLТекст = "<ht ml>
|<head>
|<st yle type=""text/css"">
| body {
| overflow: auto;
| margin-top: 2px;
| margin-left: 2px;
| margin-right: 2px;
| font-family: Arial;
| font-size: 10pt;}
| table {
| width: 100%;
| font-family: Arial;
| font-size: 10pt;
| border: 0px solid;}
| td {vertical-align: top;}
| a:link {
| color: #006699; text-decoration: none;}
| a:visited {
| color: #006699; text-decoration: none;}
| a:hover {
| color: #006699; text-decoration: underline;}
| p {
| margin-top: 7px;}
| img {border: 0px;}
|</style>
|<body>";
ПоказатьПолучается, что мне нужно найти все http-ссылки и добавить им тег.
Но как лучше это сделать? regexp? Может кто уже сталкивался и подскажет шаблон по замене? По поиску то их куча...
Или каждый раз вызывать регулярку при открытии задачи не по-феншую? Тогда как оптимальней выполнить замену?
Заранее спасибо.
По теме из базы знаний
- Знакомство с 1С:Документооборот. История автоматизации и доработок. Печатная форма Лист согласования
- Как внедрить 1С:Документооборот в условиях хаоса
- Видеокурс "1С:Документооборот 2.1 для Директора"
- Бесшовная доменная аутентификация ОС при интеграции 1С:ERP и 1С:Документооборот
- Психологическая техподдержка, или Как пользователи перестали бояться и полюбили 1С:ДО
Найденные решения
Последний удачный шаблон был "(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z-а-яА-Я0-9@:;%_\+.~#?&/=]*)"
Но порывшись в общих модулях ДО я нашёл вот это:
Но порывшись в общих модулях ДО я нашёл вот это:
// Добавляет теги ко всем ссылкам, находящимся в строке.
// Обрабатываются следующие схемы обращения к ресурсу:
// http://, https://, ftp://, mailto:, file://, file:, e1c://, e1cib/
// Кроме того обрабатываются с использованием схемы http:// ссылки начинающиеся с www. без схемы.
// Строки размером 250000 больше не обрабатываются.
Процедура ДобавитьТегиКСсылкам(ТекстHTML) Экспорт
Если СтрДлина(ТекстHTML) > 250000 Тогда
Возврат;
КонецЕсли;
// Ссылки со схемой
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "http://");
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "https://");
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "ftp://");
// Ссылки без схемы
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "www.", "http://www.");
// Навигационные ссылки
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "e1c://");
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "e1cib/", "v8doc:e1cib/");
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "file://");
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "\\", "file://\\");
СписокТомовДисков = РаботаС_HTMLПовтИсп.СписокТомовДисков();
Для Каждого ЭлементТомДиска Из СписокТомовДисков Цикл
ТомДиска = ЭлементТомДиска.Значение;
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, ТомДиска + ":\", "file://" + ТомДиска + ":\");
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, ТомДиска + ":/", "file://" + ТомДиска + ":\");
КонецЦикла;
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "mailto:");
// Скорректировать ссылки со схемами e1c:// и v8doc:e1cib/
СкорректироватьСсылки(ТекстHTML, "e1c://");
СкорректироватьСсылки(ТекстHTML, "e1cib/", "v8doc:e1cib/");
// Заполнить title у ссылок
ЗаполнитьСвойствоTitleУСсылок(ТекстHTML);
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Решил поискать нормальный шаблон для регулярки - их просто нет. То один не подходит, то второй.
Пока остановился на "(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?".
Но ссылка формата "http://www.aaa.com/домашняя.aspx" распознаётся как "http://www.aaa.com/".
Пока остановился на "(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?".
Но ссылка формата "http://www.aaa.com/домашняя.aspx" распознаётся как "http://www.aaa.com/".
Последний удачный шаблон был "(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z-а-яА-Я0-9@:;%_\+.~#?&/=]*)"
Но порывшись в общих модулях ДО я нашёл вот это:
Но порывшись в общих модулях ДО я нашёл вот это:
// Добавляет теги ко всем ссылкам, находящимся в строке.
// Обрабатываются следующие схемы обращения к ресурсу:
// http://, https://, ftp://, mailto:, file://, file:, e1c://, e1cib/
// Кроме того обрабатываются с использованием схемы http:// ссылки начинающиеся с www. без схемы.
// Строки размером 250000 больше не обрабатываются.
Процедура ДобавитьТегиКСсылкам(ТекстHTML) Экспорт
Если СтрДлина(ТекстHTML) > 250000 Тогда
Возврат;
КонецЕсли;
// Ссылки со схемой
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "http://");
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "https://");
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "ftp://");
// Ссылки без схемы
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "www.", "http://www.");
// Навигационные ссылки
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "e1c://");
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "e1cib/", "v8doc:e1cib/");
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "file://");
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "\\", "file://\\");
СписокТомовДисков = РаботаС_HTMLПовтИсп.СписокТомовДисков();
Для Каждого ЭлементТомДиска Из СписокТомовДисков Цикл
ТомДиска = ЭлементТомДиска.Значение;
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, ТомДиска + ":\", "file://" + ТомДиска + ":\");
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, ТомДиска + ":/", "file://" + ТомДиска + ":\");
КонецЦикла;
ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "mailto:");
// Скорректировать ссылки со схемами e1c:// и v8doc:e1cib/
СкорректироватьСсылки(ТекстHTML, "e1c://");
СкорректироватьСсылки(ТекстHTML, "e1cib/", "v8doc:e1cib/");
// Заполнить title у ссылок
ЗаполнитьСвойствоTitleУСсылок(ТекстHTML);
КонецПроцедуры
Показать
(4)Добрый день!
Подскажите получилось ли у вас ссылки сделать кликабельными, чтобы они не только выглядели как ссылки, но и при нажатии на них происходил переход в браузер?
Обрабатываю через процедуру текст описания задачи. Ссылка становится синей, появляется "палец" для клика, но при нажатии переход не происходит.
Заранее спасибо за помощь
Подскажите получилось ли у вас ссылки сделать кликабельными, чтобы они не только выглядели как ссылки, но и при нажатии на них происходил переход в браузер?
Обрабатываю через процедуру текст описания задачи. Ссылка становится синей, появляется "палец" для клика, но при нажатии переход не происходит.
Заранее спасибо за помощь
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот