В result-modifier.php добавил к arResult несколько полей и заполнил их данными, теперь надо, отобразить только те у которых значение одного из полей отвечает условию.
Спасибо
Спасибо
21.06.2011 08:49:08
В result-modifier.php добавил к arResult несколько полей и заполнил их данными, теперь надо, отобразить только те у которых значение одного из полей отвечает условию.
Спасибо |
|
|
|
21.06.2011 13:06:46
Компонент bitrix:catalog.section
В result_modifier.php в $arResult добавил три поля: FOR_F,FOR_U и FOR_V Заполнил их значениями 'N' или 'Y'. Проверил функцией print_r($arResult) - все, что нужно есть (поля заполнены как надо) Задача заключается в том, что бы, в зависимости от значения параметра $_GET['rid'], в $arResult-е оставались(отфильтровывались) только те элементы, у которых значение поле = 'Y' |
|
|
|
21.06.2011 13:25:15
В таком случае Вам необходимо следующее:
1. Описать в .parameters.php шаблона компонента еще один параметр типа строка. 2. При вызове компонента передавать в него (в этот параметр) значение $_GET['rid'] 3. В result_modifier.php на основании этого параметра фильтровать свои элементы.
Не надо сверлить зубы через задний проход дрелью от Сваровски
|
|
|
|
21.06.2011 14:09:11
Я, к сожалению, не могу понять как отфильтровать элементы.
Пожалуйста научите меня. А где об этом можно прочитать по понятнее, я копаюсь в документации разработчика, примеры работают, а сам написать не могу. Еще раз спасибо. |
|
|
|
21.06.2011 14:11:17
Покажите Ваш result_modifier.php
Не надо сверлить зубы через задний проход дрелью от Сваровски
|
|
|
|
21.06.2011 14:39:18
Если можно порекомендуйте более рациональный способ.
<? echo $_GET['rid']; foreach($arResult['ITEMS'] as $k=>$arElement) { $user_id = $arElement['DISPLAY_PROPERTIES']['USER_ID']['DISPLAY_VALUE']; if ($user_id) { $rsUSER = CUser::GetById($user_id); $f=$rsUSER->Fetch(); $arResult['ITEMS'][$k]['DISPLAY_PROPERTIES']['USER_ID']['DISPLAY_VALUE'] = $f['NAME'].' '.$f['LAST_NAME']; } // дальше мои добавления if (is_object($this)) { // добавим в arResult компонента три поля - FOR_F, FOR_U и FOR_V $this->arResult['ITEMS'][$k]['FOR_F'] = 'N'; $this->arResult['ITEMS'][$k]['FOR_U'] = 'N'; $this->arResult['ITEMS'][$k]['FOR_V'] = 'N'; //?? если комментарий убрать - ошибка $this->SetResultCacheKeys(array('FOR_F','FOR_U','FOR_V')); // сохраним их в копии arResult, с которой работает шаблон (с учетом версии main 10.0 и выше) if (!isset($arResult['ITEMS'][$k]['FOR_U'])) { $arResult['ITEMS'][$k]['FOR_F'] = $this->arResult['ITEMS'][$k]['FOR_F']; $arResult['ITEMS'][$k]['FOR_U'] = $this->arResult['ITEMS'][$k]['FOR_U']; $arResult['ITEMS'][$k]['FOR_V'] = $this->arResult['ITEMS'][$k]['FOR_V']; } } CModule::IncludeModule('iblock'); // выборка элементов из информационного блока с ID=9 // у которых свойства с мнемоническим кодом CATEGORY1 равно $arResult['ITEMS'][$k]['ID'] $arFilter = Array("IBLOCK_ID"=>9, "PROPERTY_CATEGORY1"=>$arResult['ITEMS'][$k]['ID']); $res = CIBlockElement::GetList(Array("ID"=>"ASC"), $arFilter); // echo "<pre>"; // echo $arResult['ITEMS'][$k]['ID'].": ".$arResult['ITEMS'][$k]['NAME']."<br>"; while($ar_fields = $res->GetNext()) { // echo $ar_fields["ID"].": ".$ar_fields["NAME"]."<br>"; // выбрали свойства с мнемоническим кодом FOR элемента с ID= $ar_fields["ID"] из инфоблока с ID=9 $db_props = CIBlockElement::GetProperty(9, $ar_fields["ID"], Array("ID"=>"asc"),Array("CODE"=>"FOR")); // список маленький while не сильно затормозит формирование страницы while ($ob = $db_props->GetNext()) { // echo $ob["ID"].": ".$ob["NAME"].": ".$ob["VALUE"].": ".$ob["CODE"]."<br>"; //если $ob["VALUE"] = 9 заполняем поле $this->arResult['ITEMS'][$k]['FOR_F'] значением 'Y' if ($ob["VALUE"] == 9) { $this->arResult['ITEMS'][$k]['FOR_F']='Y'; $arResult['ITEMS'][$k]['FOR_F'] = $this->arResult['ITEMS'][$k]['FOR_F']; } //если $ob["VALUE"] = 10 заполняем поле $this->arResult['ITEMS'][$k]['FOR_U'] значением 'Y' if ($ob["VALUE"] == 10) { $this->arResult['ITEMS'][$k]['FOR_U']='Y'; $arResult['ITEMS'][$k]['FOR_U'] = $this->arResult['ITEMS'][$k]['FOR_U']; } //если $ob["VALUE"] = 11 заполняем поле $this->arResult['ITEMS'][$k]['FOR_V'] значением 'Y' if ($ob["VALUE"] == 11) { $this->arResult['ITEMS'][$k]['FOR_V']='Y'; $arResult['ITEMS'][$k]['FOR_V'] = $this->arResult['ITEMS'][$k]['FOR_V']; } } //echo "<br>"; } echo "</pre>"; ///////////////////////////////////////////// } //echo "<pre>"; //print_r($arResult); //echo "</pre>"; ?> |
|
|
|
21.06.2011 17:34:34
Неужели всё так плохо, что и отвечать не хочется?
|
|
|
|
22.06.2011 14:19:47
Все получилось-работает, но $arResult не фильтруется, а перестраивается полностью.
Прошу специалистов - укажите на ошибки. result-modifier.php: <? foreach($arResult['ITEMS'] as $k=>$arElement) { $user_id = $arElement['DISPLAY_PROPERTIES']['USER_ID']['DISPLAY_VALUE']; if ($user_id) { $rsUSER = CUser::GetById($user_id); $f=$rsUSER->Fetch(); $arResult['ITEMS'][$k]['DISPLAY_PROPERTIES']['USER_ID']['DISPLAY_VALUE'] = $f['NAME'].' '.$f['LAST_NAME']; } if (is_object($this)) { $this->arResult['ITEMS'][$k]['FOR_F'] = 'N'; $this->arResult['ITEMS'][$k]['FOR_U'] = 'N'; $this->arResult['ITEMS'][$k]['FOR_V'] = 'N'; if (!isset($arResult['ITEMS'][$k]['FOR_U'])) { $arResult['ITEMS'][$k]['FOR_F'] = $this->arResult['ITEMS'][$k]['FOR_F']; $arResult['ITEMS'][$k]['FOR_U'] = $this->arResult['ITEMS'][$k]['FOR_U']; $arResult['ITEMS'][$k]['FOR_V'] = $this->arResult['ITEMS'][$k]['FOR_V']; } } CModule::IncludeModule('iblock'); $arFilter = Array("IBLOCK_ID"=>9, "PROPERTY_CATEGORY1"=>$arResult['ITEMS'][$k]['ID']); $res = CIBlockElement::GetList(Array("ID"=>"ASC"), $arFilter); while($ar_fields = $res->GetNext()) { $db_props = CIBlockElement::GetProperty(9, $ar_fields["ID"], Array("ID"=>"asc"),Array("CODE"=>"FOR")); while ($ob = $db_props->GetNext()) { if ($ob["VALUE"] == 9) { $this->arResult['ITEMS'][$k]['FOR_F']='Y'; $arResult['ITEMS'][$k]['FOR_F'] = $this->arResult['ITEMS'][$k]['FOR_F']; } if ($ob["VALUE"] == 10) { $this->arResult['ITEMS'][$k]['FOR_U']='Y'; $arResult['ITEMS'][$k]['FOR_U'] = $this->arResult['ITEMS'][$k]['FOR_U']; } if ($ob["VALUE"] == 11) { $this->arResult['ITEMS'][$k]['FOR_V']='Y'; $arResult['ITEMS'][$k]['FOR_V'] = $this->arResult['ITEMS'][$k]['FOR_V']; } } } } $res_tmp=array(); foreach($arResult['ITEMS'] as $k=>$arElement) { if($_GET['rid']=='fiz') { if ($arResult['ITEMS'][$k]['FOR_F']=='N') { unset($arResult['ITEMS'][$k]); }; }; if($_GET['rid']=='ur') { if ($arResult['ITEMS'][$k]['FOR_U']=='N') { unset($arResult['ITEMS'][$k]); }; }; if($_GET['rid']=='vlast') { if ($arResult['ITEMS'][$k]['FOR_V']=='N') { unset($arResult['ITEMS'][$k]); }; }; } foreach($arResult['ITEMS'] as $k=>$arElement) { array_push($res_tmp,$arResult['ITEMS'][$k]); } $arResult['ITEMS']=$res_tmp; ?> |
||||
|
|
|||