партнер компании 1с-битрикс
сайт фрилансера Сергея Эстрина
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
Универсальная галерея - модуль для битрикс
Страницы: 1
Ответить
RSS
Как в модуле menu.sectionswithelements поменять порядок выдачи элементов
 
Какой порядок выдачи элементов в разделах инфоблока? Как его изменить?

Пытался изменить сортировку элементов - не помогает
Пытался изменить дату элементов - не помогает

Прямых настроек по сортировке в модуле не нашел.
 
Что касается элементов, в компоненте только один вызов CIBlockElement::GetList. Там можно установить сортировку.
 
Хороший ответ  8)
А можно более подробно?
 
Хорошо  :)

В файле component.php есть строка:

Код

$rsElements CIBlockElement::GetList(array(), $arFilterfalsefalse$arSelect);


Первый параметр у функции отвечает за сортировку. Вы можете поставить, например, Array("sort"=>"asc") или Array("name"=>"asc", "sort"=>"asc").

Полный перечень возможных сортировок есть здесь: CIBlockElement::GetLIst.
 
Сортировка заработала! Спасибо!
 
Скажите, а разделы и инфоблоки в данном компоненте сортируются вместе? То есть возможно отсортировать пункты меню вне зависимости от вложенности вот так:
- секция
- секция
- элемент
- секция
....
 
Цитата
Гость пишет:
Скажите, а разделы и инфоблоки в данном компоненте сортируются вместе? То есть возможно отсортировать пункты меню вне зависимости от вложенности вот так:
- секция
- секция
- элемент
- секция
В этом компоненте такой функционал не заложен, но можете доработать, использовав, например, функцию сортировки массивов по ключу:

Код

class CGrain_ArrayTools {


   function 
SortArrayByKey($array,$key,$order,$maintain_index=true,$method="FLOAT") {

      
// array stable-sort function

      
if (!is_array($array) || (is_array($array) && count($array)<2)) return $array;
   
      switch(
$method) {
         case 
"STRING":
            
$cmpf create_function(
               
'$a,$b',
               
'if($a["'.$key.'"]==$b["'.$key.'"]) return 0; return '.(strtolower($order)=="desc"?"!":"").'strcasecmp($a["'.$key.'"],$b["'.$key.'"]);' // strcasecmp utf incorrect!
            
);
         break;
         case 
"INT":
            
$cmpf create_function(
               
'$a,$b',
               
'if(intval($a["'.$key.'"])==intval($b["'.$key.'"])) return 0; else return intval($a["'.$key.'"])'.(strtolower($order)=="desc"?"<":">").'intval($b["'.$key.'"])?1:-1;'
            
);
         break;
         default: 
// default is FLOAT
            
$cmpf create_function(
               
'$a,$b',
               
'if(floatval($a["'.$key.'"])==floatval($b["'.$key.'"])) return 0; else return floatval($a["'.$key.'"])'.(strtolower($order)=="desc"?"<":">").'floatval($b["'.$key.'"])?1:-1;'
            
);
         break;
      }
   
      if(!
$maintain_index) {

         
$half floor(count($array)/2); 
         
$array1 array_slice($array0$half); 
         
$array2 array_slice($array$half); 
         
$array1 self::SortArrayByKey($array1,$key,$order,$maintain_index,$method); 
         
$array2 self::SortArrayByKey($array2,$key,$order,$maintain_index,$method); 
         if (
$cmpf($array1[count($array1)-1], $array2[0]) < 1) { 
             
$array array_merge($array1$array2); 
             return 
$array
         } 
         
$array=array(); $i1=0$i2=0
         while (
$i1 count($array1) && $i2 count($array2)) { 
             if (
$cmpf($array1[$i1], $array2[$i2]) < 1$array[] = $array1[$i1++]; 
             else 
$array[] = $array2[$i2++]; 
         } 
         while (
$i1 count($array1)) $array[] = $array1[$i1++]; 
         while (
$i2 count($array2)) $array[] = $array2[$i2++]; 
         return 
$array;

      } else {
      
         
$half floor(count($array)/2); 
         
$array1 array_slice($array0$halftrue); 
         
$array2 array_slice($array$half, (count($array)-$half), true); 
         
$array1 self::SortArrayByKey($array1,$key,$order,$maintain_index,$method); 
         
$array2 self::SortArrayByKey($array2,$key,$order,$maintain_index,$method);
         
$keys1 array_keys($array1);
         
$keys2 array_keys($array2);
         if (
$cmpf($array1[$keys1[count($keys1)-1]], $array2[$keys2[0]]) < 1) { 
             
$array array_merge($array1$array2); 
             return 
$array
         } 
         
$array=array(); $i1=0$i2=0
         while (
$i1 count($keys1) && $i2 count($keys2)) { 
             if (
$cmpf($array1[$keys1[$i1]], $array2[$keys2[$i2]]) < 1) { 
                 
$array[$keys1[$i1]] = $array1[$keys1[$i1]]; $i1++;
             } else { 
                 
$array[$keys2[$i2]] = $array2[$keys2[$i2]]; $i2++;
             } 
         } 
         while (
$i1 count($keys1)) {
            
$array[$keys1[$i1]] = $array1[$keys1[$i1]]; $i1++;
         }
         while (
$i2 count($keys2)) {
            
$array[$keys2[$i2]] = $array2[$keys2[$i2]]; $i2++;
         }
         return 
$array;
      
      }
      
   } 

}
Страницы: 1
Ответить
Читают тему
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы