разделов инфоблока через такое апи
\Bitrix\Iblock\Model\Section::compileEntityByIblock($arParams['IBLOCK_ID']);
Как оказалось необходимо приводить к типу данных $arParams['IBLOCK_ID']:
\Bitrix\Iblock\Model\Section::compileEntityByIblock((int)$arParams['IBLOCK_ID']);
Хотя раньше работало. Никто не знает почему в ядре они перестали приводить к типу данных номер инфоблока? Может это было сделано специально для чего-то?
Этот вопрос скорее всего к техподу битрикса. Может кому пригодится.
Полистайте выше уже тоже словили. Думаю починят относительно скоро
Спасибо. Но я весь чат не успеваю читать по времени. А то что читал, не встречал этого.
Там усложнилась логика приведения входящей переменнной. Теперь на вход принимается как строка, инт, так и инстанс Iblock. Но если передаётся строка, то до проверки is_numeric заходит в проверку is_string где предполагается что если передаётся стринг, то это код апи. И пытается найти инфоблок по коду апи и зачем-то переопределяется входящая переменная результатом этого поиска. Логично что не будет существовать инфоблока с апи кодом равным айдишнику. Следующие проверки проваливаются потому что теперь входящая переменная null. И собственно поэтому возвращает null в основной функции.
Отлично. Вообще по хорошему всегда лучше приводить к типам, но php нас разбаловал в этом.
По хорошему не просто приводить, а строго типизировать в самой функции. php 8 теперь позволяет указывать несколько типов для одного аргумента.
Но учитывая что раньше у этих функций типизации не существовало - внедрение типов тоже обернётся проблемами
Да. Перевод на php 8 будет проблематичным. Да и там вроде как добавляется обязательно <?php вместо <? (исключение если выводится сразу что-то из переменной например)
В тп напишите. Чем больше обращений, тем быстрее выпуск фикса клиентам.
(задумчиво) в новом коде ?тип мне пока хватает...
Обсуждают сегодня