1-freelance.ru

Журнал "Фрилансер"
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Механизм обмена заказами между 1С и сайтом на Битрикс

Механизм обмена заказами между 1С и сайтом на Битрикс

Стандартный обмен заказами между 1С и сайтом на Битрикс всегда инициируется запросами со стороны 1С. Для простоты можно представить, что 1С — это браузер, который делает запросы к сайту на сервере. Какие запросы браузер сделает — такие данные и получит. Когда 1С нужны, к примеру, заказы, 1С делает соответствующий запрос на сайт, а уже Битрикс в ответ отдает xml с заказами, которые обрабатывает модуль обмена на стороне 1С.

Выгрузку заказов можно распознать по «type=sale» в запросах. В зависимости от направления движения заказов обмен между 1С и сайтом на Битрикс делится на 2 фазы:
-загрузка заказов в 1С с сайта;
-выгрузка заказов из 1С на сайт.

Каждая фаза делится на несколько этапов. Разделение на этапы — исходя из «mode» в запросах, которые посылает 1С. Новый «mode» в запросе — новый этап. Первые 2 этапа (авторизация и инициализация) в обеих фазах дублируются.

Заказы из Битрикс в 1С

Этап 1: запрос авторизации (type=sale, mode=checkauth)

1C посылает запрос вида:

На этот запрос от сайта 1С получит ответ вида:

Sessid — идентификатор сессии, с которым 1С будет делать все дальнейшие запросы. В ответе идентификатор привожу для примера (у вас будет другой).

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

Этап 2: инициализация обмена (type=sale, mode=init)

1C посылает запрос вида:

Битрикс удаляет все файлы из папки /upload/1c_exchange/, оставшийся после предыдущего обмена документами (не обязательно заказами). Сайт отдает ответ вида:

  1. Zip — это параметр, который говорит, поддерживает ли сайт архивацию (yes — поддерживает, no — не поддерживает). В зависимости от этого 1С будут высылать файл с заказами в виде zip-архива или несжатую xml.
  1. File_limit — максимальный размер загружаемого файла в байтах. Если файл больше, то 1С разобьет его на более мелкие файлы.

Эти параметры настраиваются: Магазин -> Настройки -> Интеграция 1С -> Заказы. Галочка «Использовать сжатие zip, если доступно» и поле «Размер единовременно загружаемой части файла (в байтах)».

Этап 3: получение заказов из Битрикс (type=sale, mode=query)

1C посылает запрос вида:

В ответ Битрикс генерирует xml, в которую попадают все заказы, которые создались / изменились после предыдущего обмена заказами (саму xml здесь не привожу, т. к. это лдинная простыня). После чего помечает заказы в БД как выгруженные.

Если нет ни одного нового / модифицированного заказа, то сайт в ответе отдаст пустую xml. В ответе на повторный запрос также будет пустая xml (т. к. в БД заказы уже отмечены).

Этап 4: завершение обмена (type=sale, mode=success)

Когда заказы успешно обработаны в 1С, то 1С посылает запрос:

Сайт на это отвечает:

Загрузка заказов в 1С с сайта на Битрикс завершена.

Заказы из 1С в Битрикс

Этапы 1 и 2 совпадают с предыдущей фазой.

Этап 3: загрузка файла в Битрикс (type=sale, mode=file)

1C посылает запрос вида:

Он загружает в папку /upload/1c_exchange/ файл обмена, посылая содержимое файла в виде POST-запроса.

В ответ от сервера могут прийти следующие ответы:

1С на этот ответ пришлет еще один такой же запрос (или несколько), пока не получит другой ответ.

После ответа «success» 1С перейдет к этапу 5.

Этап 4: обработка файла на стороне Битрикс (type=sale, mode=import)

1C посылает запрос вида:

Этап на стороне сайта состоит из двух шагов (т. е. со стороны 1С будет минимум 2 одинаковых запроса).

В ответ на первый запрос должен прийти ответ:

В ответ на второй запрос должен прийти ответ:

После получения этого ответа 1С переходит к завершающему этапу.

Помимо успешных, на этом этапе сайт может отдавать, к примеру, такой ответ:

Например, зачастую встречается вот такая ошибка «failure Файл для импорта пуст» — это значит, что на предыдущем этапе загружен пустой файл или (что чаще) файл не был загружен.

