Всем Доброго! Нужна помощь При использовании умного фильтра, не выдает результаты ,а окончание сайта filter/clear/apply/ ,при чем в каталоге он работает, а в другом разделе нет, есть ли идеи?
Расширение позволяет в два клика исключить директории кешей битрикса, а также директории upload и install. Файлы в исключенных директориях не индексируются, поэтому индексация проекта будет проходить быстрее. Также в автокомплите не будут подсказываться методы из install директорий модулей.
В Битрикс Управление Сайтом отсутствует возможность получения товаров которые указаны в правилах работы с корзиной, простыми словами товаров на которые применяются скидки. Написал класс для реализации такой возможности https://github.com/Cleverscript/ProductDiscount пользуйтесь, буду рад предложениям по доработке!
В 1С-Битрикс для уменьшения времени повторного создания страниц сайта используется механизм кеширования. Кеш позволит сохранить результат выполнения компонента - html шаблона, данные для заполнения метаданных страницы. Сайту не потребуется выполнять множество запросов к базе данных, расчет скидок и формирование шаблона на каждый хит.
Обратитесь в «Техдиректор» за помощью, если сталкиваетесь с проблемой долгого формирования страницы вашего сайта.
Методы создания кеша компонента
Для начала кеширования данных вызывается метод CBitrixComponent::StartResultCache(…) в качестве условия оператора if. Если данные в кеше актуальны, метод вернет false и тело оператора if будет пропущено.
Запись данных в кеш происходит при вывозе методов CBitrixComponent::EndResultCache() или CBitrixComponent::IncludeComponentTemplate(...). Метод должен быть расположен последним внутри блока if с вызовом метода CBitrixComponent::StartResultCache(…).
Пример кеширования с html-шаблоном:
if ($this->StartResultCache($arParams['CACHE_TIME'], [ ...$additionalCacheId ]))
{
// загрузка данных
$this->IncludeComponentTemplate(); // кеширование $arResult и html-шаблона
}
// установка мета-данных страницы
Пример кеширования только $arResult:
if ($this->StartResultCache($arParams['CACHE_TIME'], [ ...$additionalCacheId ]))
{
// загрузка данных $arResult для кеширования
$this->EndResultCache(); // кеширование только $arResult
}
// обработка запроса пользователя
$this->IncludeComponentTemplate();
HTML-шаблон одинаков для большой группы пользователей
Пользователь может сделать выбор, ввести данные
Данные в кеше
HTML-шаблона, $arResult, $templateData
$arResult
Выполнение result_modifier.php и template.php
Один раз
Каждый хит
Параметры запроса $_REQUEST, $_GET, $_POST, $_SESSION, $USER в result_modifier.php и template.php
Передавать в параметрах вызова компонента $arParams с приведением значения по допустимому списку вариантов.
Пример - вариант отображения списка или сортировка.
Без ограничений. Для вывода использовать функцию htmlspecialcharsbx() (уязвимость XSS).
Рекомендуется использовать данные $arResult.
Глобальные переменные (например, $APPLICATION) в result_modifier.php и template.php
Сохранить данные в $arResult или $templateData. Выполнить в component_epilog.php ^1.
Например, установка заголовка страницы ^2.
Без ограничений
Кеширование дополнительной выборки в result_modifier.php и template.php
Не требуется
Требуется
^1 - для вложенных компонентов component_epilog.php выполнится, если при вызове [$APPLICATION->IncludeComponent(...)](https://dev.1c-bitrix.ru/api_help/main/reference/cmain/includecomponent.php) передан аргумент $parentComponent. ^2 - обратите внимание, после component_epilog.php будет выполнен код компонента, расположенный ниже вызова метода CBitrixComponent::IncludeComponentTemplate(...), поэтому для установки метаданных может потребоваться изменить $component->arResult, т.к. компонент выполнит функции позже и переопределить глобально установленные значения.
Хранение кеша
Путь к файлу кеша формируется из директории кеша и md5-хеша идентификатора кеша.
По умолчанию директория кеша выглядит как bitrix/cache/{siteId}/{relativeComponentPath}/{salt} (например, bitrix/cache/s1/bitrix/catalog.smart.filter/59d). Переопределить директорию кеша компонента можно, передав аргумент $cachePath для метода CBitrixComponent::StartResultCache(…).
Идентификатор кеша, позволяет отличить файл кеша для вызова компонента в разных областях страницы и параметрах окружения. По умолчанию зависит от значений всех параметров компонента, идентификатора сайта, языка, шаблона сайта, временной зоны и порядковому номеру вызова на странице данного компонента. Разработчик может добавить собственные аргументы в идентификатор кеша, передав аргумент $additionalCacheID для метода CBitrixComponent::StartResultCache(…) (например, группы пользователя в зависимости от параметра CACHE_GROUPS).
Идентификатор кеша формируется в методе CBitrixComponent::GetCacheID(), может быть переопределен в собственном компоненте. В стандартных компонентах метод GetCacheID изменен только в компонентах bitrix:menu и bitrix:intranet.contact_center.list.
В качестве хранения системы хранения кеша можно выбрать Memcached или Redis. Обратите внимание, не рекомендуется использовать динамический sid для сайтов с многосайтовостью. Возможна проблема сброса кеша только по одному ключу sid.
Время кеширования
Время кеширования для компонентов с поддержкой тегированного кеша можно выбрать достаточно большим (например, один день). В случае изменения данных 1С-Битрикс автоматически отметит связанный кеш для удаления. По умолчанию при выборке данных из инфоблока [CIBlockResult::Fetch()](https://bxapi.ru/src/?module_id=iblock&name=CIBlockResult%3A%3AFetch) регистрируется тег инфоблока, поэтому вызов $CACHE_MANAGER->RegisterTag(...) необязателен. Стоить обратить внимание, что тег кеша скидок не регистрируется, поэтому при изменении скидок потребуется сбросить кеш вручную.
Особенность тегированного кеша 1С-Битрикс состоит в том, что при изменении любого товара, происходит сброс кеша всего каталога. Что приводит к проблеме, если при максимальной активности посетителей, изменения товаров происходят с периодичностью несколько раз в минуту. В таком случае рекомендуем выбрать время кеширования от 10 минут до 1 часа и отключить автоматическое тегирование перед вызовом компонента каталога.
В кеше стоит хранить компоненты на часто посещаемых страницах сайта и одинаковых для большой группы пользователей. Поэтому:
Кеширование при установленном фильтре (параметр CACHE_FILTER) стоит отключить по умолчанию. Включать, если используете дополнительный фильтр по умолчанию (заполняете $GLOBALS[$arParams['FILTER_NAME']]) и не выбраны дополнительные условия в смарт-фильтре. Также стоит включить CACHE_FILTER для страниц, ссылки на которые размещены на странице раздела в качестве тегов или используются в рекламе.
Список товаров в поиске также не стоит кешировать, т.к. кеш будет разным для каждого уникального запроса пользователя.
В персональном разделе покупателя использовать кеширование компонентов по умолчанию не требуется.
Если в параметрах компонента передаете генерируемые данные, которые со временем больше не могут быть использованы. Например, в качестве параметра компонента используете результат функции date('Y-m-d'). В таком случае потребуется реализовать агент, который будет очищать устаревший кеш (на основе \Bitrix\Main\Data\Cache::clearCache(...)), чтобы избежать переполнения места на диске.
PHP Fatal error: Declaration of Bitrix\Main\Diag\Logger::log($level, Stringable|string $message, array $context = []): void must be compatible with Psr\Log\LoggerInterface::log($level, $message, array $context = []) in ..../bitrix/modules/main/lib/diag/logger.php
Столкнулись с ошибкой, которую не удается зафиксировать в exception_handling 1С-Битрикс. Происходит фатальное исключение при попытке записать исключение в лог.
Обратитесь в «Техдиректор» за помощью, если сталкиваетесь с проблемой на вашем проекте.
Причина: 1. В главном модуле обновился пакет psr/log - для аргументов функции добавлено указание типов. 2. Класс для логирования exception_handling (Bitrix\Main\Diag\Logger) теперь так же реализует интерфейс с типами аргументов. 3. В проекте может быть загружена старая версия psr/log (без указания типов). Например, в php_interface или стороннем модуле.
Как происходит: 1. Класс Psr\Log\LoggerInterface загружается из старой версии psr/log (пункт №3) 2. Exception_handling 1С-Битрикс загружает Bitrix\Main\Diag\Logger (пункт №2). 3. PHP выбрасывает исключение, т.к. Bitrix\Main\Diag\Logger сужает набор типов аргумента относительно интерфейса. В PHP при наследовании можно только расширять набор типов аргументов функции или сужать тип возвращаемого значения ^1.
Как найти ошибку, если ничего не выводится и exception_handling не работает: 1. Проверьте error_log веб-сервера или файл, указанный в php.ini для error_log. 2. В начале скрипта вставьте register_shutdown_function с выводом последней зарегистрированной ошибки. Если в браузере не получается вывести ошибку, заполните $_SERVER['DOCUMENT_ROOT'] и запустите скрипт через ssh.
//$_SERVER['DOCUMENT_ROOT'] = ....; use for cli
register_shutdown_function(function() {
print_r(error_get_last());
});
Как найти старую версию psr/log, если столкнулись с таким текстом ошибки: 1. Перед строкой с проблемой можно вставить (например, в init.php). Обратите внимание, может давать разный результат в зависимости от порядка автозагрузки классов
$reflection = new ReflectionClass(\Psr\Log\LoggerInterface::class);
echo $reflection->getFileName();
2. Выполнить через ssh в директории сайта grep -r "namespace Psr\\\\Log;" --include=*.php . 3. Оригинальный psr/log лежит в файле bitrix/modules/main/vendor/psr/log/src/LoggerInterface.php. Если нашли имеено его, воспользуйтесь вторым вариантом поиска.
Что делать: 1. Удалить папку со старым psr/log, если расположена вне модуля. 2. Если расположена внутри модуля, переименовать папку psr/log внутри модуля. Написать разработчикам модуля. 3. Проверить, что сайт продолжает работать. В командной PHP-строке административной панели выполнить throw new RuntimeException('dummy');, проверить результат в логе exception_handling.
Чтобы избежать конфликта, устанавливайте зависимости composer, отключая загрузку пакетов, которые уже есть в главном модуле с помощью параметра replace. Для поддержки старых версий модуля main, реализуйте условный загрузчик на примере модуля techdir.sentry.
Здравствуйте, Создал свой обработчик для исходящего вебхука Битрикс24. Необходимо обработать поступившие данные при помощи Bitrix API. В момент как только подключаю prolog_before - скрипт останавливается по причине формы авторизации, которая возникает при обращении хука к файлу.
Можете, пожалуйста, направить на ход мыслей нужных или на курс обучения, где говорится про авторизацию хуков в своих обработчиках
В боковом меню ссылка на CRM направляет на главную страницу сайта, хотя в редактировании меню указан путь /crm/. Проявляется только у одного пользователя. У других пользователей формируется ссылка https://"адрес сайта"/crm/lead/?redirect_to. Шаблон для компонента меню используется left_vertical (Битрикс24 - Социальный интранет). Подскажите, пожалуйста, с чем может быть связано?
У меня есть один вопрос, кто может поделиться со мной CICD, когда у нас есть разработка, постановка и производство. Среды с точки зрения базы данных.Как мне перенести базу данных из среды разработки в промежуточную среду, чтобы база данных не была заражена? Или, например, у меня есть тестовый пользователь в базе разработки, и я не хочу, чтобы этот пользователь был Staging и Production. У нас есть бокс-версия Битрикс
Себе на память - что делать если при восстановлении из резервной копии выводится ошибка:
Ошибка! IP адрес клиента изменился, продолжение невозможно.
Самое простое решение это просто перезаписать файл restore.php свежезагруженным. Но если это в текущей ситуации неудобно, можно открыть существующий файл restore.php на редактирование и найти строки:
В первой строке файл записал ip адрес, с которого его первый раз запустили, во вторую строку - время первого запуска. Ошибки выдаются как при изменении ip адреса так и если прошло более суток с момента INIT_TIMESTAMP. Самое простое решение если нужно сохранить существующий файл но сбросить указанные значения - просто вписать туда плейсхолдеры по умолчанию:
Увидев такие плейсхолдеры скрипт при следующем запуске автоматически перезапишет их актуальными данными. Также можно вписать руками актуальный ip адрес и текущий timestamp - сработает аналогично.
Задача тривиальная и решений у нее много. В основном все "по старинке" дергают событие поступления почтового события и в нем что-то делают с массивом письма шаблона (дописывают недостающие и/или модифицируют имеющиеся).
Я набросал решение с класса \Bitrix\Sale\Notify, который не особо документирован, но с него накопировал кода под заполнение плейсхолдеров, как в шаблоне SALE_NEW_ORDER.
Ниже код, как пример использования, собрал на "быструю руку":
Hi guys i'm new here, i need with proper documentation on how to implement payment gateway plugins. Because must of the payment system on bitrix is not available in my country and i need to implement one for my organization.
Предполагается что VMBitrix установлена и настроена сеть как "Сетевой мост", с доступом к серверу по ssh по IP 192.168.0.xxx (см. статью https://dev.1c-bitrix.ru/community/webdev/user/1064429/blog/43682/) В виртуальную машину включён Xdebug из коробки, по этому ставить его не нужно.
2) смотрим ключ IDE какой указана в настройках плагина (по дефолту там "vsc", его и указываем в .ini в параметре xdebug.idekey) VSCode File > Preference > Settings > Extensions > PHP Debug > Ide Key.
3) создаем файл если нет
touch /etc/php.d/z_bx_custom.ini
4) прописываем в /etc/php.d/z_bx_custom.ini такие конфиги (192.168.0.102 это IP хоста c IDE, на него xdebug будет отправлять данные через 9003 порт)
--------------------------------------------------------------------------------------------------------------------- ВАЖНО: параметр "pathMappings" содержит пути на удаленном сервере и на локальной машине где "/" - это адрес папки с кодом (проектом) на сервере, а "${workspaceRoot}" путь к локальным копиям файлов проекта
ВАЖНО: смотрим логи xdebug командой в консоли
tail -f /tmp/xdebug.log
там может быть ошибка связанная с не верно указанными путями в "pathMappings", из за чего не появляются переменные в блоке "VARIABLES" в расширении VSCode "PHP Debug" (по сути отладка не работает). Для этого смотрим настройки соединения с удаленным сервером в .vscode\sftp.json (Ctrl+Shift+P) параметр "remotePath" и если там указано "remotePath": "/" (т.е корень сервера) то и в .vscode/launch.json должно быть соответственно.
[14044] [Step Debug] <- breakpoint_set -i 7 -t line -f file:///home/bitrix/ext_www/dev1-site.ru/home/bitrix/ext_www/dev1-site.ru/test/index.php -n 3
[14044] [Step Debug] WARN: Breakpoint file name does not exist: /home/bitrix/ext_www/dev1-site.ru/home/bitrix/ext_www/dev1-site.ru/test/index.php (No such file or directory).
[14044] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="7" id="140440038" resolved="unresolved"></response>
Недостаток этого метода - он удаляет текущее состояние агента. Что может быть важно для агентов, у которых периодичность выполнения: через заданный интервал: при сбросе следующей даты запуска на текущую, агент запустится немедленно, что может быть нежелательно. Также можно воспользоваться модулем sprint.migration https://marketplace.1c-bitrix.ru/solutions/sprint.migration/ Код будет выглядеть примерно так:
Здравствуйте! Столкнулся с такой проблемой, при вызове некоторых функций, сервер или Битрикс выкидывает такое сообщение "Forbidden Request ID: 2023-06-08-17-01-30-3F7E3776633648F8" создаю файл в корне Битрикса пишу в нем echo 'текст'; нормально открывает, а если пишу phpinfo(); то выдает выше описанное предупреждение и блокирует. Никогда с таким не сталкивался, на этом же сервере лежит тестовая копия на ней этой проблемы нет... Может кто то сможет подсказать в чем может быть дело.
Как то не сложилось у меня найти годную пошаговую инструкцию по установке и настройке сети BitrixVM7.5.1 Что бы в ней было четко и пошагово описано, как все сделать, что бы на локальной машине под Win10, с использованием VirtualBox крутилась BitrixVM с выходом в интеренет (что бы можно было обновлять\устанавливать пакеты, например откатить версию PHP на 7.3, и тп.).
ТП Битрикс предоставила такие 2 ссылки, и заверила что никаких настроек руками прописывать не нужно (и за то спасибо!)
Отдельно отмечу, что вручную не нужно ничего настраивать. Настройка сети в самом веб-окружении производится через меню веб-окружения 2. Manage localhost - 3. Configure network interface manually. или 2. Manage localhost - 2. Configure network interface via DHCP.
Однако пока я это не сделал именно руками, у меня ничего не получилось (Параметр BOOTPROTO=none? Cтандартно машина ставит при конфигурации из своего меню BOOTPROTO=static, значение none подсмотрел на сервере FiirstVDS с BitrixVM "где все работает"),
единственное чего я добился при настройке из меню виртуальной машины 2. Configure localhost settings -> 2. Configure network interface via DHCP. это выдачу динамического IP машине при старте, при этом ping проходил, но сайт открыть по выданному IP не получалось...
а если я настраивал через меню 2. Configure localhost settings ->3. Configure network interface manually. то ping в консоли не проходил и пакеты я обновлять не мог...
В общем краткая инструкция, может кому то поможет, а может кто то и подскажет этот заветный, правильный порядок действий по настройке сети в CentOS 7, что бы работало: - открытие сайта на BitrixVM по локальному IP и он не менялся при перзагрузке машины - был выход во внешний интернет и можно было обновлять\устанавливать пакеты
1) Конфигурируем сетевой интерфес enp0s3 переходим в меню VM
2. Configure localhost settings - 3. Configure network interface manually вводим там IP для машины 192.168.0.120, маску 255.255.255.0, шлюз 192.168.0.1 (IP вашего роутера), IP DNS серверов (гугла например 8.8.8.8). Проверяем, в должно быть примерно так
2) В файле resolv.conf прописываем IP DHCP серверов из настроек вашего роутера или гугловский или FirstVDS
vi /etc/resolv.conf
nameserver 8.8.8.8
nameserver 82.146.59.250
3) Перезагружаем сетевую службу
service network restart
4) Проверяем проходит ли ping, если проходит то все ок
ping ya.ru
5) Для пущей надежности перезагружаем машину, из меню вертуалки или командой
reboot
6) Проверяем в браузере что открывается установщик битрикса по IP, вводим в адресную строку 192.168.0.120 7) Подключаемся по SSH 192.168.0.120 и проверяем пинг еще раз
ping ya.ru
Если прошел, то УРА на вашей локальной виртуальной машине BitrixVM есть доступ в инет и можно обновлять и устанавливать пакеты!
Если вдруг при восстановлении из резервной копии сайта Bitrix на виртуальной машине BitrixVM (7.4.X) вы видите сообщение:
Сайт работал в кодировке UTF-8. Конфигурация сервера не соответствует требованиям. Для продолжения установите настройки PHP: mbstring.func_overload=2 и mbstring.internal_encoding=UTF-8.
Администрирование -> Общие настройки -> Параметры серверной информационной базы -> Параметры доступа в интернет Там установить: 1) Адрес сервера: IP адрес вашей машины. 2) Порт: 8888
Если сайт работает по https, то включите, пожалуйста, в fiddler логирование трафика по https - Tools > Fiddler Options > HTTPS > Decrypt HTTPS traffic option Откройте fiddler и запустите выгрузку. При этом ваши хиты отобразятся в fiddler, сохраните сессию из фидлера в формате saz и приложите её к обращению.
Лог сессии fiddler можете прислать нам, для анализа
Доброе утро сообщество Битрикс на Форуме, хочу немного рассказать о своем кейсе. У меня сервер Битрикс для разработки на PHP версии 8.0, в продакшене у него PHP версии 7.4. Поскольку в моем коде есть изменения, которые еще не были проверены, одна проблема, которую я видел среди нескольких, заключается в следующем: