UMIhelp
Разработка сайта на UMI.CMS => Макросы UMI.CMS => Тема начата: niakriss от 03 Октября 2013, 13:20:44
-
Здравствуйте, натолкните пожалуйста на мысль. А то вообще никаких идей((
Необходимо отсортировать вывод объектов каталога по определенному полю. При том что объекты с разными типами данных. И в каждом типе данных свое поле по которому их надо сортировать в каталоге. В каком классе хотябы эта сортировка идет?
Заранее благодарна.
-
если интересует механизм сортировки, то его код в файле /classes/system/utils/pagenum/pagenum.php (функция generateOrderBy) вызывается из файл /classes/modules/system.php в функции order_by.
если интересно как сделать разные сортировки, то тут важно понимать как она в umi работает.
при выводе товаров система пытается подхватит параметры из адресной строки вида order_filter[имя_поля]=направление_сортировки.
Поэтому ваша задача делиться на 2 части, передать в адресную строку соответствующий параметр и начиться выводить соответствующую ссылку (или форму) которая передастся в адресную строку параметр сортировки не поломав уже имеющиеся там параметры (фильтры и другие сортировки).
В umi, макросе system order_by(), проблема с тем, что система сама определяет доминирующий тип данных и если вы на странице корневого каталога (который содержит разделы с товарами разных типов) попытаетесь вывести сортировки полей из разных типов товаров, то какие-то не сработают, так как при выводе сортировки система определяет есть ли такое поле в доминирующем типе данных.
Мне обычно хватает модифицированного umi решения, которое я дописывал под свои нужды и которое выложено в статье Создание двухсторонней сортировки order_by для xslt шаблонов (http://umihelp.ru/articles/custom_order_by-for_xslt/)
-
Это наверное чуть не то... но посмотрю generateOrderBy.. возможно что-то возьму для себя...
мне нужно в самой админке чтобы объекты сортировались по нужным полям.
-
Вот еще вопрос возник... можно ли как то объеденить выборки?
-
если мы говорим про админку, то тогда вопрос у вас свой модуль или вы хотите сделать сортировку в уже существующем в umi модуле, например в каталоге?
P.S. Если можно опишите развернуто что именно вам требуется сделать, чтобы было проще понимать какая у вас ситуация
-
да.. я хочу в уже существующем модуле сделать сортировку...
Есть модуль каталог. В нем созданы 3 каталога. в каждом каталоге свои типы объектов каталогов.
в первом каталоге - объекты первого типа. Сортируются по полю Дата регистарции.
во втором каталоге - объекты второго типа. Сортируются по полю Дата принятия.
в третьем каталоге - объекты третьего типа. Их вообще можно не сортировать.
И в каждом этом типе свои поля. Т.е. у второго типа нет поля Дата регистрации. У него вместо него дата принятия. А в третьем вообще таких полей нет.
-
посмотрите в firebug при раскрытии разделов, там будет видно что подразделы раскрываются ajax запросом, который умеет принимать кучу параметров, в том числе и сортировки.
Вопрос как этот запрос редактировать, пока не ясен.
Js переписывать не очень хочется она перезатрется при обновлении.
Можно подумать в сторону кастомизации данного модуля, добавив него доп. вкладок. Каждая вкладка будет для своего раздела и там на уровне php при формировании xml для данной вкладки можно поменять сортировку. Правда и тут, скорее всего, не обойтись без редактирования системных файлов модуля.
Можно подумать о написании своего модуля, но уж сильно много действий для вывода сортировки.
-
оказалось все как-то просто)))
написала функцияю:
static function dateRegistration(selector $sel) {
$sel->types('object-type')->id(137);
$sel->types('object-type')->id(138);
$sel->order('data_registracii')->desc();
}
и вставила ее выполняться в public function tree():
после применения фильтров к выборке
self::dateRegistration($sel);
-
Системные файлы правили? Не боитесь что перезатрутся ваши труды при очередном обновлении системы?
-
не.. я в custom_adm прописала...