Доброго времени суток.
В данной статье расскажу как реализовать функционал, который бы позволял пользователям сайта сообщать контент-менеджерам найденные о найденной на сайте ошибке. Ошибка будет высылаться почтовым уведомлением.
Интерфейсные окна будут отрисованы с помощью новой JS-библиотеки продукта.
Итак, пользователь находит на сайте ошибку, выделяет текст, нажимает Ctrl+Enter и получает форму:
Вся логика заключена в компоненте feedback.error, который можете скачать
здесь.
Т.к. сообщение об ошибке будет отправлено на почту, то потребуется создать новый почтовый тип:
и шаблон к нему:
Всё, после этого механизм должен заработать.
Теперь подробнее (так сказать для разработчиков), что находится в скрипте script.js:
function SendError(event, formElem)
Объявление функции-обработчика, которую мы повесили на <body>
if((event.ctrlKey) && ((event.keyCode == 0xA)||(event.keyCode == 0xD)))
Ждём нажатия Ctrl+Enter.
var Dialog = new BX.CDialog({ title: "На сайте обнаружена ошибка!!", head: "В чём заключается ошибка?", content: '<form method="POST" id="help_form" action="/bitrix/templates/.default/send_error.php"> <textarea name="error_desc" style="height: 78px; width: 374px;"></textarea> <input type="hidden" name="error_message"value="'+getSelectedText()+'"> <input type="hidden" name="error_url" value="'+window.location+'"> <input type="hidden" name="sessid" value="'+BX.bitrix_sessid()+'"></form>', resizable: false, height: '198', width: '400'});
Определяем параметры будущего окна и его содержимого.
Определяем набор кнопок:
Dialog.SetButtons([ { 'title': 'Отправить', 'id': 'action_send', 'name': 'action_send', 'action': function(){ BX.ajax.submit(BX("help_form")); this.parentWindow.Close(); } }, { 'title': 'Отмена', 'id': 'cancel', 'name': 'cancel', 'action': function(){ this.parentWindow.Close(); } }, ]);
и выводим окно:
Функция getSelectedText() получает выделенный мышью текст.
Отправка письма идёт в тексте файла component.php:
if (check_bitrix_sessid() && $_SERVER['REQUEST_METHOD'] == "POST" && !empty($_REQUEST["error_message"]) && !empty($_REQUEST["error_url"])) { $arMailFields = Array(); $arMailFields["ERROR_MESSAGE"] = trim ($_REQUEST["error_message"]); $arMailFields["ERROR_DESCRIPTION"] = trim ($_REQUEST["error_desc"]); $arMailFields["ERROR_URL"] = trim ($_REQUEST["error_url"]); CEvent::Send("BX", SITE_ID, $arMailFields); }
Updated:
http://dev.1c-bitrix.ru/community/web…3448#13448
Реализуем традиционный способ улучшения качества текстов на сайте с участием посетителей. Теперь, если они заметят ошибку в тексте, то смогут легко и быстро передать ее администратору сайта, используя сочетание клавиш Ctrl + Enter.
1. Организуем форму отправки сообщений
В нашем примере список вопросов:
— Адрес страницы
— Текст с ошибкой
— Комментарий пользователя.
Подключим форму в шаблоне сайта, описав для нее шаблон:
<?if(!defined(«B_PROLOG_INCLUDED») || B_PROLOG_INCLUDED!==true)die();?>
<div id=»[B]frm_errMsg[/B]»>
<div onclick=»return CloseMsgForm()» id=»close-form-window» title=»<?=GetMessage(«AUTH_CLOSE_WINDOW»)?>»></div>
<?if ($arResult[«isFormErrors»] == «Y»):?><?=$arResult[«FORM_ERRORS_TEXT»];?><?endif;?>
<?=$arResult[«FORM_NOTE»]?>
<?if ($arResult[«isFormNote»] != «Y»)
{
?>
<?=$arResult[«FORM_HEADER»]?>
<table>
<?
if ($arResult[«isFormDescription»] == «Y» || $arResult[«isFormTitle»] == «Y» || $arResult[«isFormImage»] == «Y»)
{
?>
<tr>
<td><?
/***form header***/
if ($arResult[«isFormTitle»])
{
?>
<h3><?=$arResult[«FORM_TITLE»]?></h3>
<?
} //endif ;
if ($arResult[«isFormImage»] == «Y»)
{
?>
<a href=»<?=$arResult[«FORM_IMAGE»][«URL»]?>» target=»_blank» alt=»<?=GetMessage(«FORM_ENLARGE»)?>»><img src=»<?=$arResult[«FORM_IMAGE»][«URL»]?>» <?if($arResult[«FORM_IMAGE»][«WIDTH»] > 300):?>width=»300″<?elseif($arResult[«FORM_IMAGE»][«HEIGHT»] > 200):?>height=»200″<?else:?><?=$arResult[«FORM_IMAGE»][«ATTR»]?><?endif;?> hspace=»3″ vscape=»3″ border=»0″ /></a>
<?//=$arResult[«FORM_IMAGE»][«HTML_CODE»]?>
<?
} //endif
?>
<p><?=$arResult[«FORM_DESCRIPTION»]?></p>
</td>
</tr>
<?
} // endif
?>
</table>
<br />
<?
/**questions ****/
?>
<table class=»form-table data-table»>
<thead>
<tr>
<th colspan=»2″> </th>
</tr>
</thead>
<tbody>
<tr>
<td>Адрес страницы</td>
<td>
<?=$_SERVER[‘SERVER_NAME’].$_SERVER[‘PHP_SELF’]?><input type=»hidden» value=»<?=$_SERVER[‘SERVER_NAME’].’/’.$_SERVER[‘REQUEST_URI’]?>» name=»[I][B]form_text_29[/B][/I]»/>
</td>
</tr>
<tr>
<td>Текст с ошибкой<font color=»red»><span class=»form-required starrequired»>*</span></font></td>
<td><textarea name=»[B][I]form_textarea_30[/I][/B]» id=»[B]frm_err_str[/B]» cols=»20″ rows=»3″ class=»inputtextarea»></textarea></td>
</tr>
<tr>
<td>Комментарий пользователя</td>
<td><textarea name=»[B][I]form_textarea_31[/I][/B]» cols=»20″ rows=»3″ class=»inputtextarea»></textarea></td>
</tr>
<?
if($arResult[«isUseCaptcha»] == «Y»){
?>
<tr>
<th colspan=»2″><b><?=GetMessage(«FORM_CAPTCHA_TABLE_TITLE»)?></b></th>
</tr>
<tr>
<td> </td>
<td><input type=»hidden» name=»captcha_sid» value=»<?=htmlspecialchars($arResult[«CAPTCHACode»]);?>» /><img src=»/bitrix/tools/captcha.php?captcha_sid=<?=htmlspecialchars($arResult[«CAPTCHACode»]);?>» width=»180″ height=»40″ /></td>
</tr>
<tr>
<td><?=GetMessage(«FORM_CAPTCHA_FIELD_TITLE»)?><?=$arResult[«REQUIRED_SIGN»];?></td>
<td><input type=»text» name=»captcha_word» size=»30″ maxlength=»50″ value=»» class=»inputtext» /></td>
</tr>
<?} // isUseCaptcha
?>
</tbody>
<tfoot>
<tr>
<th colspan=»2″>
<input <?=(intval($arResult[«F_RIGHT»]) < 10 ? «disabled=»disabled»» : «»);?> type=»submit» name=»web_form_submit» value=»<?=strlen(trim($arResult[«arForm»][«BUTTON»])) <= 0 ? GetMessage(«FORM_ADD») : $arResult[«arForm»][«BUTTON»];?>» />
<?if ($arResult[«F_RIGHT»] >= 15):?>
<input type=»hidden» name=»web_form_apply» value=»Y» /><input type=»submit» name=»web_form_apply» value=»<?=GetMessage(«FORM_APPLY»)?>» />
<?endif;?>
<input type=»reset» value=»<?=GetMessage(«FORM_RESET»);?>» />
</th>
</tr>
</tfoot>
</table>
<p>
<?=$arResult[«REQUIRED_SIGN»];?> — <?=GetMessage(«FORM_REQUIRED_FIELDS»)?>
</p>
<?=$arResult[«FORM_FOOTER»]?>
<?
} //endif (isFormNote)
?>
</div>
<div class=»b-foo-err»>Для того, чтобы сообщить об ошибке на сайте или дать комментарий: выделите фрагмент текста и нажмите Ctrl+Enter или
<a href=»#» onclick=»return ShowMsgForm();»>отправьте сообщение</a></div>
Обратите внимание, что на вашем сайте параметр поля name должен быть свой.
2. Готовим скрипт для отправки сообщения на JavaScript
Максимальная длина текста, который можно отправить через форму выделением, передается через переменную maxTXT_Length.
function getSelText(){
var txt = »;
if (window.getSelection){
txt = window.getSelection();
}else if (document.getSelection){
txt = document.getSelection();
}else if (document.selection){
txt = document.selection.createRange().text;
}
return txt;
}
var err_maxTXT_Length = ‘Слишком длинный текст’;
var [B]maxTXT_Length[/B] = 100;
document.onkeypress = function(){
var e = arguments[0] || window.event;
var code=e.keyCode?e.keyCode:(e.which?e.which:e.charCode);
if(e.ctrlKey && code==13){
var text = getSelText();
txt = text.toString();
if(txt.length > maxTXT_Length){
alert(err_maxTXT_Length);
}else{
var txtarea = document.getElementById(«[B]frm_err_str[/B]»);
txtarea.value = txt;
ShowMsgForm();
}
}
}
function ShowMsgForm()
{
var div = document.getElementById(«[B]frm_errMsg[/B]»);
if (!div)
return;
div.style.display = «[B]block[/B]»;
document.body.appendChild(div);
return false;
}
function CloseMsgForm()
{
var div = document.getElementById(«[B]frm_errMsg[/B]»);
if (!div)
return;
div.style.display = «[B]none[/B]»;
return false;
}
3. Настраиваем внешний вид формы при помощи CSS
#frm_errMsg {
position:absolute;
top:235px;
left:auto;
right:440px;
z-index:100;
background:#fff;
border:1px solid #bbb;
padding:20px 16px 6px;
width:26.75em;
[B]display:none;[/B]
}
#close-form-window {
background:url(images/bt/close.gif) no-repeat 0 0;
width:12px;
height:11px;
float:right;
cursor:pointer;
margin:-14px -10px 0 0;
display:inline;
}
Готово!
——————————-
Спасибо за внимание!
Читайте свежий выпуск «Кладовки программиста» каждый день!
Назад в раздел
CRM-формы в Битрикс24 создают сами клиенты и размещают их на своих сайтах. Мы не проверяем их содержание, но делаем все, что от нас зависит, чтобы не допустить нарушений. Поэтому в футер CRM-формы мы добавили информацию о том, что Битрикс24 не имеет отношения к этому контенту и возможность сообщить о нарушении.
Мы стремимся предотвратить использование Битрикс24 для незаконных действий, связанных с получением персональных данных, поэтому в футере CRM-формы нельзя отключить возможность сообщить о нарушении.
Уведомление о том, что Битрикс24 не имеет отношения к этому контенту, не несет рекламный характер и его нельзя изменить или отключить.
Если вы заметили, что CRM-формы, созданные на Битрикс24, используются с целью нарушения закона, пожалуйста, сообщите нам об этом. Мы все проверим и разберемся.
Если мы получим массовые сообщения о нарушениях, то примем меры по их предотвращению.
Спасибо, помогло!
Спасибо
Это не то, что я ищу
Написано очень сложно и непонятно
Есть устаревшая информация
Слишком коротко, мне не хватает информации
Мне не нравится, как это работает
Описание
Модуль помогает администратору контролировать опечатки в контенте, ошибки в работе сайта и другие неприятные моменты с помощью посетителей сайта.
Форма «Сообщить об ошибке» вызывается двумя способами: с помощью сочетания клавиш [ctrl + enter], либо кликом по ссылке с атрибутом class=»ab_report-error». Предварительно необходимо выделить ошибку.
На e-mail администратора приходит уведомление со всеми данными. По возможности, вместе с выделенной ошибкой отправляется скриншот области.
Т.к. модуль работает с версткой Вашего сайта, перед покупкой проверьте его работу в демо-режиме.
Как происходит процесс заказа
Вы решили приобрести готовое решение. Для этого нужно сделать несколько простых действий:
1. Заполнить форму заказа. Занесите свою контактную информацию в форму. Выберите дополнительные опции, которые хотите приобрести вместе с решением (Наполнение вашей информацией и Разработка уникального дизайна). Отправьте данные формы.
2. Дождаться звонка консультанта. В течение часа вам перезвонит ваш персональный консультант по услугам и объяснит особенности по приобретению выбранного вами готового решения. А также согласует с вами дальнейшие действия.
3. Заключить договор на приобретение готового решения. Необходимо будет подписать договор на приобретение готового решения, после этого мы сможем выставить счет на оплату готового решения и наших услуг по его установке и настройке.
4. Оплатить счет. После оплаты счета ваш проект будет передан в отдел работы с готовыми решениями. Мы выделим вам персонального аккаунт-менеджера, который будет с вами работать вплоть до закрытия работ по установке и настройке готового решения
Вы получаете полностью готовый сайт
Купленные программные продукты поставляются в виде цифро-буквенного кода, используя который их можно установить на хостинг согласно инструкции. Код отправляется онлайн на указанную в заказе электронную почту.
После получения оплаты от покупателя до момента отправки ему лицензионного ключа может пройти несколько часов.
На протяжении этого времени проводится оформление купленной программной продукции.
Внимание! Неправильно указанный e-mail может привести к дополнительной задержке. Пожалуйста, проверяйте ваши персональные данные при регистрации и оформлении заказа. Конфиденциальность ваших данных гарантируется.
Для установки вам потребуется
- Система управления «Битрикс» (подходящей редакции);
- Домен;
- Хостинг.
Все это вы можете купить в готовом наборе у нас на сайте, ускорив процесс дальнейшей установки.
Базовую установку мы сделаем для вас бесплатно!
В стоимость сайта включено:
- Шаблон сайта 1С-Битрикс
- Хостинг и Домен
- Перенос и настройка сайта
- Бесплатная консультация
Узнать подробности и задать вопросы можно по телефону:
+7 (391) 278-278-8
bug_report Обработка ошибок
Как перестать беспокоиться и начать программировать? Попробуйте использовать PHPUnit в Битрикс!
Обработка ошибок в Битрикс
При разработке под Битрикс можно пользоваться не только логами, установленными в конфигурации сервера, но и своими. Для этого нужно настроить обработчик ошибок в секции exception_handling в файле /bitrix/.settings.php
:
'exception_handling' => array ( 'value' => array ( 'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE & ~E_DEPRECATED, 'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING, 'ignore_silence' => true, 'assertion_throws_exception' => false, 'assertion_error_type' => 256, 'debug' => true, 'log' => array ( 'settings' => array ( 'file' => 'bitrix/modules/error.log', 'log_size' => 1000000, ), ), ), ),
Можно использовать собственный обработчик ошибок для записи логов. Для этого в секции log
нужно указать:
'class_name' => 'MyLog', 'extension' => 'MyLogExt', 'required_file' => 'modules/mylog.module/mylog.php'
https://bitrixsolutions.ru/docs/bitrix_errors/ — человек грамотно сделал обработку ошибок, вот что мне понравилось: Logger::SHIT_HAPPENS
, Logger::VOVA_POMOGI