не исправляются т.к. разработчики не пишут обращения, но сколько нужно иметь терпения чтобы объяснить поддержке что фаталка в php 8 от того что строка умножается на число например?
Без разбирательств о внутренних причинах помогает так:
public static function propertyIdToFacetId($propertyId)
{
return intval($propertyId) * 2;
}
вместо
public static function propertyIdToFacetId($propertyId)
{
return intval($propertyId * 2);
}
Просто как костыль, но даже школьнику ясно что после умножения на 2 число не может стать дробным, если умножается целое число, и разуммется логично intval поставить именно перед умножением а не после, но какая жесть - вместо этого мне предлагают ПОПРОБОВАТЬ использовать другой тип свойств.
общаться надо 1. выдохнув 2. спокойно. поддержка 8 не заявлена идет плавный переход, уже очень много исправили, но еще есть куда работать.
Это связано с подсистемой хранения значений свойств элементов инфоблока и тут вам поддержка правильно подсказала: сначала приведите к нужному виду (т.е. floatval, intval и т.п.), а потом уже выполняйте математические операции. Ну либо посмотрите в чем хранит битрикс свойства (дефолтно - строка) и уже потом подберите тип свойства который хранит и оперирует нужный вам тип.
Кстати не увидел ваше полезное сообщение. Спасибо за ответ, структурно в БД это колонка с цифровыми значениями и по ней срабатывает фильтр по "больше или равно", тут нет проблем, проблема именно в умножении строки на число, разработчик почему то решил что будет приходить фильтр PROPERTY_123 Тоесть с номером свойства, но у меня несколько инфоблоков по одному фильтру (ограничение возраста в фотобанке) и не получается указать номер, потому я указываю: PROPERTY_AGE_LIMIT Всё правильно тоесть делаю, а в этом местоде пытается выполнится такое выражение intval('AGE_LIMIT' * 2) Что приводит к ошибке. Вообще может стоит написать разработчикам PHP, чтобы они добавили в интерпретатор проверку "на битрикс" и как то со своей стороны решали проблемы)
А можете показать где у вас такое преобразование получается (именно intval)? И попробуйте еще 2 хинта: 1. Заменить на PROPERTY_AGE_LIMIT.VALUE 2. Перевести инфоблоки на 2.0
Это глобальная переменная содержащая параметры фильтрации и добавляемая во все вызова компонентов на странице, тоесть это не фильтр запроса
Подождите. Я тогда чего-то не догоняю: где в коде битрикса происходит эта магия? У вас есть фрагмент кода битрикса наглядно демонстрирующий проблему?
[TypeError] Unsupported operand types: string * int (0) /bitrix/modules/iblock/lib/propertyindex/storage.php:269 #0: Bitrix\Iblock\PropertyIndex\Storage::propertyIdToFacetId(string) /bitrix/modules/iblock/lib/propertyindex/querybuilder.php:284 #1: Bitrix\Iblock\PropertyIndex\QueryBuilder->fillWhere(array, boolean, array, array) /bitrix/modules/iblock/lib/propertyindex/querybuilder.php:98 #2: Bitrix\Iblock\PropertyIndex\QueryBuilder->getFilterSql(array, array) /bitrix/modules/iblock/classes/general/iblockelement.php:746 #3: CAllIBlockElement->MkFilter(array, array, array) /bitrix/modules/iblock/classes/general/iblockelement.php:3074 #4: CAllIBlockElement->PrepareGetList(array, array, array, string, array, array, NULL, NULL, array, boolean, string, array, array, array) /bitrix/modules/iblock/classes/mysql/iblockelement.php:327 #5: CIBlockElement->prepareSql(array, array, boolean, array) /bitrix/modules/iblock/classes/mysql/iblockelement.php:667 #6: CIBlockElement::GetList(array, array, boolean, array, array) /bitrix/modules/iblock/lib/component/base.php:1711 #7: Bitrix\Iblock\Component\Base->getSeparateList(array) /bitrix/modules/iblock/lib/component/base.php:1680 #8: Bitrix\Iblock\Component\Base->getElementList(integer, integer) /bitrix/modules/iblock/lib/component/elementlist.php:1067 #9: Bitrix\Iblock\Component\ElementList->getElementList(integer, integer) /bitrix/components/bitrix/catalog.section/class.php:610 #10: CatalogSectionComponent->getElementList(integer, integer) /bitrix/modules/iblock/lib/component/base.php:795 #11: Bitrix\Iblock\Component\Base->initElementList() /bitrix/components/bitrix/catalog.section/class.php:653 #12: CatalogSectionComponent->initElementList() /bitrix/modules/iblock/lib/component/base.php:4087 #13: Bitrix\Iblock\Component\Base->processResultData() /bitrix/components/bitrix/catalog.section/class.php:110 #14: CatalogSectionComponent->processResultData() /bitrix/modules/iblock/lib/component/base.php:4602 #15: Bitrix\Iblock\Component\Base->loadData() /bitrix/modules/iblock/lib/component/elementlist.php:1285 #16: Bitrix\Iblock\Component\ElementList->loadData() /bitrix/modules/iblock/lib/component/base.php:4591 #17: Bitrix\Iblock\Component\Base->initialLoadAction() /bitrix/components/bitrix/catalog.section/class.php:404 #18: CatalogSectionComponent->initialLoadAction() #19: call_user_func(array) /bitrix/modules/iblock/lib/component/base.php:4774 #20: Bitrix\Iblock\Component\Base->doAction() /bitrix/modules/iblock/lib/component/base.php:4792 #21: Bitrix\Iblock\Component\Base->executeComponent() /bitrix/modules/main/classes/general/component.php:660 #22: CBitrixComponent->includeComponent(string, array, object, boolean) /bitrix/modules/main/classes/general/main.php:1072 #23: CAllMain->IncludeComponent(string, string, array, object) /local/templates/main/components/bitrix/catalog/main/section.php:29 #24: include(string) /bitrix/modules/main/classes/general/component_template.php:790 #25: CBitrixComponentTemplate->__IncludePHPTemplate(array, array, string) /bitrix/modules/main/classes/general/component_template.php:885 #26: CBitrixComponentTemplate->IncludeTemplate(array) /bitrix/modules/main/classes/general/component.php:775 #27: CBitrixComponent->showComponentTemplate() /bitrix/modules/main/classes/general/component.php:716 #28: CBitrixComponent->includeComponentTemplate(string) /bitrix/components/bitrix/catalog/component.php:171 #29: include(string) /bitrix/modules/main/classes/general/component.php:607 #30: CBitrixComponent->__includeComponent() /bitrix/modules/main/classes/general/component.php:684 #31: CBitrixComponent->includeComponent(string, array, boolean, boolean) /bitrix/modules/main/classes/general/main.php:1072 #32: CAllMain->IncludeComponent(string, string, array, boolean) /stock/index.php:243 #33: include_once(string) /bitrix/modules/main/include/urlrewrite.php:160 #34: include_once(string) /bitrix/urlrewrite.php:2
А какой у вас предустановленный фильтр?
Например $filter = [ '<=PROPERTY_AGE_LIMIT' => 18, ];
Вы свой фильтр покажите, который валит на php8. Я пока не вижу, как воспроизводить, хотя весь ваш код просмотрел.
$filter = [ '<=PROPERTY_AGE_LIMIT' => 18, ];
В catalog.section идет?
Обсуждают сегодня