Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Перечисление свойств инфоблока в PHP-скрипте товарного каталога

00 голосов
2
Имеется php-скрипт, отвечающий за отображение элементов торгового каталога, фрагмент которого представлен ниже. Разработчик включил в него список свойств инфоблока (очень длинный) в части разделов:

"COMPARE_PROPERTY_CODE" => array( ),
"LIST_PROPERTY_CODE" => array( ),
"DETAIL_PROPERTY_CODE" => array( ),

Соответственно, при изменении (мало-ли что !) набора свойств в самом описании инфоблока приходится вносить изменения и сюда. Вопрос: есть ли способ позволяющий уйти от такого перечисления свойств в скрипте, ну скажем в каком-то отдельном описании, которое м.б. поставлено здесь в виде переменной или как-нибудь еще ? Или допустим, по "умолчальному" флагу отображаются все свойства, а если нет - тогда идет перечисление... Спасибо.

<?
$cat = "yes";
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Каталог");
?><?$APPLICATION->IncludeComponent("bitrix:catalog", ".default", array(
"IBLOCK_TYPE" => "Catalog",
"IBLOCK_ID" => "4",
"BASKET_URL" => "/Personals/Order_Basket",
"ACTION_VARIABLE" => "action",
"PRODUCT_ID_VARIABLE" => "id",
"SECTION_ID_VARIABLE" => "SECTION_ID",
"SEF_MODE" => "Y",
"SEF_FOLDER" => "/Assortiment/Products/",
"AJAX_MODE" => "Y",
"AJAX_OPTION_SHADOW" => "Y",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "Y",
"AJAX_OPTION_HISTORY" => "N",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "3600",
"CACHE_FILTER" => "N",
"DISPLAY_PANEL" => "N",
"SET_TITLE" => "Y",
"USE_FILTER" => "N",
"USE_REVIEW" => "N",
"USE_COMPARE" => "Y",
"COMPARE_NAME" => "CATALOG_COMPARE_LIST",
"COMPARE_FIELD_CODE" => array(
0 => "ID",
1 => "CODE",
2 => "XML_ID",
3 => "",
),

; 1-ый список перечисления свойств инфоблока

"COMPARE_PROPERTY_CODE" => array(
0 => "Vendor",
1 => "Model",
2 => "ParNumber",
3 => "Case",
4 => "FormFactor",
5 => "MotherBoard",
6 => "CPU",
7 => "CPU_Cache_L2",
8 => "CPU_Cache_L3",
9 => "RAM_Base",
10 => "RAM_Max",
11 => "Power_Supply_Base",
12 => "Power_Supply_Base",
13 => "Interfaces",
14 => "Slots",
15 => "Bays",
16 => "Connections",
....
36 => " "

; 2-ый cписок перечисления свойств инфоблока

"LIST_PROPERTY_CODE" => array(
0 => "Vendor",
1 => "Model",
2 => "ParNumber",
3 => "Case",
4 => "FormFactor",
5 => "MotherBoard",
6 => "CPU",
7 => "CPU_Cache_L2",
8 => "CPU_Cache_L3",
9 => "RAM_Base",
10 => "RAM_Max",
11 => "Power_Supply_Base",
12 => "Power_Supply_Base",
13 => "Interfaces",
14 => "Slots",
15 => "Bays",
16 => "Connections",
....
36 => " "

; 3-ий список перечисления свойств инфоблока

"DETAIL_PROPERTY_CODE" => array(

0 => "Vendor",
1 => "Model",
2 => "ParNumber",
3 => "Case",
4 => "FormFactor",
5 => "MotherBoard",
6 => "CPU",
7 => "CPU_Cache_L2",
8 => "CPU_Cache_L3",
9 => "RAM_Base",
10 => "RAM_Max",
11 => "Power_Supply_Base",
12 => "Power_Supply_Base",
13 => "Interfaces",
14 => "Slots",
15 => "Bays",
16 => "Connections",
....
36 => " "
спросил 17 Апр, 14 от Gaga (100 баллов)

2 Ответы

00 голосов
Такой способ подойдет?:
Код
<?
...
кусок кода определяющий состав некоего массива $arCompareFieldsCode
в соответствии с пожеланиями заказчика
...

$APPLICATION->IncludeComponent("bitrix:catalog", ".default", array( 
"IBLOCK_TYPE" => "Catalog", 
"IBLOCK_ID" => "4", 
"BASKET_URL" => "/Personals/Order_Basket", 
"ACTION_VARIABLE" => "action", 
"PRODUCT_ID_VARIABLE" => "id", 
"SECTION_ID_VARIABLE" => "SECTION_ID", 
"SEF_MODE" => "Y", 
"SEF_FOLDER" => "/Assortiment/Products/", 
"AJAX_MODE" => "Y", 
"AJAX_OPTION_SHADOW" => "Y", 
"AJAX_OPTION_JUMP" => "N", 
"AJAX_OPTION_STYLE" => "Y", 
"AJAX_OPTION_HISTORY" => "N", 
"CACHE_TYPE" => "A", 
"CACHE_TIME" => "3600", 
"CACHE_FILTER" => "N", 
"DISPLAY_PANEL" => "N", 
"SET_TITLE" => "Y", 
"USE_FILTER" => "N", 
"USE_REVIEW" => "N", 
"USE_COMPARE" => "Y", 
"COMPARE_NAME" => "CATALOG_COMPARE_LIST", 
"COMPARE_FIELD_CODE" => $arCompareFieldsCode,
....
далее обрезаю :) 



Есть еще вариант:
Посмотрите как реализована работа с фильтром в стандартных компонентах (там как раз компонент получает на входе массив, который уже чем то был обработан)
Правда при этом варианте потребуется кастомизация компонента.
При первом варианте ничего особого не требуется
ответил 25 Ноя, 14 от jenia (1,500 баллов)
00 голосов
Большое Спасибо ! А $arCompareFieldsCode - это штатная переменная, описывающая список свойств инфоблока, верно ? Или она определяется самим разработчиком ?
ответил 20 Март, 15 от Gaga (100 баллов)

Похожие вопросы

0 голосов
3 ответов
спросил 15 Март, 13 от NextGen (620 баллов)
0 голосов
2 ответов
0 голосов
5 ответов
0 голосов
1 ответ
спросил 26 Авг, 13 от Sumire (120 баллов)