- Дата поста: 21-09-2012
- Вариант реализации REST API для 1С-Битрикс Управление сайтом
- Вводные
- Вариант решения
- Настройка проекта
- Организация точки входа
- Работа с товарами
- Работа со справочником товары, реализация со стороны 1С
- Скачать файлы
- Специальные предложения
- Частые вопросы
- Вопросы по установке и настройке продукта
Дата поста: 21-09-2012
Сегодня речь пойдёт о том, что ещё недавно меня мучило самого. Был сделан php скрипт, использующий API Битрикс, однако при выводе во включаемой области через AJAX у меня дублировался дизайн, а скрипт выводил всего лишь поисковую форму в зависимости от определённых условий. Хотя нет, объясню иначе, был сделан блок на интернет магазине, в котором выводился выпадающий список марок автомобилей, данная выборка делалась из разделов инфоблока марок и моделей машин, заносились в массив и выводились в списке. Когда пользователь выбирает из этого выпадающего списка какую либо марку то ниже должен появляться новый dropdown список, в котором делается выборка из базы определённой марки по моделям, т.е. если мы в 1 списке выбрали Renault, то появлется список где, к примеру, есть Logan, Sandero ну и прочие. Так вот проблема была в том, что подгружался контент через ajax, для того чтоб не перезагружать страницу, ну красивее так. Но если мы делаем отдельный скрипт, то возникает вопрос как использовать api 1с битрикса, но не подключать шаблон, т.к. если подключить по стандарту, то в результате выполнения скрипта и вывода его через аякс, то выведется полностью контент включая шаблон, т.е. будет ужас, можете попробовать это сделать, поймёте. Решение было найдено изучив документацию и исходники других страниц и модулей. Главная фишка заключается в том, что api битрикса подключается не так как на стандартных страницах.
По дефолту при создании страницы мы имеем приблизительно следующий контент:
Изучив header.php и footer.php, пройдя по куче инклудов и поняв где подключается API битрикс я делюсь информацией с вами.
Допустим мы подключаем какой то компонент на чистой странице, на которой нам не нужен шаблон, и контент этой страницы мы подгружаем не инклудом (тогда бы проблем не было, т.к. автоматом подключился бы и api битрикса), а например через ajax. Вот как мы подключаем апи:
В результате вы получите страницу с текстом «Содержимое страницы» на белом фоне, и на этой странице можно подключать компоненты, апи полностью доступен, и эта страница не будет иметь оформления вашего шаблона, т.е. выведется только результат работы скрипта. Интерфейс админ панели и шаблон подключается в файле prolog_after.php
В моем случае я использовал jQuery.Post. Передавал ID раздела Марки (у меня марки были в одном инфоблоке и являлись разделом, а элементы — модели машин в соответствующем разделе), в результате делалась выборка CIBlockElement::GetList, в которой из post-запроса брался ID раздела марки, и формировался через echo select-список, и выводился в результат вышеописанного запроса jQuery.Post в секции data
Вот таким хитрым образом реализуются скрипты на битриксе, когда нам нужен только апи, например в случае скрипта для крона, когда нам не нужен дизайн. Это полезно для ускорения работы крон запросов, т.к. в случае с дизайном он подгружает его целиком, что есть лишнюю память, если таких скриптов много, то это может вызвать некоторые затруднения, а в случае виртуального хостинга могут заблокировать и за превышение нагрузки, были и такие случаи.
Приятного использования. В ближайших постах будет описание того как создать свой первый компонент для битрикса, а пока изучайте битрикс.
Источник
Вариант реализации REST API для 1С-Битрикс Управление сайтом
Вводные
1. В Битрикс заведен каталог товаров без привязки к 1С. В 1С УТ 11 аналогичный каталог.
2. Типовая обработка не позволяет состыковать номенклатуру, результат её работы дубли либо со стороны 1С либо со стороны БУС.
3. Реализация обмена со стороны БУС «черный ящик», в который даже продвинутые программисты по битрикс не горят желанием лезть.
4. Реализация обмена со стороны 1С вызывает ряд вопросов (по логичности и по реализации).
5. Установка доп модуля https://1c.1c-bitrix.ru/ecommerce/download.php проблему не решает, усложняет обновление конфигурации.
Все вышесказанное вынес из собственного опыта взаимодействия при реализации обменов различными способами.
Вариант решения
Настройка проекта
Есть опыт работы с symfony, взял его.
Так же присутствуют ошибки по проверке доступности реквизитов (PSR-4).
Для обхода ошибок был собран symfony без errorhandler.
В папке /local БУС создал папку api_min, в ней создал проект (архив проекта будет в фйлах для скачивания)
Создал папку public, в ней index.php, это будет точкой входа в API
Слеш в конце строки сделал для унификации, т.к. в некоторых настройках БУС автодобавление слеша.
В маршрутах можно использовать regex, что удобно при работе и через id и через xml_id
Организация точки входа
В файле index.php описываем приложение, подключаем контроллеры с данными.
1. Аутентификация по токену
1.1 Заголовок токена, его значения, инфоблоки для работы с товарами заданы в Helpers/ConfigAPI
Работа с товарами
Основная логика описана в «ReferenceIblockController» и «ReferenceController»
Для чтения списка товаров используется «Iblock\ElementTable», т.к. поддерживает limit/offset, для работы с элементами используется CIBlockElement, потому что в новом движке через ElementTable элемент не поменять.
Наследование использую для уменьшения количества кода, т.к. операции с элементами повторяются.
Для проверки параметров запроса и данных в теле запроса использую https://symfony.com/doc/current/validation.html, существенно удобнее чем вручную все проверять и писать сообщения. При ошибки проверки вызываю исключение BadRequestException в которое передаю массив ошибок.
Работа со справочником товары, реализация со стороны 1С
Гружу без пагинации, т.к. каталог небольшой, текущего limit 1000 хватает.
Для обновления элемента используется код
Реализация обмена через REST не сложна, гибка и структурирована, понятно на каком именно элементе произошла ошибка.
Сборка symfony нестандартная, если получится нормально настроить ErrorHandler, то будет чуть проще.
Благодарю за внимание.
Скачать файлы
Специальные предложения
Не соглашусь с первыми 2 пунктами.
Но решение интересное и познавательное, спасибо за статью.
Вопрос следующий: в БУС развивается свое REST API и планируется создать обмен с использованием его (по аналогии, как сейчас работает обмен с Битрикс24). Не сморили в сторону работы через REST API?
Источник
Частые вопросы
Вопросы по установке и настройке продукта
1. Определить свой часовой пояс: http://php.net/manual/en/timezones.php
Например,
Europe/Moscow |
Внимание! Не все системы содержат информацию об отмене перехода на зимнее время в РФ. Используйте прямое указание сдвига относительно GMT, например для Москвы будет
Etc/GMT-4 |
2. Установить часовой пояс для php в /bitrix/php_interface/dbconn.php
date_default_timezone_set(«Etc/GMT-4»); |
Для версии php ниже 5.1 используется функция putenv:
putenv(«TZ=Etc/GMT-4»); |
3. Установить часовой пояс для MySQL в файле /bitrix/php_interface/after_connect.php:
$DB->Query(«SET LOCAL time_zone=’Etc/GMT-4′»); |
Можно использовать для БД часовой пояс php, тогда используйте такой код:
$DB->Query(«SET LOCAL time_zone='».date(‘P’).»‘»); |
После переноса фотогалереи, все альбомы будут выглядеть как галереи и при переходе к галереям фото отображаться не будут, т.к.они лежат в корне галереи, а должны быть в альбомах(дочерних секциях).
В данном случае следует запретить не только отображение значения цены в каталоге, но и покупку по цене данного типа.
Настройка типов цен:
Рабочий стол->Магазин->Торговый каталог->Типы цен
Наверх
Заказчику не приходит уведомление о новом заказе, почему? |
Ошибочно думать, что уведомление о новом заказе отправляется на электронный адрес покупателя, который был указан при его регистрации на сайте. Уведомление отправляется на адрес, указанный в процессе оформления заказа. Чтобы дать возможность покупателю указать свой адрес следует создать соответствующее свойство заказа типа «[TEXT]СТРОКА»; и включить для этого свойства опцию «Использовать как E-Mail». Данное свойство становиться обязательным для заполнения автоматически. Магазин->Настройки магазина->Свойства заказа->Список свойств Также следует удостоверится, что в шаблоне типа события SALE_NEW_ORDER в поле «Кому» или «Скрытая копия» было указано шаблон «#EMAIL#»;, вместо которого и будет подставляться значение созданного вами свойства заказа. Настройки->Настройки продукта->Почтовые события->Почтовые шаблоны Если свойства заказа, отмеченного как e-mail, нет, то письма отправляться не будут. |
Как добавить новые данные в текст письма-уведомления, используя функцию Send? |
Для внесение новых данных в письмо-уведомление, например уведомление о новом заказе, следует получить эти данные, используя соответствующие API фукнции и занести в массив, который является входящим параметром функции Send. Функция Send генерирует событие, а поля указанные в массиве будут доступны для вставки в шаблоне соответствующего типа почтового события. Например, в компоненте оформления заказа: Шаблон почтового события и тип почтового события добавляются в административной части: Внимание! Данные изменения делаются в коде компонентов, которые следует сначала скопировать в пользовательское пространство имён. Наверх |
Как кастомизировать стандартный компонент? |
Чтобы кастомизировать стандартный компонент Вам надо: 1. Создать новое пространство имён компонентов в папке /bitrix/components/, например создать директорию /bitrix/components/my_components/. 2. В созданную папку необходимо скопировать папку с компонентом, который хотите изменить (копировать из папки /bitrix/components/bitrix/). 3. Очистите кеш визуального редактора. В результате в визуальном редакторе у Вас отобразится кастомизированный компонент. Наверх |
Как использовать параметры PARAM1 и PARAM2 в модуле поиска? | |
PARAM1 и PARAM1 используются для сужения области поиска. Для каждого модуля значение этих параметров разное. Пример вызова:
Поиск будет осуществляться в инфоблоке, который имеет тип «news» и код 33. Наверх |
У меня есть домен site.ru. Как в «Битриксе» настроить поддомены вида forum.site.ru? |
Настроить домены можно через DNS сервер хостинг-провайдера. PHP приложение не имеет доступа к настрокам DNS, изменить конфигурацию доменов из «Битрикс» невозможно. Вам необходимо обратиться к своему хостинг-провайдеру с вопросом настройки DNS. Наверх |
Какая структура таблиц БД «Битрикса»? Как мне писать свои SQL запросы? |
Концепция работы с продуктом предполагает работу с данными через функции API (http://dev.1c-bitrix.ru/api_help/main/reference/index.php). Структура данных может меняться от версии к версии, а функции сохраняют обратную совместимость. Мы настоятельно не рекомендуем использовать прямые запросы к БД, т.к. это может нарушить целостность данных и привести к неработоспособности сайта. Нормальная работа продукта в таком режиме не гарантируется и не поддерживается. Наверх |
Как настроить работу периодических функций с использованием планировщика cron? |
Чтобы запускать скрипты, работающие с API «Битрикс», из командной строки необходимо определить некоторые серверные переменные, отключить статистику и подключить ядро без отображения шаблона сайта: После этого такому скрипту необходимо дать права на выполнение: Убедившись, что скрипт отрабатывает из командной строки, можно добавить задание cron, например: Путь к текущей папку можно узнать командой Если на хостинге нет интерпретатора php (только модуль php для apache), то сам скрипт будет иметь вид: А вызов в планировщике надо будет делать через http клиент (например, lynx): Наверх |
Какие права на файлы необходимы для работы «Битрикс: Управление сайтом»? |
Дать универсальный ответ, какие должны быть права на файлы, нельзя, так как каждый хостинг настроен по особенному. Проблема в том, что у каждого хостинг-провайдера своя политика безопасности и свои настройки: одни ограничивают доступ к чужим файлам даже при 777, другие запускают процесс Apache под своим пользователем для каждого виртуального хоста, и т.д. Поэтому вопрос необходимо решать с хостинг-провайдером. Наверх |
Почему нельзя изменять содержимое папки bitrix/modules? |
Содержимое папки bitrix/modules называется ядром продукта (сюда же относятся системные компоненты: bitrix/components/bitrix). В процессе обновления системы содержимое этой папки может быть переписано. Если вы внесёте свои изменения в ядро, они потеряются при обновлении. Вы делаете изменения на свой страх и риск, компания «Битрикс» не несёт ответственности за последствия изменений. Согласно лицензионному соглашению, в этом случае вам будет отказано в технической поддержке со стороны нашей компании. Наверх |
Как выбрать хостера? Какие требования продукта к хостингу? |
Для успешной установки и полноценной работы продукта необходимы следующие параметры: Крайне рекомендуется наличие акселератора PHP (APC, eAccelerator или любого другого). Наверх |
Как изменить выставляемые продуктом права на файлы? | |
Права, с которыми создаются файлы и папки, вы можете установить в файле /bitrix/php_interface/dbconn.php:
См. также: Внимание! Обязательно удалите этот файл после восстановления пароля! Таким образом, запуск в safe mode возможен, но для этого требуются глубокие знания администрирования. Можете делать это на свой страх и риск. Наверх |
Как при показе flash-баннера использовать альтернативную картинку? | |
Для того чтобы вставить Flash баннер с подложкой (картинкой GIF, JPG, PNG) необходимо сделать следующее: 1. При публикации Flash баннера из программы Macromedia (ныне Adobe) Flash следует указать альтернативные форматы, которые будут созданы вместе с Flash баннером, например Gif. 2. На вкладке HTML в диалоге публикации следует установить опцию «Detect Flash Player». В данном случае будет сгенерирован специальный код, содержащий JavaScript для проверки установлен ли Flash проигрыватель и какой он версии. 3. Обратите внимание, полученный HTML код следует скопировать в поле «Код баннера» в режиме HTML (визуальный редактор можно отключить). 4. Код можно сократить оставив только непосредственно вывод баннер средствами JavaScript Код определения версии Flash проигрывателя можно вынести в область в шаблон сайта. Ниже приведен пример подобного кода: Файлы баннера и подложки должны быть скопированы в нужное место на сайт. Наверх |
Как убрать «PHPSESSID=. » из URL? | |
Чтобы избавиться от идентификатора сессии в URL, раскомментируйте строку в /.htaccess
Если это не дает результата, необходимо изменить значение параметра session.use_trans_sid на Off непосредственно в php.ini на сервере. 1. Перейдите в настройки модуля «Монитор производительности» и включите отображение таблиц echo(‘ ‘.GetMessage(«nav_of»).’ ‘); Наверх |
Как перенести сайт или корпоративный портал на другой компьютер? |
array(«PROPERTY»=>array(«isMain»=>$EnumID)) |
Наверх
Как вставить flash-баннер? | |
Ротация Flash баннеров производится аналогично как и графических. Только вместо картинки указывается HTML код. Необходимо выполнить следующие шаги: Ссылка для ролика создается в программе Macromedia Flash след. образом: в результате получится:
Баннер загружается средствами продукта аналогично обычному графическому файлу в поле «Изображение:». if (strlen(trim($arrPath[«extension»]))>0) > |
Наверх
Как отключить определение языка пользователя |
В версии поставки системы в файле /index.php помещен скрипт, определяющий язык пользователя и производящий включение соответствующего файла: / /index.php Самым логичным решением для вас является: Наверх |
Опция: «Закрыть публичную часть сайта». Изменение приветственной страницы. |
Чтобы изменить вид этой страницы, необходимо создать файл с именем «/bitrix/php_interface/include/site_closed.php» для всех языков или для конкретного языка с именем «/bitrix/php_interface/»код языка»/site_closed.php». В этом файле можно разместить любое новое содержимое страницы с информацией о временном закрытии сайта (например, форма авторизации в дизайне сайта и т.п.). Источник Adblockdetector |