Ошибки 520, 521, 522, 524 на сайте

Ошибки 520, 521, 522, 524 связаны с проблемами в работе сервиса CloudFlare.

CloudFlare — сервис для перенаправления трафика на сайт с помощью облачного прокси-сервера, который обеспечивает дополнительную защиту от DDoS-атак и ускоряет загрузку вашего сайта.

Читайте так же:
Музыка заедает на компьютере

Ошибка 520 Unknown Error

Что означает ошибка 520? Система CloudFlare выдаёт 520 ошибку, если не может обработать ответ от веб-сервера, на котором расположен сайт:

Ошибки 520, 521, 522, 524 на сайте (1)

Причины появления ошибки:

  • сброс соединения (после успешного запроса сервер разорвал соединение);
  • заголовок запроса превышает ограничение размера заголовка Cloudflare (более 8 КБ). Если у вас много файлов cookie или они очень большие, это может привести к увеличению размера заголовков. Так как у Cloudflare есть ограничение на размер заголовка в 8 КБ, он не может обработать длинный заголовок;
  • пустой ответ от сервера. Это происходит, когда DNS домена указывают на неправильный сервер.
  • некорректный ответ от сервера;
  • система безопасности блокирует запросы. Укажите IP-адреса Cloudflare в белом списке, чтобы система не блокировала запросы.

Способы устранения ошибки:

  1. Отключить CloudFlare. Так вы сможете понять, где находится ошибка (на сервере или в CloudFlare).
  2. Удалить плагины. Для плагинов иногда требуется много файлов cookies. Если на сайте много плагинов, это может повлиять на размер заголовков. Они могут быть слишком большими по размеру, и Cloudflare не справится с ними. Чтобы исправить ошибку, отключите плагины один за другим. Если ошибка пропадёт, удалите некоторые из плагинов.
  3. Проверьте настройки DNS в CloudFlare. Убедитесь, что запись A указывает на правильный IP-адрес.

Подробные рекомендации по исправлению ошибки 520 даны в справке CloudFlare.

Ошибка 521 Web Server Is Down

Код ошибки 521 возникает, когда веб-сервер обрывает соединение с CloudFlare:

Ошибки 520, 521, 522, 524 на сайте (1)

Это может произойти в двух случаях:

сервер не отвечает или недоступен. Необходимо проверить работоспособность сервера;

веб-сервер блокирует запросы CloudFlare. Поскольку CloudFlare работает как обратный прокси-сервер, все запросы к серверам поступают от IP-адресов CloudFlare. Иногда система безопасности хостинга принимает постоянные подключения с одних и тех же IP-адресов за DDoS-атаку. В результате на IP-адреса CloudFlare накладывается блокировка/ограничения по скорости.

Диапазон IP-адресов CloudFlare вы можете увидеть по ссылке.

Рекомендации по исправлению ошибки 521 даны в справке CloudFlare.

Ошибка 522 Connection timed out

Ошибка 522 возникает, если превышено время ожидания ответа от веб-сервера и пользователь не может попасть на страницу:

Ошибки 520, 521, 522, 524 на сайте (2)

Основные причины:

  • веб-сервер перегружен и не ответил на запрос,
  • на веб-сервере стоит система защиты, которая блокирует запросы от CloudFlare,
  • веб-сервер недоступен,
  • некорректный IP-адрес, установленный в настройках DNS на CloudFlare (Запрос от CloudFlare был отправлен на другой IP),
  • проблемы с маршрутизацией сети между CloudFlare и веб-сервером.

Что делать? Для решения проблемы удостоверьтесь, что ваш веб-сервер активен и принимает HTTP-запросы. Проверьте, корректны ли настройки DNS в Личном кабинете на CloudFlare.

Подробные рекомендации по исправлению ошибки 522 даны в справке CloudFlare.

Как исправить ошибку 522 в Google Chrome

  1. Очистите кеш браузера. Браузер может быть переполнен данными о посещении сайтов. Освободите место в кэше браузера по инструкции.
  2. Удалите расширение браузера, которое нарушает соединение с сервером. Отключайте расширения по очереди, чтобы найти то, которое выдает ошибку.
  3. Проверьте подключение к интернету. Низкая скорость интернета или перебои при подключении может повлиять на время получения ответа сервера. Из-за этого и появляется ошибка 522.
  1. 1.

Откройте командную строку. Для этого введите в поисковую строку «Командная строка» и выберите появившееся приложение:

Как проверить интернет-соединение

Введите в командной строке:

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

Как проверить интернет-соединение 2

4. Очистите кеш DNS. Проблемы с соединением могут возникнуть из-за несоответствия IP-адреса сервера сайта в кэше компьютера с реальным адресом. Такое происходит, когда владельцы сайтов по какой-либо причине меняют IP-адреса сервера. Чтобы устранить эту проблему, воспользуйтесь инструкцией.

Ошибка 524 A timeout occurred

Ошибка 524 возникает, когда подключение с веб-сервером установлено, но он не ответил за установленное время ожидания соединения:

Ошибки 520, 521, 522, 524 на сайте (3)

Время ожидания HTTP-ответа на CloudFlare — 100 секунд. Если веб-сервер не предоставил ответ, система выдаст 524 ошибку.

  • длительная работа PHP-процесса или запроса к базе данных;
  • веб-сервер перегружен. Проверьте доступные ресурсы сервера, в том числе процессор и оперативную память.

Если вы регулярно выполняете тяжёлые запросы, которые могут занять больше 100 секунд, переместите эти процессы на субдомен, который не проксимируется в Cloudflare.

Читайте так же:
Жесткий диск как обозначается на компьютере

Рекомендации по исправлению ошибки 524 даны в справке CloudFlare.

Ошибки 520-524 требуют много знаний о сервере и его работе, поэтому самый верный способ решить проблему ― обратиться к хостинг-провайдеру, администратору сайта или к технической поддержке CloudFlare (если проблема на стороне их сервиса).

Мастер-класс: Интеграция с 1С. Типовые ошибки.

Торговля в интернете не имеет никаких отличий от обычного ритейла в плане ведения бухгалтерской отчетности. В связи с этим возникает вопрос согласования продаж через интернет-магазин и проводки их по системе учета «1С». Для «1С-Битрикс: Управление сайтом» интеграция с «1С» – не проблема. Это штатная функция, которая уже давно присутствует начиная с версии продуктов "1С:Предприятие 8.1", редакция Управление торговлей (версия 10.3.4) и "1С-Битрикс: Управление сайтом" версии 6.5, в редакциях Малый бизнес, Бизнес и Большой бизнес.

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

Типовые проблемы можно сгруппировать примерно таким образом:

  • Ошибки с производительностью на стороне сервера
  • Ошибки при работе с файлами данных
  • Проблемы авторизации
  • Ошибки MySQL
  • Логические ошибки

Начнем по порядку.

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

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

Наиболее частые проявления этих ошибок:

  • Ошибка работы с Интернет, выводится сообщение: failed sending data to the peer (no headers, no data)‏;
  • Получен пустой ответ сервера;
  • Ошибки 502, 500 или ошибка 404 уже в процессе обмена;
  • Ошибка нехватки памяти, например выводится сообщение: Fatal error : Allowed memory size of 67108864 bytes exhausted (tried to allocate 102401…)‏
  • Не удалось получить текущее состояние процесса обмена. Данные обмена отправлены, но не загружены.

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

  • Откройте для редактирования файл php.ini.oci, расположенный в папке /apache.
  • Найдите в файле группу параметров Resource Limits.
  • Увеличьте значения параметров max_execution_time и memory_limit.
  • Перезагрузите сервер.

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

  • Откройте для редактирования файл httpd.conf, размещенный в папке /apache/conf/
  • Измените значение параметра Timeout.
  • Перезагрузите сервер.

Другой вариант решения этой проблемы (если хостер не соглашается на увеличение таймаута) — сделать равным таймаут сервера и таймаут «1С-Битрикс: Управление сайтом» (страница Магазин > Настройки магазина > Интеграция с 1С, поле Интервал одного шага в секундах). В этом случае пошаговое выполнение будет идти синхронно.

Если указанные меры не помогли или указанные параметры невозможно изменить, то, в крайнем случае, можно сделать следующее:

Наконец, можно уменьшить объем выгрузки товаров за 1 раз. Настройте фильтр по номенклатуре на стороне «1С»:

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

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

Ошибки при работе с файлами вызваны в основном неправильной настройкой прав доступа к файлам. Типовые сообщения при этом выглядят следующим образом: «Ошибка открытия файла" и "Ошибка записи файла". Способы решения проблемы, естественно, — настройка прав доступа на уровне операционной системы.

Обратим внимание на фразу «на уровне операционной системы». Права на уровне «1С-Битрикс: Управление сайтом», как правило, выставлены всегда правильно. Тем не менее, проверить права на осуществление импорта/экспорта не помешает. Делается это на странице Магазин > Настройки магазина > Интеграция с 1С.

Читайте так же:
Диски на приставку xbox

Наиболее вероятные причины:

  • У пользователя, от которого ведется обмен данными, нет прав на запись в папку /upload .
  • Файл создается с правами, которые не позволяют чтение файла.
  • Файл также может быть передан на сервер в zip-архиве, но по определённым причинам не удалось распаковать архив, например, некорректно работает функция zip_open на сервере.

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

Выставление корректных прав на создаваемые файлы в рамках «1С-Битрикс: Управление сайтом» производится следующим образом:

  • Откройте для редактирования файл dbconn.php из папки /bitrix/php_interface.
  • В строке define("BX_FILE_PERMISSIONS", 0644); установите значения, которые порекомендовал хостер вместо 0644 выставленных по умолчанию.

Точно также нужно проверить выставить права на создаваемые папки. Только это делается уже в строке define("BX_DIR_PERMISSIONS", 0755);.

Вот так выглядит проверка наличия расширения ZIP в настройках PHP:

    Откройте в браузере страницу http://<ваш_сайт>//bitrix/admin/phpinfo.php. (Либо выполните команду if (exist_function (“zip_open”))echo “OK”;). В браузере отобразится таблица:

Таблица свойств PHP

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

Проблемы авторизации

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

«1С» может получать некорректный ответ при попытке авторизации на сайте. Это может быть ошибкой разработчика вашего сайта. Дело в том, что при авторизации первой строчкой ответа «1С» ждет "success". Но в ходе создания сайта разработчики могли в процессе разработки случайно оставить вывод в файлах тестовые строки.

Например, в файле /bitrix/php_interface/init.php или /bitrix/php_interface/dbconn.php и др.
Таким образом, 1С может получить ответ не "success", а "testsuccess" хотя данный авторизации отправлены корректные.

Другая типичная ошибка состоит в правах доступа на импорт каталога. Авторизация может не производиться, если пользователь, проводящий импорт, не обладает достаточным уровнем прав. Проверить это можно на странице Магазин > Настройки магазина > Интеграция с 1С.

Перейдите на указанную страницу и произведите следующие действия:

  • В поле Разрешить загрузку группам пользователей посмотрите, каким пользователям разрешен импорт/экспорт данных.
  • В зависимости от вашей конкретной ситуации или измените права доступа на импорт для нужных групп или включите нужного пользователя в группу, которой разрешен импорт из «1С».

Но в авторизации могут возникать и особые ошибки. Например, при работе PHP в режиме CGI. Это характерно для сайтов, размещенных на Windows-серверах. Можно это проверить с помощью файла test.php, как мы это делали при проверке свойств ZIP. В свойства сервера Apache в строке Server API в таком случае стоит CGI. Можно попытаться обойти эту проблему, а если не получится, то целесообразно обратиться в техподдержку хостинга.

Для «обхода» проблемы необходимо чтобы на сервере была включена обработка .htaccess и поддержка mod_rewrite. Выполните следующие действия:

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

? $_SERVER[ "REMOTE_USER" ] : $_SERVER[ "REDIRECT_REMOTE_USER" ];

$strTmp = base64_decode ( substr ( $remote_user , 6 ) ) ;

list ( $_SERVER[‘PHP_AUTH_USER’] , $_SERVER[‘PHP_AUTH_PW’] ) = explode ( ‘:’ , $strTmp ) ;

Ошибки MySQL

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

  • Выводится сообщение: Lost connection to MySQL server during query. Ошибка, скорее всего здесь в таймауте.

Возможное решение проблемы: $DB->Query("SET wait_timeout=28800");

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

  • Конфликт кодировок. Например, выводится сообщение:

[Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (cp1251_general_ci,COERCIBLE) for operation ‘=’]

Причиной является то, что таблицы базы данных в одной кодировке, а сам база в другой. В данном случае база в latin1 и новые таблицы создаются в latin1. При выгрузке из «1С» создается временная таблица b_xml_tree в «некорректной» кодировке latin1.

Решение простое и понятное: смена кодировки базы на корректную. Для решения этой проблемы нужно обратиться к хостеру.

Читайте так же:
Марка батарейки на материнской плате

Логические ошибки

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

Наиболее частая ошибка при выгрузке каталога товаров появляется вместе сообщением: «Изменения товаров не зарегистрированы. Выгрузка товаров не произведена». Как правило, в этом случае неверно настроен фильтр товаров. Нужно проверить эти настройки. Как правило, там выбраны параметры, которые не позволяют правильно отфильтровать параметры для выгрузки.

Но, бывают ситуации, когда такое сообщение – нормальная ситуация. Это происходит в случае, если в настройках Режима обмена данными с WEB-сайтом установлено: Выгружать только измененные объекты с момента последнего обмена.

Другая ошибка при выгрузке каталога товаров — сообщение: «Не удалось найти вид номенклатуры». Эта ошибка возникает, если в «1С» нет видов «Услуга» и «Товар». Эти типы критичны для процесса обмена данными с сайтом. Решение проблемы – создать в «1С» указанные виды номенклатуры.

Если в процессе обмена возникает ошибка: «Поле объекта не обнаружено», то это означает, что не установлены соответствия для полей заказа в «1С-Битрикс: Управление сайтом». Проверьте настройки, заданные в закладке Экспорт в «1С:Предприятие» страницы Настройки > Настройки продукта > Настройки модулей > Интернет-магазин. Поля «Полное Название» и «Название» критичны для 1С., то есть без задачи соответствия этих полей экспорт выполняться не будет. Обратите внимание, что настройка соответствий производится отдельно для разных типов плательщиков.

Экспорт/импорт товаров и заказов в связке «1С-Битрикс: Управление сайтом» и «1С:Предприятие» позволяет решить проблемы синхронизации данных на сайте и в системе учета. Как и в работе любой другой сложной системы, в этой «связке» могут возникать проблемы и неточности. Однако все они решаемы. Купить Битрикс можно у партнеров 1Софт.

Роберт Басыров

Все права защищены. По вопросам использования статьи обращайтесь к администраторам сайта

Хотите купить софт? Позвоните партнерам фирмы «1С», чтобы получить квалифицированную консультацию по выбору программ для ПК, а также информацию о наличии и цене лицензионного ПО.

bitrix require prolog before

Что нужно, чтобы использовать Bitrix API? Например в своих скриптах, в скриптах, запускаемых по расписанию и тд и тп.

Следующий пример — скрипт для запуска по cron.

Пишем в начале своего файла следующее.

В начале файла определяем переменную $root и заодно $_SERVER[‘DOCUMENT_ROOT’] относительно этого скрипта.

Зачем определять $_SERVER[‘DOCUMENT_ROOT’]? Всё потому что при запуске срипта по cron переменная $_SERVER[‘DOCUMENT_ROOT’] не инициализируется, так как скрипт исполняется сам по себе при помощи интерпретатора php и знать ничего не знает о веб-сервере, корневной директориии и прочем.

Далее определяем константы LANG и NO_KEEP_STATISTIC. LANG это понятно. А NO_KEEP_STATISTIC как видно по названию — флаг, определяющий собирать статистику или нет.

У меня перестала работать генерация phpexcel и я создала тестовый код, он должен создавать пустой xls файл, но он этого не делает.

Если заменить вот этот код (то есть убрать подключение битрикса),

то выводится пустой документ, как нужно. Проблема в том, что мне очень нужно прямо в файле генерации работать с битриксовыми функционалом, а не где-то еще. Для phpexcel используется nkhost модуль, mb_overload = 2.

В CMS 1С-Битрикс есть свой встроенный ajax в нескольких компонентах. В этом встроенном ajax есть один существенный минус — страница все равно полностью выполняется.

Кроме встроенного в стандартные компоненты варианта ajax, можно самому написать более правильную реализацию на битриксовской библиотеке. Про встроенную библиотеку можно прочитать у Рамиля Юналиева:
http://yunaliev.ru/2010/02/bitrix-ajax/

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

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

Клиентская часть. Демонстрация

Для работы AJAX как вам наверное известно нужно две части — клиентская и серверная. На клиенте нужно написать javascript код который будет отправлять сам запрос без перезагрузки страницы. На сервере нужно поместить какой то html файл или скрипт, который будет давать ответы на клиентские запросы.

Читайте так же:
Выходы на материнской плате задняя панель

Начнем с клиентской стороны.

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

Вот html код корзины:

Вот скрипт на jquery который отправляет ajax запрос:

То есть при нажатии на ссылку «Обновить» происходит отправка ajax запроса к ajax.handler.php из корня сайта. Полученный ответ вставляется в . Все довольно просто.

На самом деле это не AJAX, а AJAH, так как в ответе приходит уже готовый html, а не xml из которого еще нужно забрать данные. Но суть примерно одна.

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

Работа на серверной стороне

Теперь о том как такое должно быть организовано на серверной стороне.

Создадим файл ajax.handler.php в корне сайта, на котором установлен 1С-Битрикс. В этом файле напишем

Что делает эта строка? Подключает служебную часть пролога в битриксе. При этом шаблон сайта не подключается. С помощью этой строки мы получаем доступ к АПИ битрикса и при этом никакого лишнего html кода не выводится.

Впринципе можно написать код, который будет отвечать на ajax запросы прямо здесь. Можно не заморачиваться ни с какими компонентами и отдельными файлами. Но что будет если у нас будет несколько разных видов запросов? Например если один вид ajax запроса обновляет корзину, второй совершает заказ, третий удаляет из корзины один товар и т.д. В рамках одного файла работать будет не очень удобно.

Чтобы разграничить ответы на разные запросы, я добавлю такой код в файл ajax.handler.php:

То есть, если в запросе переменная PAGE равна BASKET, то подключим файл basket.php, который находится в папке handlers. Таким образом, для разных ajax запросов можно будет просто добавлять новые условия в файле ajax.handler.php, и не думать про взаимодействие с другими запросами. Само собой нужно создать папку handlers в корне сайта и внутри нее файл basket.php.

В файле /handlers/basket.php уже можно собирать данные по корзине, оформлять это все в html и отдавать по запросу. Но если прямо тут писать код, то страница грязная получится, то есть программный код собирающий данные будет прямо рядом с кодом который эти данные отображает в виде html. Поэтому я буду делать стандартный компонент битрикса и просто вставлю его на эту страницу. В стандартном компоненте можно разделить логику и представление. Под каждый вид ajax запрос нужно будет создавать свои отдельные компоненты. Код вызова компонента на странице basket.php

Если у компонента не много параметров, то можно прямо внутри условия в файле /ajax.handler.php его вызвать и не выносить вызов в отдельный файл.

Теперь напишем сам компонент. Создадим папку /bitrix/components/ajax. Внутри создаем подпапку basket с самим компонентом. На том как правильно писать компонент я не буду останавливаться подробно, вот основные сведения которые нужно знать про компоненты:
http://dev.1c-bitrix.ru/api_help/main/general/component20/index.php

Приведу листинг файла component.php

Последняя строка подключает шаблон компонента. Вот код шаблона компонента:

Вот такой небольшой шаблон.
Проверить работоспособность серверной части можно открыв в браузере «адрес сайта/ajax.handler.php?PAGE=BASKET». После открытия страницы должен появиться примерно такой текст на белом фоне «6 830 руб. — 2 шт.», то есть сумма и количество товаров или текст «Корзина пуста» если у вас нет ни одного товара в корзине.

Итого, какие преимущества дает вышеописанная организация AJAX:

  • Добавление новых запросов без труда
  • Все старые запросы обрабатываются независимо, поэтому их удобно редактировать
  • Во время ajax запроса выполняется только код, который необходим для ответа. Ничего лишнего не выполняется
  • Благодаря использованию стандартных компонентов получаем удобное разделение логики и представления

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector