Нашли ошибку на сайте битрикс

Доброго времени суток.

В данной статье расскажу как реализовать функционал, который бы позволял пользователям сайта сообщать контент-менеджерам найденные о найденной на сайте ошибке. Ошибка будет высылаться почтовым уведомлением.
Интерфейсные окна будут отрисованы с помощью новой 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

Как подключить 404 страницу в 1С-Битрикс. Подключаем единый шаблон

В 1С-Битрикс на страницу с 404 ошибкой можно попасть только тогда, когда не найден физический раздел сайта, то есть папка. Если же вы не так указали адрес динамического раздела каталога, например, или карточки товара, то вы просто получите красные надписи «Раздел не найден» и «Элемент не найден».

Но что делать, если необходимо любой 404 ответ обрабатывать в едином стиле? На помощь нам приходят нехитрые инструкции, которыми мы и воспользуемся.

Все манипуляции мы будем совершать в файле init.php, который расположен по адресу /bitrix/php_interface/. Если по данному пути у вас нет такого файла, то придется его создать.

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

Страница 404 в стиле сайта

Начнем с первого варианта. Для этого откроем init.php и запишем туда следующий код:

 
AddEventHandler("main", "OnEpilog", "My404PageInSiteStyle");
function My404PageInSiteStyle()
{
    if(defined('ERROR_404') && ERROR_404 == 'Y')
    {
        global $APPLICATION;
        $APPLICATION->RestartBuffer();
        include $_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/header.php';
        include $_SERVER['DOCUMENT_ROOT'].'/404.php';
        include $_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/footer.php';
    }
}

Итак, что же делает код выше. Во первых, мы повесили обработчик на событие OnEpilog, то есть на тот момент, когда страница уже будет обработана и скомпонована. В нем мы указали название нашей функции My404PageInSiteStyle, которая будет отвечать за вывод текста 404 ошибки.

Далее мы переходим непосредственно к нашей функции. Что же там происходит. Сначала мы проверяем, была ли определена константа, которая указывает на то, что запрашиваемое содержимое не найдено — ERROR_404. Если такая константа имеется, то мы делаем следующее:

  • Перезапускаем буфер, чтобы полностью очистить текущую компоновку и сформировать новую;
  • Подключаем header.php нашего шаблона;
  • Подключаем файл 404.php в котором хранится некий наш контент, — будь то текст или картинка, — который оповестит пользователя, что такой страницы нет;
  • Подключаем footer.php нашего шаблона;

Затем прогружается вновь сформированная страница в стиле нашего сайта, в контентной части которой будет выведен текст из файла 404.php. Этот файл может лежать где угодно, называться как угодно. Но привычнее называть его именно так и хранить в корневой директории сайта.

Страница 404 с индивидуальным дизайном

В последнее время многие стали делать страницу с 404 ошибкой в собственном оформлении, не привязываясь к стилю сайта. Собственно, мой блог не исключение.

Зачем это делается? Если рассматривать этот аспект с точки зрения продвижения, то это делается для того, чтобы направить пользователя на нужные разделы или страницы, если он каким-то образом случайно попал на несуществующую страницу.

На такой странице оптимизаторы проставляют ссылки, чтобы человек не ушел, а продолжил посещение сайта.

Но также это делается, чтобы просто не нагружать посетителя ненужной информацией и не вводить в ступор. Порой бывает заходишь на сайт, кликаешь по интересующей ссылке и попадаешь на какую-то странную страницу. И вроде бы ты на сайте, вроде бы ошибок нет, но информацию ты никакую не получил. Вот и ищешь глазами, начинаешь смотреть, искать. И не находишь. Естественно желание вновь возвращаться на такой сайт резко пропадает.

Чтобы посетителю конкретно указать, что он попал на несуществующую страницу, ее и стараются выделить каким-то индивидуальным дизайном, чтобы «встряхнуть» посетителя и дать понять, что он забрел куда-то не туда.

Давайте немного модифицируем код выше, для того, чтобы у нас была возможность делать свои собственные страницы с 404 ошибкой не в стилях сайта.

 
AddEventHandler("main", "OnEpilog", "My404PageInMyOwnStyle");
function My404PageInMyOwnStyle()
{
    if(defined('ERROR_404') && ERROR_404 == 'Y')
    {
        global $APPLICATION;
        $APPLICATION->RestartBuffer();
        include $_SERVER['DOCUMENT_ROOT'].'/404.php';
    }
}

Как видите, все очень просто. Мы всего лишь убрали подключение header.php и footer.php, тем самым шаблон нашего сайта не будет грузиться. А загрузится только содержимое файла 404.php.

Правила оформления файла 404.php в 1С-Битрикс

Когда мы определились с тем, как будет выглядеть наша страница 404 ошибки, необходимо ее подготовить.

Самое важное здесь — это установить статус 404 ошибки, иначе страница вам будет выдаваться с кодом ответа 200 ОК, что есть совсем нехорошо.

Вот та минимальная программная часть, которая должна быть указана в начале файле 404.php:

 
<?
    require $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php";
    include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');
    CHTTP::SetStatus("404 Not Found");
    @define("ERROR_404","Y");
?>

Что тут происходит:

  • Здесь мы подключаем файл prolog_before.php, чтобы, если понадобится, мы могли пользоваться различными переменными, константами и методами 1С-Битрикс. Например, подключить модуль информационных блоков и положить сюда компонент по выводу случайных элементов;
  • Далее мы подключаем файл urlrewrite.php, который будет обрабатывать наш урл;
  • После этого самое важное — мы устанавливаем статус и заголовок ответа 404 Not Found;
  • И на всякий случае еще раз определим константу 404 ошибки. А чтобы не было ошибок, поставим перед ней собачку;

После этого вы можете уже верстать 404 страницу как вам угодно. Вот вам небольшая «рыба» заготовка:

 
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Страница не найдена</title>
    <link rel="shortcut icon" href="<?=SITE_TEMPLATE_PATH?>/favicon.ico" />
    <style type="text/css">
        .container{
            width: 1170px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
        <div class="container">
            <img src="/images/404.jpg"><br />
            <p>Ой ой ой! СТраница не найдена!</p>
        </div>
</body>
</html>

Ну вот, теперь вы легко сможете создавать в 1С-Битрикс любые страницы 404 ошибки, какие только захотите.

Успехов вам!

Настройка обмена выполнена правильно, но обмен все равно проходит некорректно? Рассмотрим типичные проблемы, возникающие в процессе интеграции сайта с 1С, и способы их решения.

Обмен заказами завершен с ошибками

Проблема. При попытке обмена заказов в 1С выходит сообщение:

Выгружено товаров: 1
Выгружено картинок: 1
Выгрузка товаров успешно завершена
Не установлен реквизит «ГруппаДоступаККонтрагенту». Элемент не записан!
Не установлен реквизит «РегионДоставки». Элемент не записан!
Не установлен реквизит «Основная форма оплаты». Элемент не записан!
{Обработка.ОбменССайтом(3468)}: Ошибка при вызове метода контекста (Записать): Операция не выполнена!
Произошла ошибка: . По причине:

Не удалось найти/создать контрагента.
Не удалось обработать документы, загруженные с сервера.
Обмен не выполнен.
Не выгружен ни один заказ.
Обмен заказами завершен с ошибками!!!

Решение. Скорее всего, в используемой конфигурации предусмотрена обязательность заполнения указанных выше реквизитов для элемента справочника Контрагенты.

Не меняется статус заказа при выгрузке из 1С

Проблема. Не меняется статус заказа при выгрузке из 1С

В соответствие с логикой синхронизации 1С и «1С-Битрикс: Управление сайтом», статус заказа меняется, если из 1С передались дата оплаты либо дата отгрузки товара. Чтобы эти даты попали в XML-файл, который формируется 1С и передаётся на сайт, нужно сформировать и провести нужные документы.

  • В 1С:УТ зарегистрировать оплату заказа можно путем ввода на основании заказа документов оплаты, таких как Платежное поручение входящее и Приходный кассовый ордер.
  • Отгрузка, как правило, регистрируется вводом на основании заказа документа Реализация товаров и услуг.
  • Если в регистре Расчеты с контрагентами остаток по заказу <= 0, заказ считается оплаченным.
  • Если в регистре Заказы покупателей остаток по заказу <= 0, заказ считается отгруженным. У конфигурации УПП принцип тот же.

Статусы, в которые будут переводиться заказы при получении дат оплаты и отгрузки, устанавливаются в настройках модуля интернет-магазина: параметры При получении оплаты переводить заказ в статус и При получении разрешения доставки переводить заказ в статус соответственно.

Изменения товаров не зарегистрированы. Выгрузка товаров не произведена

Проблема. 1С заполнена и настроена на обмен с «1С-Битрикс: Управление сайтом», который тоже настроен на интеграцию с 1С. При нажатии на кнопку Выполнить обмен сразу появляется сообщение в 1С: Изменения товаров не зарегистрированы. Выгрузка товаров не произведена.

Решение. Возможные ошибки:

  • Обычно появляется из-за некорректной настройки выгрузки товаров на вкладке Выгрузка товаров. Стоит обратить внимание на то, что настраивается именно фильтр(!), а не выбираются поля для выгрузки. Если отмечается поле для фильтра, то значение этого поля в фильтре должно быть задано.
  • В 1С: Управление торговлей обратите внимание в справочнике Номенклатура на реквизит вид номенклатуры. Должен быть обязательно признак товар (наименование товар и тип номенклатуры товар).
  • Если обмен осуществляется в режиме выгрузки изменений, а этих изменений с момента последнего обмена не зафиксировано, то возникает указанная ошибка. Стоит обратить внимание на следующие моменты:
    • Если осуществляется полная выгрузка каталога на сайт, то настройка фильтра необязательна (нужно снять выделение со всех отмеченных полей на вкладке Выгрузка товаров).
    • Изменения товара никаким образом не относятся к сайту, т.е. удаление товаров на сайте или их редактирование не фиксируется в 1С. При обмене выгружаются изменения товаров, произведённые именно в 1С с момента последней выгрузки.

Изменения на сайте не приходят в 1С

Проблема. 1С заполнена и настроена на обмен по расписанию с «1С-Битрикс: Управление сайтом». Развернута копия базы 1С. Изменения в «1С-Битрикс: Управление сайтом» не приходят в 1С, т.е. якобы на сайте нет изменений.

Решение. На самом деле, изменения есть и они приходят в копию базы 1С. Чтобы изменения отслеживались в оригинале базы 1С, просто поменяйте пароль у пользователя «1С-Битрикс: Управление сайтом».

Как выгрузить каталоги из 1С в разные типы инфоблоков?

Проблема. Как выгрузить каталоги из 1С в разные типы инфоблоков?

Решение. Чтобы осуществить выгрузку в разные типы инфоблока, следует поместить несколько компонентов catalog.import.1c на разные страницы.

Например, имеем две страницы: http://mysite.ru/1c_import_1.php и http://mysite.ru/1c_import_2.php. На обеих страницах настраиваем компонент catalog.import.1c — указываем в параметрах разные типы инфоблоков и устанавливаем флажок у опции Импортировать с учетом типа инфоблока.

Затем при настройке импорта в 1С, для выгрузки в нужный тип инфоблока указываем разные файлы: http://mysite.ru/1c_import_1.php либо http://mysite.ru/1c_import_2.php.

Пример файла:

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("import1");
?>
<?$APPLICATION->IncludeComponent("bitrix:catalog.import.1c", "", Array(
"IBLOCK_TYPE" => "books",
"SITE_LIST" => array(),
"INTERVAL" => "30",
"GROUP_PERMISSIONS" => array(0 => "1"),
"USE_OFFERS" => "N",
"USE_IBLOCK_TYPE_ID" => "Y",
"SKIP_ROOT_SECTION" => "N",
"ELEMENT_ACTION" => "D",
"SECTION_ACTION" => "D",
"FILE_SIZE_LIMIT" => "204800",
"USE_CRC" => "Y",
"USE_ZIP" => "Y",
"USE_IBLOCK_PICTURE_SETTINGS" => "N",
"GENERATE_PREVIEW" => "Y",
"PREVIEW_WIDTH" => "100",
"PREVIEW_HEIGHT" => "100",
"DETAIL_RESIZE" => "Y",
"DETAIL_WIDTH" => "300",
"DETAIL_HEIGHT" => "300",
"TRANSLIT_ON_ADD" => "Y",
"TRANSLIT_ON_UPDATE" => "Y",
"TRANSLIT_MAX_LEN" => "100",
"TRANSLIT_CHANGE_CASE" => "L",
"TRANSLIT_REPLACE_SPACE" => "_",
"TRANSLIT_REPLACE_OTHER" => "_",
"TRANSLIT_DELETE_REPEAT_REPLACE" => "Y"
),
false
);?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Не удалось найти вид номенклатуры

Проблема. Не удалось найти вид номенклатуры

В процессе обмена 1С с сайтов возникает ошибка: Не удалось найти вид номенклатуры: Услуга Не удалось найти вид номенклатуры: Товар Не удалось найти/создать номенклатуру. Не удалось обработать документы, загруженные с сервера.

Решение. Ошибка возникает, если в 1С нет типов номенклатуры Услуга и Товар. Эти типы номенклатуры критичны для процесса обмена данными с сайтом. Следует создать в 1С эти типы номенклатуры и только поле этого осуществлять обмен.

Поле объекта не обнаружено

Проблема. В процессе обмена возникает ошибка Поле объекта не обнаружено.

В процессе обмена заказами возникает ошибка: {Обработка.ОбменССайтом(3271)}: Поле объекта не обнаружено (Наименование) >> ОтобразитьСостояние(«Идентификация контрагента: » + СтрокаДД.СтруктураДанныхКонтрагента.Наименование);

Решение. Проверьте настройки интеграции с 1С, закладка Профили обмена: установлены ли соответствия для полей заказа. Обратите внимание на поля Полное Наименование и Наименование. Эти поля критичны для 1С.

Произошла ошибка на стороне сервера. Получен неизвестный статус импорта.

  • Возникает ошибка следующего вида:

Выгружено товаров: 679 Выгружено картинок: 469 Произошла ошибка на стороне сервера. Получен неизвестный статус импорта. Обмен не выполнен. Ответ сервера. Fatal error : Allowed memory size of 67108864 bytes exhausted (tried to allocate 102401 bytes) in /var/www/bitrix/modules/iblock/classes/general/cml2.php on line 483 Выгрузка товаров завершена с ошибками!

Решение. Ошибка скорее всего связана с нехваткой ресурсов на масштабирование передаваемых на сервер изображений. Выходом из данной ситуации может служить отключение опции Выгружать картинки (вкладка Выгрузка товаров в настройке обмена в 1С).

Также можно увеличить размер выделяемой памяти в настройках PHP (параметр memory_limit), для этого следует обратиться к хостинг-провайдеру.

  • Возникает ошибка следующего вида:

Выгружено товаров: 46 Выгружено картинок: 0 Произошла ошибка на стороне сервера. Получен неизвестный статус импорта. Обмен не выполнен Ответ сервера: DB query error. Please try later. Выгрузка товаров завершена с ошибками!

Решение. Ошибка может возникать в случае некорректной передачи файла на сервер. В процессе отправки файл может «обрезаться» и терять свою целостность, в итоге файл на сервер передаётся некорректным по содержанию.

Причиной может служить прокси-сервер, через который осуществляется обмен. Попробуйте осуществить выгрузку не через прокси-сервер. Также попробуйте отключить опцию Использовать сжатие zip, если доступно в настройках интеграции с 1С — возможно, на сервере не поддерживается ZIP-сжатие. Проверьте настройки интеграции с 1С.

Произошла ошибка на стороне сервера. Файл не отправлен

В процессе обмена возникает такого вида ошибка:

Выгружено товаров: 3 Выгружено картинок: 0 Выгрузка товаров успешно завершена Выгружено заказов: 1 Произошла ошибка на стороне сервера. Файл не отправлен (C:Documents and SettingsUserLocal SettingsTempv8_5075_63.zip). Обмен не выполнен Ответ сервера: Файл для импорта пуст. Обмен заказами завершён с ошибками!

Решение. Причины возникновения ошибки могут быть следующие:

  • На компьютере, где установлена 1С, имеется файрволл или антивирус, препятствующий корректной передаче файла или блокирующий отправку файла на сервер.
  • Некорректно работает функции расширения ZIP, вследствие чего из архива не распаковываются файлы. Для решения возникшей проблемы рекомендуется:
    • Установить последние стабильные версии обновлений модуля интернет-магазина.
    • На время обмена отключить на локальной машине все блокирующее ПО (антивирус, файрволлы и т.д.)
    • Отключить ZIP-сжатие в настройках интеграции с 1С.

Не работает авторизация при обмене данными с 1С

Решение. Часто проблема возникает в результате работы PHP в режиме CGI. В этом режиме есть проблемы с передачей данных авторизации HTTP в PHP. Можно это проверить, посмотрев phpinfo() в разделе: Server API: CGI. Можно обойти проблему, но необходимо чтобы на сервере была включена обработка .htaccess и поддержка mod_rewrite. Выполните следующие действия:

  • В корне сайта в файл .htaccess добавьте строки:

RewriteEngine on
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]

  • Закомментируйте следующие строки в файле bitrix/admin/.htaccess, которые отключают mod_rewrite:

#<ifmodule mod_rewrite.c="">
# RewriteEngine Off
#</ifmodule>

Примечание: данный файл может отсутствовать, поскольку он создается вручную.

  • В файл bitrix/php_interface/dbconn.php добавьте строки:

$remote_user = $_SERVER["REMOTE_USER"]
? $_SERVER["REMOTE_USER"] : $_SERVER["REDIRECT_REMOTE_USER"];
$strTmp = base64_decode(substr($remote_user,6));
if ($strTmp)
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', $strTmp);

Для проверки работоспособности HTTP-авторизации воспользуйтесь скриптом

Внимание! Данный вариант обхода не всегда может решить проблему. Если при выполнении всех рекомендаций HTTP-авторизация не заработала, то следует обратиться к хостинг-провайдеру с этой проблемой.

При выгрузке каталога из 1С не ставит галочку «уменьшать количество при заказе»

Проблема. При выгрузке каталога из 1C не ставит галочку уменьшать количество при заказе

Решение. Чтобы исправить это, необходимо в файле init.php добавить код, который будет срабатывать при добавлении продукта (через событие OnProductAdd):

<?
AddEventHandler("sale", "OnProductAdd", "OnProductAdd");

function OnProductAdd($ID,$Fields)
{
$res=Array("QUANTITY_TRACE"=>'Y);
CCatalogProduct::Update($ID,$res);

}
?>

Возможные причины медленного импорта из 1С

Проблема. Медленный импорт из 1C.

Возможные причины:

Включённая индексация. Для ускорения можете в настройках инфоблока выключить индексацию элементов и разделов, а также свойств.

Проактивная защита, которая меняет идентификатор сессии каждую минуту. В случае интеграции с 1C приложение 1C не подхватывает новый идентификатор и пытается получить переменные сессии со старым ID сессии. В сессии хранится шаг импорта, если не удаётся в сессии найти этот шаг, то считается, что шаг равен 1, т.е. импорт начинается сначала. Попробуйте отключить хранение сессий в базе и смену идентификатора сессии.

Если структура каталога в 1С отличается от каталога на сайте?

Задача: Структура каталога на сайте должна отличаться от структуры в 1C.

Варианты решения:

Вариант 1. Делается отдельный классификатор — инфоблок и разделы. У разделов создаётся свойство привязка к разделам, и нужные «человеческие» разделы привязываются к разделам инфоблока с классификатором, который пришел из 1C. Можно сделать множественную привязку — будет проще свести в один раздел из кучи непонятных в 1C.

Вариант 2. В 1C можно создать такой объект как прайс-лист и попробовать настроить обмен с сайтом, уже используя его как прокси. Т.е. если в справочнике Номенклатура бардак и вообще куча всякого, что на сайте не должно показываться, то создаётся прайс-лист, и уже в нём создаются нужные секции. И специально обученный сотрудник добавляет в узлы прайс-листа ссылки на позиции из справочника номенклатура.

Тогда на сайт будет уходить CML, структура которого берётся из прайс-листа, а не из номенклатурного справочника.

Ошибка импорта метаданных

Проблема. На этапе выгрузки свойств после построения таблиц выводится сообщение об ошибке:

Выгружено товаров: 1 832
Выгружено картинок: 0
Выгружено предложений: 0
Произошла ошибка на стороне сервера.
Обмен не выполнен
Ответ сервера:
Ошибка импорта метаданных.

Выгрузка товаров завершена с ошибками!!!

Причина. Ошибка может возникать, если названия свойств начинаются с цифр. Первый знак в названии должен быть буквой.

Проблема. На этапе выгрузки свойств после построения таблиц выводится сообщение об ошибке:

Ошибка импорта метаданных. В редакции Малый Бизнес нет возможности иметь более одного типа цены. Настройте выгрузку из 1С или перейдите на другую редакцию БУС.

Причина. Такая ошибка возникает, когда клиент забывает указать в настройках обмена конкретное соглашение (в настройках 1С), по которому должны выгружаться цены. Соглашение указывается в отборах выгружаемых инфоблоков.

Выгрузка картинок

Проблема. Неполная выгрузка картинок.

Картинки выгружаются из 1С, только при первой полной выгрузке каталога товаров, не важно выгрузка была на в папку на локальном компьютере или на сайт. В последствии картинки выгружаются только новые и измененные.

Если изменены настройки в 1С и картинки не выгрузились в первый раз на сайт, то в настройках модуля обмена выполните обмен через кнопку принудительной полной выгрузке картинок.

Реализуем традиционный способ улучшения качества текстов на сайте с участием посетителей. Теперь, если они заметят ошибку в тексте, то смогут легко и быстро передать ее администратору сайта, используя сочетание клавиш 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;
}

 
Готово!

——————————-
Спасибо за внимание!
Читайте свежий выпуск «Кладовки программиста» каждый день!

Назад в раздел

Как исправить ошибку «Обнаружены ошибки в работе сайта. Проверить и исправить.»

Почему появляется ошибка?

Данная ошибка (а именно уведомление для администратора) появляется при автоматическом запуске проверки сайта (запуск через агента на кроне).

Уведомление «Обнаружены ошибки в работе сайта» может появляться, обычно, в двух случаях:

  1. на сайте действительно имеются ошибки, которые можно увидеть, запустив ручную проверку сайта,
  2. только при работе агентов на кроне — т.е. проблемы с сайтом диагностируются только в момент запуска сайта из планировщика (из командной строки).

На что эта ошибка влияет?

Если говорить в целом о том, на что влияют ошибки при проверке сайта — ответ получится очень длинным и сложным, вопрос очень многосторонен. Одна и та же ошибка может приводить к разным последствиям.

В первом вышеприведенном случае все зависит от того, какая ошибка — некоторые ошибки оказывают значительное влияние на весь сайт (например, проблема с кодировками, проблема сохранения сессий, проблема с почтой, проблема с БД и т.д.), а некоторые ошибки менее значимы или могут очень редко проявить себя (например, «Размер стека и pcre.recursion_limit», «HTTP авторизация», «Функция getimagesize для swf» и др).

