Поиск v1.10.5 -next

#1 11 декабря 2014 в 12:28
antondmsamarin закрыл тему а я тут "допосмотрел": кажется что было бы логичным в компоненте сортировку по дате несколько изменить:
1. в model.php строку 46:
  1. $this->order_by_date = cmsCore::inRequest('order_by_date') ? cmsCore::request('order_by_date', 'int', 0) : 1;
изменить на:
  1. $this->order_by_date = cmsCore::inRequest('order_by_date') ? cmsCore::request('order_by_date', 'int', 1) : 0;
2. в frontend.php условие:
  1. if($model->order_by_date){
  2. $inDB->orderBy('pubdate', 'DESC');
  3. } else {
  4. $inDB->orderBy('id', 'ASC');
  5. }
изменить на:
  1. if($model->order_by_date){
  2. $inDB->orderBy('pubdate', 'DESC');
  3. } else {
  4. $inDB->orderBy('pubdate', 'ASC');
  5. }
3. ну и текст:
  1. $_LANG['SORT_BY_PUBDATE'] ='сортировать по дате публикации';
изменить на
  1. $_LANG['SORT_BY_PUBDATE'] ='показать сначала новые';
Мне кажется, что так логичнее быдет выглядеть.
Что думаете?
#2 11 декабря 2014 в 12:50
Если так поменять frontend.php, то поиск не ранжирует по полю price

У меня ещё раньше было изменение, чтобы ранжировать по полю price. Эти изменения были сделаны в предыдущей версии v1.10.4 и до обновления до v1.10.5 они работали как надо.

В файле /components/shop/psearch.php блок

  1. $sql = "SELECT DISTINCT con.*,
  2. cat.title cat_title,
  3. cat.seolink as cat_seolink
  4. FROM cms_shop_items con, cms_shop_cats cat
  5. WHERE MATCH(con.title, con.shortdesc, con.description) AGAINST ('$query' IN BOOLEAN MODE) AND con.category_id = cat.id AND con.published=1";

заменено на

  1. $sql = "SELECT DISTINCT con.*,
  2. cat.title cat_title,
  3. cat.seolink as cat_seolink
  4. FROM cms_shop_items con, cms_shop_cats cat
  5. WHERE MATCH(con.title, con.shortdesc, con.description) AGAINST ('$query' IN BOOLEAN MODE) AND con.category_id = cat.id AND con.published=1
  6. ORDER BY con.price ASC";
может изменения frontend.php конфликтуют с этим?
#3 11 декабря 2014 в 21:47
Я всё же не о частном случае, а о дефолтом функционале.
Ещё до 1.10.5 предлагалось сортировать или по дате (по убыванию), если отмечен чекбокс или по id (по возрастанию), если не отмечен. Какую информативность несёт сортировка по id, если применён поиск по разным компонентам? Путаница одна!
В 1.10.5 и того лучше — с багом: сортировка по дате независимо от того отмечен пользователем чекбокс или не отмечен.
Вот я и предлагаю устранить баг и изменить возможность сортировки по дате: от последней или от первой
#4 11 декабря 2014 в 22:06

Вот я и предлагаю устранить баг и изменить возможность сортировки по дате: от последней или от первой или в обратном порядке

Олег Васильевич я
Это да, может быть это и правильно. Просто в моем частном случае ранжирование по дате добавления товара для меня лишний и ненужный функционал.
#5 13 декабря 2014 в 12:18

Что думаете?

Олег Васильевич я
Никто ничего не думает? cry
#6 13 декабря 2014 в 13:18

Что думаете?

Олег Васильевич я
Согласен, так было бы логичнее. +
#7 13 декабря 2014 в 14:48
  1. $inDB->orderBy('id', 'ASC');
Это и есть:
  1. $inDB->orderBy('pubdate', 'ASC');
Только по id работает быстрее.
#8 13 декабря 2014 в 15:40

Это и есть:

lokanaft
Если выбран поиск по одному компонету, то — да, а если из всех, то сортровка по id превращается в "куча мала". Или не понимаю чего-то?
#9 13 декабря 2014 в 16:12


… изменить на:… cmsCore::request('order_by_date', 'int', 1) ....

Если чекбокс не отмечен, то в POST ничего не передается, следовательно изменив на приеме 0 на 1 вы всегда и при любых условиях получаете на выходе 1. В данном случае (код первого сообщения) это роли не играет, но лучше бы к плохому не привыкать, грабли те еще могут возникнуть.
#10 13 декабря 2014 в 17:13
Pasha, спасибо за урок!
Проблема в том, что если оставить как строку в моделе без изменений, атрибут checked становится = checked всегда после нажатия "найти" (даже с предварительно снятой отметкой с флажка)
#11 13 декабря 2014 в 17:36
Ну это просто техническая опечатка. Откройте модель и строку
  1. $this->order_by_date = cmsCore::inRequest('order_by_date') ? cmsCore::request('order_by_date', 'int', 0) : 1;
Измените на
  1. $this->order_by_date = cmsCore::request('order_by_date', 'int', 0);
#12 13 декабря 2014 в 17:43

Измените на stuk

Pasha
Другое дело! Спасибо!
#13 13 декабря 2014 в 17:48
Да не за что. В багтрекере зафиксируй, а то так и останется.
#14 13 декабря 2014 в 19:16

В багтрекере зафиксируй

Pasha
написал
#15 13 декабря 2014 в 22:54

написал

Олег Васильевич я

сортировать по дате бубликации

facepalm
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.