партнер компании 1с-битрикс
сайт фрилансера Сергея Эстрина
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
Универсальная галерея - модуль для битрикс
Это форум по решению для битрикс «Модуль Свойства-таблицы».
Страницы: 1
Ответить
RSS
как можно отсортировать по свойству таблица
 
Добрый день как можно отсортировать по свойству список? то есть колонка цена - и по ней нужно от сортировать элементы

$rsElements = CIBlockElement::GetList(
 Array("PROPERTY_price" => ????????),
 Array(
"IBLOCK_ID"=>3,
"ACTIVE"=>"Y",

 ),
 false,
 false,
 Array("ID","NAME"  ;)  
   );


Столбец не первый в свойсте-таблица price
Даже если первй тож не работает(
Как можно иначе ?
 
Гость, наверно только если вы будете цену из вашего столбца копировать по событиям OnAfterIBlockElementAdd и OnAfterIBlockElementUpdate в отдельное свойство (лучше типа "Число"), и потом сортировать по этому свойству.

А чтобы это свойство не путалось в форме, можете его скрыть сняв в настройках инфоблока галочку "Показывать на странице редактирования элемента":



Цитата
Гость пишет:
Даже если первый тож не работает(
Если вы просто поменяли сортировку у столбца, это сразу не поможет, нужно будет пересохранить все элементы.
 
А можли расписать по какой логиге идет сортивка?
 
Цитата
Гость пишет:
А можно ли расписать по какой логике идет сортировка?
Логика обычная, просто таблица сохраняется в базе в виде сериализованного массива, т.е. каждое значение (а в случае множественной таблицы, значение - это строка таблицы), сохраняется в примерно таком виде:
Код

a:4:{s:4:"col1";s:3:"213";s:4:"col2";s:1:"2";s:4:"col3";a:1:{i:0;s:2:"ru";}s:4:"col4";s:3:"123";}

где col1, col2, ... - это идентификаторы столбцов таблицы.

Получается, что сортировка может быть с очень большими ограничениями - по первому столбцу и значения в нем должны быть одинаковой длинны, иначе будут мешать эти цифры:
Код

s:3:

 
Не совсем понял

Я фильтру элементы ИБ по свойсств таблица поле USLUGA => 39315

Остаются 2 элемента :

1. a:3:{s:6:"USLUGA";s:5:"39315";s:5:"PRICE";s:4:"6600";s:7:"COMMENT";s:0:"";}   =>  сумма строки = 10

2. a:3:{s:6:"USLUGA";s:4:"39315";s:5:"PRICE";s:3:"825";s:7:"COMMENT";s:16:"1 челюсть";}  =>  сумма строки = 22


нужно  отсортировать по поле PRICE (возростание, убывание)

Как работает сортировка она считает сумму строки? или как? тоесть будет ли как то участвовать поле COMMENT сортировке?
 
Цитата
Гость пишет:
Как работает сортировка она считает сумму строки? или как? тоесть будет ли как то участвовать поле COMMENT сортировке?
Нет, она ничего не считает (не совсем понял про какую сумму вы говорите), происходит обычная сортировка посимвольная. И вот это у вас как получилось тоже не понял: s:4:"39315". Там по идее должно быть s:5:"39315", т.к. символов 5. Но тут есть и хорошая новость: сейчас сообразил, что при сортировке по PRICE (если вы сделаете его первым столбцом и пересохраните все элементы) должно быть все ок, т.к. тут вмешивается цифра с длиной строки, т.е. s:3:"825" будет перед s:4:"6600".
 
Не понял на счет символьной сортировка?
смотрите есть:
1. a:3:{s:6:"USLUGA";s:5:"39315";s:5:"PRICE";s:4:"6600";s:7:"COMMENT";s:0:"";}

2. a:3:{s:6:"USLUGA";s:5:"39315";s:5:"PRICE";s:3:"825";s:7:"COMMENT";s:16:"1 челюсть";}

Участвовать будут сиволы:
1. USLUGA393156600
2. USLUGA393158251 челюсть

или символы a:3 s:6 { } и тд - тоже участвуют в сортировки?  
 
точнее
1. USLUGA39315PRICE6600COMMENT
2. USLUGA39315PRICE825COMMENT1 челюсть
 
Цитата
Гость пишет:
или символы a:3 s:6 { } и тд - тоже участвуют в сортировки?
Все символы будут участвовать, просто если они одинаковые, то не будут иметь значения. Т.е. s:4:"6600" будет после s:3:"825" и сортировка должна быть по идее именно по цене.
 
Но меня смущает у вас  вот это: Array("PROPERTY_price" => ????????). У вас символьный код свойства - price? Потому что идентификатор столбца там бесполезно указывать.
 
так и произошло на практике фильтрую USLUGA => 39315

USLUGA = 1 столбец
PRICE  = 2 столбец

соритуруй как обычно по  "PROPERTY_price_tab" => 'asc'
 
то есть получилось)
 
Цитата
Гость пишет:
то есть получилось)
Ну это хорошо, а то я сразу и не понял что у вас получилось :)
 
Возник еще вопрос
не у всех услуг стоит цена
то естьнужно сделать так что где нет цены то всегда выводились внизу списка то есть
То есть по возростанию
1. 25
2. 26
3. 58
4.
5.

То есть по убыванию
1. 58
2. 26
3. 25
4.
5.

http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php
order - порядок сортировки, пишется без пробелов, может принимать значения:
  • asc - по возрастанию;
  • nulls,asc - по возрастанию с пустыми значениями в начале выборки;
  • asc,nulls - по возрастанию с пустыми значениями в конце выборки;
  • desc - по убыванию;
  • nulls,desc - по убыванию с пустыми значениями в начале выборки;
  • desc,nulls - по убыванию с пустыми значениями в конце выборки;
asc,nulls - не помогает(
 
Цитата

asc,nulls - не помогает(
Гость, и не поможет, к сожалению(

Вы можете только двумя запросами сделать - сначала без цены, потом с ценой, например, попробуйте так так:

В первом запросе:
Код

"!PROPERTY_yourproperty" => GPropertyTable::GetColumnFilter("price","")


Во втором запросе:
Код

"PROPERTY_yourproperty" => GPropertyTable::GetColumnFilter("price","")


Подробнее о фильтрации здесь: http://g-rain-design.ru/components/tables/api/#get-column-filter

Правда если у вас постраничная навигация, то это не поможет.

Но вы всегда сможете при помощи событий OnAfterIBlockElementAdd и OnAfterIBlockElementUpdate копировать значение вашей цены в отдельное свойство, предназначенное именно для сортировки (из формы это свойство можно убрать при помощи галочки "Показывать на странице редактирования элемента").
Страницы: 1
Ответить
Читают тему
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить картинки