UMIhelp

Разработка сайта на UMI.CMS => Макросы UMI.CMS => Тема начата: cybermax от 15 Апреля 2012, 16:15:57

Название: Двойная сортировка
Отправлено: cybermax от 15 Апреля 2012, 16:15:57
Здравствуйте подскажите пожалуйста как в юми сделать двойную сортировку, например, мне нужно отсортировать товары в разделе каталога по цене и по наличию?
В getobjectList можно задать только один параметр сортировки
Название: Re:Двойная сортировка
Отправлено: admin от 18 Апреля 2012, 10:27:57
- написать кастом на основе макроса %catalog getObjectsList()%
- сделать вывод с помощью usel и там указать двойную сортировку

первый, самый простой и "чистый" вариант
Название: Re:Двойная сортировка
Отправлено: KTI от 19 Апреля 2012, 16:19:00
как в usel сделать, чтобы не попадал определенный товар?
я предполагаю что надо использовать атрибут mode="not", но по какому property его отфильтровать.
Казалось-бы:
<property name="name" value="{my_name}" mode="not"/>
но млин не работает?! почему?
Все равно этот товар попадает в выборку. admin мож Вы поможете, в чем может быть трабл
PS хотя без атрибута NOT все работает, т.е. попадает только этот товар
может этот NOT не корректно работает
Название: Re:Двойная сортировка
Отправлено: admin от 20 Апреля 2012, 17:54:07
то есть с
<property name="name" value="stranica1" />
выводиться страница с именем stranica1, а при
<property name="name" value="{my_name}" mode="not"/>

не выводиться ничего?
Название: Re:Двойная сортировка
Отправлено: KTI от 23 Апреля 2012, 15:20:00
да! именно так
попробуйте у себя
видимо not с именами не умеет работать
(я еще отдельную ветку завел по этому вопросу)
Название: Re:Двойная сортировка
Отправлено: admin от 26 Апреля 2012, 01:31:22
ты прав, в коде ясно видно что фильтрация по name="name" и mode проигнорируется
if($fieldName != "name") {
if($mode) {
$selectionObj->where($fieldName)->notequals($value);
return true;
} else {
if($like) {
$selectionObj->where($fieldName)->like('%' . $value . '%');
} else {
$selectionObj->where($fieldName)->equals($value);
}
return true;
}
} else {
if(!$mode) {
if($like) {
$selectionObj->where('name')->like('%' . $value . '%');
} else {
$selectionObj->where('name')->equals($value);
}
return true;
} else {
return false;
}
}

так что, надо писать кастом
Название: Re:Двойная сортировка
Отправлено: KTI от 27 Апреля 2012, 09:42:41
что им помешало добавить одну строчку

$selectionObj->where('name')->notequals($value);
хотя, судя по коду, вероятно именно по этому name выделили отдельно
так-бы он не отличался от остальных, и код был-бы без
if($fieldName != "name") {}