Во втором случае проблема заключается, обычно, в необходимости явного указания некоторых конфигурационных PHP-параметров в команде запуска агентов, и наличие проблемы влияет только на запуски сайта из планировщика для выполнения агентов. На обычную работу сайта это может влиять только косвенно.

Как исправить ошибку?

В обоих приведенных случаях все проблемы при проверке сайта должны быть решены для предотвращения возможных проблем.

При этом, если в первом случае алгоритм исправления проблем понятен (запустил проверку сайта — увидел ошибку — исправляй), то во втором случае всё непонятно, т.к. вроде бы и показывается уведомление о наличии проблем, но при ручном запуске проверки сайта никаких ошибок нет.

В таком случае несколько советов:

  1. необходимо смотреть лог ошибок (файлы site_checker_*.log в папке /bitrix/),
  2. запускать команду выполнения агентов (ту самую, которая выполняется из планировщика) через SSH вручную и после этого смотреть лог,
  3. если ничего не помогает, проводить отладку. Например, можно в файле /bitrix/modules/main/classes/general/site_checker.php добавлять в уведомление текст проблемы, чтобы было понятно, на каком моменте проверка «спотыкается».

Требуется наша помощь?

Мы имеем огромный опыт, на протяжении 10 лет помогая клиентам в решении самых различных проблем на их сайтах.

Поэтому, если Вы не имеете возможности решить эту проблему самостоятельно, обращайтесь к нам — мы все сделаем оперативно и квалифицированно.

Понравилась статья? Поделить с друзьями:
  • Нашли ошибку на сайте javascript
  • Не будь как я не повторяй мои ошибки текст
  • Нашли ошибку выделить и нажать ctrl enter
  • Не будь как я не повторяй мои ошибки скачать
  • Нашли ошибку выделите ее и сообщите о ней