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

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

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

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

Код
$rsElements = CIBlockElement::GetList(array(), $arFilter, false, false, $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($array, 0, $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($array, 0, $half, true); 
         $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
Ответить
Читают тему (гостей: 1)
Форма ответов
Текст сообщения*
Ничего не найдено
Загрузить файлы
Отправить Отменить
 
Главная   ·   Модули для 1С-Битрикс   ·   Типовые услуги   ·   Форум   ·   Блог   ·   Контакты
Рейтинг@Mail.ru