Есть сайт, в котором 1200 свойств ( так исторически сложилось ). Использую комплексный компонент bitrix.catalog, который в свою очередь подключает bitrix:catalog.section.
Вот вывод параметров компонента bitrix:catalog.section
Вопросы. Как избавиться от такого и где настроить?
Нашел кусок кода в ядре от куда этот бред формируется.
Есть такой "замечательный" метод modifyDisplayProperties абстрактного класса ElementList( наследник Base). Он вызывается от класса компонента /bitrix/components/bitrix/catalog.section/class.php и далее по цепочке наследования.
Код
protected function processResultData()
{
if ($this->initSectionResult())
{
$this->initSectionProperties();
parent::processResultData(); // переходим по цепочке >>
}
}
#####################################
// >> Оказываемся в Bitrix\Iblock\Component в классе Base
protected function processResultData()
{
$this->iblockProducts = $this->getProductsSeparatedByIblock();
$this->checkIblock();
if ($this->hasErrors())
return;
$this->initCurrencyConvert();
$this->initCatalogInfo();
$this->initPrices();
$this->initUrlTemplates();
$this->initElementList(); // переходим сюда >>>
if (!$this->hasErrors())
{
$this->sortElementList();
$this->makeElementLinks();
$this->prepareData();
$this->filterPureOffers();
$this->makeOutputResult();
}
}
#########################
// >>> Оказываемся в в этом же классе
protected function initElementList()
{
$this->storage['CURRENCY_LIST'] = array();
$this->storage['DEFAULT_MEASURE'] = $this->getDefaultMeasure();
$this->initQueryFields();
foreach ($this->iblockProducts as $iblock => $products)
{
$elementIterator = $this->getElementList($iblock, $products);
$iblockElements = $this->getIblockElements($elementIterator);
if (!empty($iblockElements) && !$this->hasErrors())
{
$this->modifyDisplayProperties($iblock, $iblockElements); // переходим сюда >>>
$this->elements = array_merge($this->elements, array_values($iblockElements));
$this->iblockProducts[$iblock] = array_keys($iblockElements);
}
unset($elementIterator, $iblockElements, $element);
}
}
################################
// >>> Оказываемся в Bitrix\Iblock\Component в классе ElementList modifyDisplayProperties
и видим, что от параметров компонента ничего не зависит
protected function modifyDisplayProperties($iblock, &$iblockElements){
if (!empty($iblockElements))
{
$iblockParams = $this->storage['IBLOCK_PARAMS'][$iblock];
$propertyCodes = $iblockParams['PROPERTY_CODE'];
$productProperties = $iblockParams['CART_PROPERTIES'];
$getPropertyCodes = !empty($propertyCodes);
$getProductProperties = $this->arParams['ADD_PROPERTIES_TO_BASKET'] === 'Y' && !empty($productProperties);
$getIblockProperties = $getPropertyCodes || $getProductProperties;
// вот здесь в любом варианте мы попадаем на выборку
// то есть я не смог с помощью параметров, сделать так, чтобы не попасть на выборку \CIBlockElement::GetPropertyValuesArray
if ($getIblockProperties || ($this->useCatalog && $this->useDiscountCache))
{
$propFilter = array(
'ID' => array_keys($iblockElements),
'IBLOCK_ID' => $iblock
);
// сюда передаются iblockElements - все элементы выборки покой-то фиг и загружаются все свойства.
\CIBlockElement::GetPropertyValuesArray($iblockElements, $iblock, $propFilter);
if ($getPropertyCodes)
Кто-нибудь знает решение? Не очень хочется CatalogSectionComponent выносить в свой неймспейс, там не только его придется править, а это гемор.
Проблема один в один. Каталог из более чем 50 000 позиций товара, пара-тройка тысяч свойств. Если не выгружать свойства, проблем с быстродействием с таким количеством товара не возникает, с выгруженными же свойствами сайт "ложится". Еще одна проблема - заполнение использования свойств по умолчанию (в модуле интеграции в 1С). Заполнение отрабатывает более суток
До 5000 свойств справились другой настройкой сервера и отказом от Битрикс веб окружения - были белые страницы при открытии категорий, тормоза, зависания при редактировании инфоблока. Когда дошли до 8000 свойств - проблемы вернулись и сейчас думаем переходить на модель - одна категория - один инфоблок.
Не поможет. По крайней мере, до тех пор пока Битрикс не исправит ошибку в модуле обмена 1С (при выгрузке определенной категории в отдельный инфоблок выгружаются свойства всех категорий каталога, а не только отмеченные галками и принадлежащие товарам этой категории). Могу подтвердить слова этого человека https://dev.1c-bitrix.ru/support/forum/messages/forum6/topic69934/message457005/#message457005 так как попробовал сам. Плюс далее ждет проблема кастомизации шаблона bitrix:catalog для отображения всех имеющихся инфоблоков категорий.
По предыдущему посту, касаемо выгрузки в несколько инфоблоков, родилась идея: Если сделать несколько настроек обмена с интернет магазином (по числу используемых категорий), то мешанины со свойствами в принципе не должно быть. Путь, предлагаемый к примеру ниже (с одной настройкой) , ущербный: https://1c.1c-bitrix.ru/support/forum/forum26/topic25025/
Воспользовался советом Битрикс - "При создании информационных блоков рекомендуется хранить свойства инфоблока в отдельной таблице, причем все значения свойств одного элемента хранятся в одной строке. Эта технология называется Инфоблоки 2.0 и позволяет существенно ускорить работу системы, а также снять ряд ограничений в предыдущей версии инфоблоков."
При переходе на хранение свойств инфоблока в отдельной таблице, возникли проблемы:
1. Практически все значения свойств пропали 2. Стало не возможно делать импорт через xml - выдается ошибка MySQL Query Error: UPD ATE b_iblock_element_prop_s10 SE T PROPERTY_795 = 'бытовой' WHERE IBLOCK_ELEMENT_ID=1865 [[1054] Unknown column 'PROPERTY_795' in 'field list'] https://www.screencast.com/t/HBeiTgZlC
У меня подобная проблема возникла при попытке хранения свойств в HL-блоках. Сыпаться стал движок Битриха на импорте, копаться даже не стал, пустое. В принципе должно было работать "из коробки", а делать за других их работу, да еще и за свои же деньги, нет никакого желания. Плюс никакой инициативы со стороны тех. поддержки. По факту архитектура Битриха оказалась не готова к масштабированию. Проблема BIG DATA, похоже, неизвестное словосочетание для разработчиков.
Алексей Парников написал: Есть сайт, в котором 1200 свойств ( так исторически сложилось ).
Спасибо вам за информацию, но прошло уже немало времнеи и неужели не появилась какая то новая настройка для bitrix:catalog.section чтобы убрать/укроить данный запрос?