Платёжные обработчики в Битрикс Sale (D7)
Каталог обработчика в php_interface, совпадение имени класса с папкой, initiatePay, обратные вызовы через sale_ps_result и чтение лога PaySystemErrLog.
Найдите нужную статью о модулях 1С-Битрикс,
настройке и оптимизации
Найдено результатов: 50 по тегам d7
Каталог обработчика в php_interface, совпадение имени класса с папкой, initiatePay, обратные вызовы через sale_ps_result и чтение лога PaySystemErrLog.
Почему вместо prolog достаточно header.php, где лежит конфиг и как описывается запрос к ORM: select, filter, order, limit, offset, count_total.
Типовые таблицы UserTable, GroupTable и связь UserGroupTable: фильтры, выборка полей и получение активных членств без прямых SQL.
Подписка на событие модуля, чтение чужих результатов до своего результата, возврат EventResult и рассылка собственного события с именованными параметрами — без привязки к стороннему решению.
\Bitrix\Main\Service\GeoIp\Manager: реальный IP, Result с geoData, смена языка вывода и шорткаты для страны, города и координат.
Loader::IncludeModule, compileEntity, поиск ID по NAME, выборки с limit, COUNT через ExpressionField, add/update/delete с проверкой isSuccess.
Регистрация обработчика через EventManager, чтение чужих EventResult, модификация параметров и отправка своего события с буквенными ключами.
Создание строки описания блока через HighloadBlockTable::add и привязка пользовательских полей сущности вида HLBLOCK_ID; для строки задают подписи RU/EN через массивы меток формы без забывания обязательных ключей настроек.
Классы IblockTemplates, SectionTemplates и ElementTemplates: чтение findTemplates, дозапись текста к SECTION_META_TITLE и ELEMENT_META_TITLE, полное удаление delete().
Подключение модуля highloadblock, сборка класса данных по ID или имени сущности, getList с лимитом и агрегатом COUNT, одиночное чтение и типовые операции add/update/delete с проверкой isSuccess.
ORM-выборка вариантов списка по ID свойства и построение карт соответствия XML_ID ⇄ INTERNAL_ID для всех свойств типа список в инфоблоке — чтобы обмен и импорты не смешивали внешние коды со служебными числами.
Получение объекта запроса из контекста приложения, чтение GET/POST/файлов/cookie, JSON-тело, служебные BITRIX-параметры и короткие проверки HTTPS, Ajax и админки.
Регистрация обработчика через EventManager, цепочка EventResult при нескольких подписчиках, выброс ошибки типом результата и рассылка собственного события с именованными параметрами.
Класс \Bitrix\Main\Diag\Debug для точечной диагностики: дамп переменной в буфер, строку без вывода в ответ или запись в лог; когда лучше писать в файл и почему путь задают относительно корня сайта.
Как выставить cookie через \Bitrix\Main\Web\Cookie и ответ приложения, когда нужен writeHeaders после AJAX без эпилога, и как прочитать значение через HttpRequest — с автоматическим префиксом главного модуля или «как есть» через getCookieRaw.
Как через D7 получить объект соединения с основным или вторым MySQL-пулом, выполнить выборку, скаляр и команду без курсора, а также когда уместно подключать SqlHelper для экранирования.
Класс Culture в ядре main хранит форматы даты, времени и представления имени, кодировку, направление текста и день начала недели. Как получить объект культуры из текущего контекста, собрать свой экземпляр на время обработки, поднять запись из БД по ID и выбрать все культуры через CultureTable.
Как перевести массив полей или строку из UTF-8 в кодировку сайта через \Bitrix\Main\Text\Encoding::convertEncoding, зачем указывать LANG_CHARSET и когда уместен convertEncodingToCurrent для входящих данных.
Где в D7 брать объект запроса, ответ и параметры окружения без разбора $_GET и $_SERVER вручную: Context::getCurrent(), цепочки getRequest/getResponse/getServer, смена кода сайта и языка, работа с Culture для форматов дат.
Классы \Bitrix\Main\Type\Date и \Bitrix\Main\Type\DateTime: разбор строк в формате сайта и с произвольным шаблоном, часовые пояса, региональные настройки и вывод для другого LID, UNIX-время, перевод из PHP-\DateTime, пользовательское время, арифметика add() и проверка isCorrect().
Для модуля Заведение ПРО сайт ресторана. Различные готовые решения для доработки навигационного меню.
Перенести кнопку открытия мобильного меню влево - необходимо перенести код кнопки из шаблона компонента меню navbar в include/header/navbar.php до включаемой области с логотипом:
Работа с типами цен модуля "Торговый каталог" при помощи классов "\Bitrix\Catalog\GroupTable", "\Bitrix\Catalog\GroupLangTable", "\Bitrix\Catalog\GroupAccessTable", "\Bitrix\Catalog\PriceTable".
"\Bitrix\Catalog\GroupTable": Таблица типов цен
"\Bitrix\Catalog\GroupLangTable": Таблица языковых параметров типов цен
"\Bitrix\Catalog\GroupAccessTable": Таблица прав доступа к типам цен
"\Bitrix\Catalog\PriceTable": Таблица непосредственно цен на товары, но использовать вместо него нужно "\Bitrix\Catalog\
Обработка исключений, "вброшенных" стандартным классом битрикс "\Bitrix\Main\SystemException".
Пример обработки ошибочного преобразования json функцией "\Bitrix\Main\Web\Json::decode":
Подключение JS скриптов, файлов стилей CSS, программного кода для области <head> или помещаемого в конец страницы.
За то, в какое место страницы будет помещены коды подключения скриптов (либо они будут объединены или подключены в виде единого файла), отвечают настройки главного модуля:
Подключение CSS файла, находящегося в шаблоне текущего сайта в подпапке "css":
Константа BX_AGENTS_LOG_FUNCTION указывает имя пользовательской функции: ядро вызывает её на старт и финиш каждого агента — удобно писать длительность и имя задачи в отдельный файл без профайлеров.
Событие модуля sale позволяет подмешать условие в параметры выборки заказов перед отрисовкой таблицы: только свои статусы, диапазон ID, свойство заказа через runtime-связь или дополнительные сервисы отгрузки.
Быстро найти файл и строку объявления любой пользовательской или ядерной функции — через ReflectionFunction; полезно, когда нужно понять переопределения и хуки вокруг типичных вызовов вроде bx_mail.
Наследование catalog.section, переопределение getElementList: убрать DETAIL_TEXT, TAGS, служебные даты и авторов из выборки списка; замер через Debug::startTimeLabel; ссылка на заметку про тайм-лейблы.
Отличие IS_NEW и отсутствия ID, возврат EventResult::ERROR для блокировки оформления, маркировка оплаты до сохранения, автозаполнение свойства из корзины, слежение за полем DEDUCTED и порядок относительно проверки полей.
Класс с сбором полей SALE_NEW_ORDER, вызовом легаси-события EVENT_ON_ORDER_NEW_SEND_EMAIL, получение e-mail из свойств и пользователя; плюс Notify::sendOrderCancel и sendOrderPaid для отмены и оплаты.
Как одной проверкой понять, что текущий HTTP-запрос обслуживает админку, а не публичную часть сайта: метод запроса в D7, что он учитывает про константы и пути, и чем заменить ручной разбор URI в своих модулях.
Подключение модуля currency, человекочитаемый список валют, выборки через CurrencyTable и CurrencyRateTable, языковые названия, базовая валюта, валюта заказа и позиции корзины, сброс кеша — в духе D7 без лишнего наследия C-классов.
Как без сторонних библиотек узнать, что запрос пришёл с телефона или планшета: встроенный класс в модуле conversion, проверка подключения и компактное выражение для шаблона или обработчика.
Как через обработчик \Bitrix\Main\Mail\Internal\Event::OnBeforeAdd подставить свой макрос в письмо SALE_ORDER_DELIVERY: прочитать заказ, склад отгрузки и пользовательское поле склада в C_FIELDS.
Три точки вмешательства: правка готового письма перед SMTP, изменение полей при вставке строки почтового события в БД и устаревший, но универсальный OnBeforeEventAdd — с оговорками про CEvent::SendImmediate.
Если справочник на highload влияет на вывод элементов инфоблока, компонентный кеш может остаться старым. Подписываемся на события сущности HL и вызываем ClearByTag по тегу инфоблока.
Два ортогональных места в ядре: флаг оплаты заказа через OnSaleOrderSaved и переход конкретного платежа в состояние «оплачен» через OnSalePaymentEntitySaved, если важны частичные оплаты и внутренняя платёжная система.
Как через Bitrix\Sale\Discount\Gift\Manager получить наборы подарков для текущей корзины и для выбранного товара, зачем оборачивать вызов в DiscountCompatibility и как по productId отличить SKU от оффера.
ORM-таблица \Bitrix\Iblock\IblockTable для списка всех инфоблоков и \Bitrix\Iblock\IblockSiteTable для SITE_ID; сортировка для выпадающих списков в админке и сбор подписи «тип + сайты + название».
Как подписаться на смену полей сущностей модуля sale до и после записи, какие параметры приходят в Event и как вернуть ошибку, блокирующую изменение STATUS_ID, доставку и другие поля.
Как включить класс Element…Table по символьному коду API, читать элемент через getByPrimary и getList, обходить множественные свойства и привязки к элементам, строить путь раздела из символьных кодов и посчитать строки одним запросом с ExpressionField.
Как в ядре D7 получить «объект текущего пользователя», проверить авторизацию, админство и группы, вывести ФИО и контакты, проверить операцию и добрать поля из UserTable — без привычных, но уходящих из моды методов глобального $USER.
Как в D7 через LocationTable забрать корневые местоположения с локализованными именами и прочитать сервис PHONE_MASK для динамической маски телефона.