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

Как отсортировать по определённым значениям?

00 голосов
6
Я пытался так :
Код
$ar = Array(1,12,4,7,5,55,67,8,39);
       $arFilter = Array('IBLOCK_ID'=>1);
$db_list = CIBlockSection::GetList(Array("id"=>$ar), $arFilter, true);
 
спросил 20 Окт, 13 от Jugoar (480 баллов)

6 Ответы

00 голосов
Такой способ работать не будет.
ответил 14 Ноя, 13 от Pomnep (13,960 баллов)
00 голосов
Цитата
Евгений Жуков пишет:
Такой способ работать не будет.
А какой будет? Написал пример прост чтоб было понятно, хоть и не правильный.
ответил 22 Фев, 14 от Jugoar (480 баллов)
00 голосов
Я бы мог привести пример работающей фильтрации, если бы по вашему примеру понял, что вам нужно smile:) но мне, ксожалению, непонятно его (вашего примера) содержание.
Читай меня, читай меня полностью
ответил 13 Июнь, 14 от LEDOKOL (740 баллов)
00 голосов
Цитата
MyIE пишет:
Я бы мог привести пример работающей фильтрации, если бы по вашему примеру понял, что вам нужно smile:) но мне, ксожалению, непонятно его (вашего примера) содержание.
Читай меня, читай меня полностью
Есть набор элементов, нужно отфильтровать их по id, в таком порядке в которым захочет программист.
 К примеру - есть элементы с id (1,2,4,5,6,7,8,9,13,15 и тп), по возрастанию они сортируются по порядку вот так, а мне нужен к примеру вот такой порядок их расположения (8,13,1,4,5,15,7 и тп), а  по возрастанию или по убыванию их не будет смысла формировать, если бы можно было расположить их куда нужно вручную.
ответил 12 Окт, 14 от Jugoar (480 баллов)
00 голосов
1) Нормальный варинат: Используйте стандартное поле битрикса для сортировки, предварительно выставив необходимые значения.2) Странный вариант: вместо шикла фореача (в шаблоне компонента) задайте свой цикл с прохождением по массиву вида:
Код
$myIndexes = array( "8", "13", "1", "4", "5", "15", "7" и тп)

И выбирайте из $arResult жестко по ID элемента.
Код
<?foreach($myIndexes as $mId):?>
<?=$arResult["ITEMS"]["$mId"]["ID"]?>
<?endif;?>

Так же потребуется кастомизация компонента.
Там где-то есть строки заполнения массива $arResult
Вот, где написано $arResult[] = $arElement;
Нужно будет делать несколько иначе: $arResult[$arElement["ID"]] = $arElement;
Как-то так, т.е. чтобы айДишники элементов результирующего массива были одинаковы с айДишниками элементов.
ответил 12 Фев, 15 от LEDOKOL (740 баллов)
00 голосов
Загвоздка у меня такого вида, суть решения проблемы понял только почему то не хочет выводить ничего из массива $ar_result.

Массив:

Код
Array
(
    [ID] => 16
    [~ID] => 16
    [TIMESTAMP_X] => 07.11.2011 12:06:08
    [~TIMESTAMP_X] => 07.11.2011 12:06:08
    [MODIFIED_BY] => 1  
... 
Моя проблема:
Код
                
<?
if(!CModule::IncludeModule("iblock")) return;


$myIndexes = array( "8", "13", "1", "4", "5", "15", "7");
$db_list = CIBlockSection::GetList(Array("id"=>""), $arFilter, true);
                      $db_list->NavStart(20);
                         echo $db_list->NavPrint($arIBTYPE["SECTION_NAME"]);
                         while($ar_result = $db_list->GetNext())
                         {
     

?>

       <? foreach($myIndexes as $mId):
      
echo $ar_result[$mId];  // Как не пытался хоть так $ar_result["ITEMS"]["$mId"]["ID"];, хоть так $ar_result[$mId]["CODE"]; не выводит и всё(((.  
Массив $mId выводится нормально.  
 
//$_REQUEST["SECTION_CODE"] = $ar_result["CODE"]; обязательно нужно присвоить код в Request
 
  $ar_result = $db_list->GetNext();

       ?>

               
<? $APPLICATION->IncludeComponent("bitrix:catalog.section", "os_sect", array(
   "IBLOCK_TYPE" => "catalog",
   "IBLOCK_ID" => "1",
   "SECTION_ID" => "",
   "SECTION_CODE" => $_REQUEST["SECTION_CODE"],
   "SECTION_USER_FIELDS" => array(
      0 => "",
      1 => "",
   ),   

...  
 
<?endforeach; break;}?>   
ответил 24 Май, 15 от Jugoar (480 баллов)

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

0 голосов
4 ответов
0 голосов
2 ответов
спросил 29 Ноя, 13 от WelMax (430 баллов)
0 голосов
2 ответов
0 голосов
2 ответов
спросил 04 Дек, 13 от Amentet (2,080 баллов)