Перейти к содержимому


Сортировка товара в клиентской части


  • Вы не можете ответить в тему
Сообщений в теме: 36

#1 vsupport

    Продвинутый пользователь

  • Администраторы
  • 758 сообщений
Репутация: 31
Ассистент

Отправлено 21 June 2011 - 10:47 AM

1. Открыть файл core/languages/russian.php , строки 722-723 заменяем на:
define('STRING_PRODUCT_SORT', 'Сортировать по: наименованию ({ASC_NAME}/{DESC_NAME}), цене ({ASC_PRICE}/{DESC_PRICE}), дате поступления ({ASC_DATE}/{DESC_DATE})'); 
define('STRING_PRODUCT_SORTN', 'Сортировать по: наименованию ({ASC_NAME}/{DESC_NAME}), цене ({ASC_PRICE}/{DESC_PRICE}), рейтингу ({ASC_RATING}/{DESC_RATING}), дате поступления ({ASC_DATE}/{DESC_DATE})');

строка 776
define('STRING_PRICELIST_ITEM_SORT', 'Сортировать по: наименованию ({ASC_NAME}/{DESC_NAME}), цене ({ASC_PRICE}/{DESC_PRICE}), дате поступления ({ASC_DATE}/{DESC_DATE})');  

В файл core/includes/category.php , после 96 строки
В файл core/includes/category_search_result.php после 87 строки
В файл core/includes/search_simple.php после 49 строки
В файл core/includes/pricelist.php после 123 строки
добавляете:
$sort_string = str_replace( "{ASC_DATE}", "".STRING_ASC."", $sort_string ); 
$sort_string = str_replace( "{DESC_DATE}", "".STRING_DESC."", $sort_string );

2. Открываем файл core/functions/product_functions.php , находим строку 1301 и после нее добавляем новую строчку с содержанием:
$callBackParam["sort"] == "date_added" ||  

После проделанного советую добавить индекс на поле [prefix]_products.date_added в БД

источник


  • 1

#2 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 25 December 2011 - 12:07 AM

Сортировка выпадающим списком

Делаем красивую и удобную сортировку списком (при выборе опции сразу же срабатывает ссылка, никаких дополнительных кнопок жать не нужно). Выглядит так:

Прикрепленный файл  shopcms-sort.jpg   22.84К   101 Количество загрузок:

Собственно, нужно полностью заменить функцию _sortSetting в следующих файлах:

core/includes/category.php
core/includes/category_search_result.php
core/includes/search_simple.php
core/includes/pricelist.php


Для этого ищем в перечисленных файлах строчку: function _sortSetting, вся функция выглядит примерно так (не во всех файлах она абсолютно идентична этой):

function _sortSetting( &$smarty, $urlToSort )
				{
						$sort_string = STRING_PRODUCT_SORT;
						$sort_string = str_replace( "{ASC_NAME}",   "[url="%22.$urlToSort.%22&sort=name&direction=ASC"]".STRING_ASC."[/url]",		$sort_string );
						$sort_string = str_replace( "{DESC_NAME}",  "[url="%22.$urlToSort.%22&sort=name&direction=DESC"]".STRING_DESC."[/url]",		$sort_string );
						$sort_string = str_replace( "{ASC_PRICE}",   "[url="%22.$urlToSort.%22&sort=Price&direction=ASC"]".STRING_ASC."[/url]",		$sort_string );
						$sort_string = str_replace( "{DESC_PRICE}",  "[url="%22.$urlToSort.%22&sort=Price&direction=DESC"]".STRING_DESC."[/url]",		$sort_string );
						$sort_string = str_replace( "{ASC_RATING}",   "[url="%22.$urlToSort.%22&sort=customers_rating&direction=ASC"]".STRING_ASC."[/url]",		$sort_string );
						$sort_string = str_replace( "{DESC_RATING}",  "[url="%22.$urlToSort.%22&sort=customers_rating&direction=DESC"]".STRING_DESC."[/url]",		$sort_string );
						$smarty->assign( "string_product_sort", html_amp($sort_string));
				}

и заменяем ВСЮ эту функцию на такую:

function _sortSetting( &$smarty, $urlToSort ) {
						
						$sort_arr = array("Популярные" => array("sort" => "viewed_times", "direction" => "DESC"), "Новинки" => array("sort" => "date_added", "direction" => "DESC"), "Цена - Высокая" => array("sort" => "Price", "direction" => "DESC"), "Цена - Низкая" => array("sort" => "Price", "direction" => "ASC"), "Хиты продаж" => array("sort" => "items_sold", "direction" => "DESC"), "Наличие" => array("sort" => "in_stock", "direction" => "DESC"));
						
						if(CONF_USE_RATING == 1) {
							$sort_arr["Популярные"]["sort"] = 'customers_rating';
						}
						
						if (isset($_GET["sort"]) && isset($_GET["direction"]))
							$sort_url = '&sort='.$_GET["sort"].'&direction='.$_GET["direction"];
						$sort_string = 'Сортировка: <select onChange="if(this.options[this.selectedIndex].value!=\'\'){window.location=this.options[this.selectedIndex].value}else{this.options[selectedIndex=0];}">';
						foreach ($sort_arr as $key => $val) {
							$sort_string .= '<option value="'.$urlToSort;
							foreach ($val as $nn => $dd)
								$sort_string .= '&'.$nn.'='.$dd;
							$sort_string .= '"';
							if ($val["sort"] == $_GET["sort"] && $val["direction"] == $_GET["direction"])
								$sort_string .= ' selected';
							$sort_string .= '>'.$key.'</option>';
						}
						$sort_string .= '</select>';
						$smarty->assign( "string_product_sort", html_amp($sort_string));
				}

Затем нужно выполнить ПУНКТ 2 из поста Админа (см. выше в шапке) - про добавление date_added.

Текст и варианты сортировок можете менять на свои по аналогии (см. массив $sort_arr).

Сообщение отредактировал micehide: 19 November 2012 - 07:37 PM
перезалит скриншот

  • 1

#3 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 25 December 2011 - 12:24 AM

Добавляем новые варианты сортировки по умолчанию в Админку

Это относится к опции Общие настройки -> "Сортировка по умолчанию" (внизу там селект), их изначально только три, а мне например нужно было сделать, чтобы все товары по умолчанию сортировались по Просмотрам (типа популярности).

Открываем файл core\functions\setting_functions.php и ищем строчку:

$sortlist[] = array("title"=>STRING_SET_ID3, "value"=>"sort_order, name");


сразу после нее вставляем две новые строчки:

$sortlist[] = array("title"=>"По просмотрам", "value"=>"viewed_times DESC");
$sortlist[] = array("title"=>"По рейтингу", "value"=>"customers_rating DESC");


По аналогии можете добавить и другие сортировки, вот варианты:

date_added DESC - по дате добавления (новые вначале)
items_sold DESC - по продажам (самые продаваемые вначале)


* Если будете добавлять date_added, то выполните ПУНКТ 2 из поста Админа - см. первый пост.
  • 2

#4 pavelbred

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 194 сообщений
Репутация: 4
Начинающий

Отправлено 18 September 2012 - 12:27 AM

Сортировка выпадающим списком

Делаем красивую и удобную сортировку списком (при выборе опции сразу же срабатывает ссылка, никаких дополнительных кнопок жать не нужно). Выглядит так:

Прикрепленный файл  shopcms-sort.jpg   22.84К   101 Количество загрузок:

Собственно, нужно полностью заменить функцию _sortSetting в следующих файлах:

core/includes/category.php
core/includes/category_search_result.php
core/includes/search_simple.php
core/includes/pricelist.php

Для этого ищем в перечисленных файлах строчку: function _sortSetting, вся функция выглядит примерно так (не во всех файлах она абсолютно идентична этой):

function _sortSetting( &$smarty, $urlToSort )
				{
						$sort_string = STRING_PRODUCT_SORT;
						$sort_string = str_replace( "{ASC_NAME}",   "[url="%22.$urlToSort.%22&sort=name&direction=ASC"]".STRING_ASC."[/url]",		$sort_string );
						$sort_string = str_replace( "{DESC_NAME}",  "[url="%22.$urlToSort.%22&sort=name&direction=DESC"]".STRING_DESC."[/url]",		$sort_string );
						$sort_string = str_replace( "{ASC_PRICE}",   "[url="%22.$urlToSort.%22&sort=Price&direction=ASC"]".STRING_ASC."[/url]",		$sort_string );
						$sort_string = str_replace( "{DESC_PRICE}",  "[url="%22.$urlToSort.%22&sort=Price&direction=DESC"]".STRING_DESC."[/url]",		$sort_string );
						$sort_string = str_replace( "{ASC_RATING}",   "[url="%22.$urlToSort.%22&sort=customers_rating&direction=ASC"]".STRING_ASC."[/url]",		$sort_string );
						$sort_string = str_replace( "{DESC_RATING}",  "[url="%22.$urlToSort.%22&sort=customers_rating&direction=DESC"]".STRING_DESC."[/url]",		$sort_string );
						$smarty->assign( "string_product_sort", html_amp($sort_string));
				}

и заменяем ВСЮ эту функцию на такую:

function _sortSetting( &$smarty, $urlToSort ) {
						
						$sort_arr = array("Популярные" => array("sort" => "viewed_times", "direction" => "DESC"), "Новинки" => array("sort" => "date_added", "direction" => "DESC"), "Цена - Высокая" => array("sort" => "Price", "direction" => "DESC"), "Цена - Низкая" => array("sort" => "Price", "direction" => "ASC"), "Хиты продаж" => array("sort" => "items_sold", "direction" => "DESC"));
						
						if(CONF_USE_RATING == 1) {
							$sort_arr["Популярные"]["sort"] = 'customers_rating';
						}
						
						if (isset($_GET["sort"]) && isset($_GET["direction"]))
							$sort_url = '&sort='.$_GET["sort"].'&direction='.$_GET["direction"];
						$sort_string = 'Сортировка: '; 						foreach ($sort_arr as $key => $val) { 							$sort_string .= ''; 						} 						$sort_string .= '';
						$smarty->assign( "string_product_sort", html_amp($sort_string));
				}

Затем нужно выполнить ПУНКТ 2 из поста Админа (см. выше в шапке) - про добавление date_added.

Текст и варианты сортировок можете менять на свои по аналогии (см. массив $sort_arr).


Подскажи а где у тебя функция "Наличие"? На скрине есть а в коде нет.
  • 0

#5 verdem

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 75 сообщений
Репутация: 1
Начинающий
  • ГородПитер

Отправлено 06 October 2012 - 11:07 AM

Подскажите пожалуйста, а если мне не нужны виды сортировки вообще, а нужно лишь чтобы все товары всегда сортировались по цене. от минимальной к максимальной и всё, то что нужно заменить в файле setting_functions.php?
По умолчанию насколько я понимаю товары сортируются по алфавиту, где можно поменять это вид сортировки на сортировку по цене??
  • 0

#6 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 06 October 2012 - 11:14 AM

По умолчанию насколько я понимаю товары сортируются по алфавиту, где можно поменять это вид сортировки на сортировку по цене??

Иногда поражают вопросы своей .... даже не знаю как сказать чтобы не оскорбить.

В админке в общих настройках выберите ПО ЦЕНЕ и уберите галочку Сортировка товаров.
  • 0

#7 verdem

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 75 сообщений
Репутация: 1
Начинающий
  • ГородПитер

Отправлено 06 October 2012 - 05:33 PM

По умолчанию насколько я понимаю товары сортируются по алфавиту, где можно поменять это вид сортировки на сортировку по цене??

Иногда поражают вопросы своей .... даже не знаю как сказать чтобы не оскорбить.

В админке в общих настройках выберите ПО ЦЕНЕ и уберите галочку Сортировка товаров.

================
ага...выключила...обратно ее теперь не включить и весь товар исчез ((((
  • 0

#8 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 06 October 2012 - 05:38 PM

ага...выключила...обратно ее теперь не включить и весь товар исчез ((((


Товар исчез из-за отключенный сортировки? ну да я тоже иногда смотрю "Мистические истории" по ТВ3. И там потомственная ведьма всем все время рекомендует обратиться к специалисту :lol:
  • 0

#9 verdem

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 75 сообщений
Репутация: 1
Начинающий
  • ГородПитер

Отправлено 06 October 2012 - 05:40 PM

не показывает теперь товары вообще в админке, хотя пишет их количество в каждой категории...
  • 0

#10 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 06 October 2012 - 05:41 PM

Попробуйте добавить какой-то тестовый товар. Скорее всего это связано с кривой установкой какого-то из модулей, связанного с категориями.
  • 0

#11 verdem

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 75 сообщений
Репутация: 1
Начинающий
  • ГородПитер

Отправлено 06 October 2012 - 05:48 PM

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

товар добавляет, но его не показывает, я первым делом добавила новый товар....

в спецпредложениях при этом товар показывается...
  • 0

#12 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 06 October 2012 - 05:48 PM

товар добавляет, но его не показывает, я первым делом добавила новый товар....

Ну что я могу сказать....
1. Вспоминайте какие модули устанавливали последними и ищите ошибку в установке. Возможно префикс БД неправильный или ошибка в mysql запроса - чаще всего это забытая запятая.
если не поможет
2. Сделайте бекап всех файлов и заменяйте на сервере по одному файлу (касающиеся админки) при этом не забывайте отключить кеширование. До тех пор пока не появятся товары и Вы не увидите в каком файле ошибка. Ну а дальше п.1 ищем ошибку ))
или если не поможет
3. Воспользуйтесь советом потомственной ведьмы. Цена Вашего вопроса 10$.

P.S. А почему не получается включить сортировку опять я еще не понял?
  • 0

#13 verdem

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 75 сообщений
Репутация: 1
Начинающий
  • ГородПитер

Отправлено 06 October 2012 - 05:49 PM

товар добавляет, но его не показывает, я первым делом добавила новый товар....

Ну что я могу сказать....
1. Вспоминайте какие модули устанавливали последними и ищите ошибку в установке. Возможно префикс БД неправильный или ошибка в mysql запроса - чаще всего это забытая запятая.
если не поможет
2. Сделайте бекап всех файлов и заменяйте на сервере по одному файлу (касающиеся админки) при этом не забывайте отключить кеширование. До тех пор пока не появятся товары и Вы не увидите в каком файле ошибка. Ну а дальше п.1 ищем ошибку ))
или если не поможет
3. Воспользуйтесь советом потомственной ведьмы. Цена Вашего вопроса 10$.

P.S. А почему не получается включить сортировку опять я еще не понял?


сортировка теперь включается, после пятого обновления страницы вдруг опять появилась...)) но это не помогает.
  • 0

#14 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 06 October 2012 - 06:34 PM

А если зайти другим браузером? :)
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#15 idal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 243 сообщений
Репутация: 7
Начинающий
  • ГородКиев

Отправлено 25 October 2012 - 01:31 PM

Сортировка выпадающим списком

Делаем красивую и удобную сортировку списком (при выборе опции сразу же срабатывает ссылка, никаких дополнительных кнопок жать не нужно). Выглядит так:

Изображение

Собственно, нужно полностью заменить функцию _sortSetting в следующих файлах:


core/includes/category.php
core/includes/category_search_result.php
core/includes/search_simple.php
core/includes/pricelist.php

Для этого ищем в перечисленных файлах строчку: function _sortSetting, вся функция выглядит примерно так (не во всех файлах она абсолютно идентична этой):


function _sortSetting( &$smarty, $urlToSort )
{
$sort_string = STRING_PRODUCT_SORT;
$sort_string = str_replace( "{ASC_NAME}", "".STRING_ASC."", $sort_string );
$sort_string = str_replace( "{DESC_NAME}", "".STRING_DESC."", $sort_string );
$sort_string = str_replace( "{ASC_PRICE}", "".STRING_ASC."", $sort_string );
$sort_string = str_replace( "{DESC_PRICE}", "".STRING_DESC."", $sort_string );
$sort_string = str_replace( "{ASC_RATING}", "".STRING_ASC."", $sort_string );
$sort_string = str_replace( "{DESC_RATING}", "".STRING_DESC."", $sort_string );
$smarty->assign( "string_product_sort", html_amp($sort_string));
}

и заменяем ВСЮ эту функцию на такую:


function _sortSetting( &$smarty, $urlToSort ) {

$sort_arr
= array("Популярные" => array("sort" => "viewed_times", "direction" => "DESC"), "Новинки" => array("sort" => "date_added", "direction" => "DESC"), "Цена - Высокая" => array("sort" => "Price", "direction" => "DESC"), "Цена - Низкая" => array("sort" => "Price", "direction" => "ASC"), "Хиты продаж" => array("sort" => "items_sold", "direction" => "DESC"));

if(CONF_USE_RATING == 1) {
$sort_arr["Популярные"]["sort"] = 'customers_rating';
}

if (isset($_GET["sort"]) && isset($_GET["direction"]))
$sort_url = '&sort='.$_GET["sort"].'&direction='.$_GET["direction"];
$sort_string = 'Сортировка: '; foreach ($sort_arr as $key => $val) { $sort_string .= ''; } $sort_string .= '';
$smarty->assign( "string_product_sort", html_amp($sort_string));
}

Затем нужно выполнить ПУНКТ 2 из поста Админа (см. выше в шапке) - про добавление date_added.


Текст и варианты сортировок можете менять на свои по аналогии (см. массив $sort_arr).


Все сделал как написано, но проблема в том что выпадающий список не появляется. Может причина от версии магазин.
  • 0

#16 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 30 October 2012 - 11:53 PM

Уважаемые idal и pavelbred, извиняюсь за конкретную задержку.
Видимо редактор форума "съел" кусок кода или я чего-то недоглядел.
Обновил кусок кода с новой функцией во втором посте: http://vsupport.club...dpost__p__14842
  • 1

#17 Jeck2000

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 159 сообщений
Репутация: 8
Начинающий
  • ГородСанкт-Петербург

Отправлено 02 November 2012 - 06:18 PM

Всё появилось, но почему-то упорно не хочет сортировать по дате добавления товара. Возможно разгадка в этой строчке из первого поста

"После проделанного советую добавить индекс на поле [prefix]_products.date_added в БД"

Но я не очень понял что нужно делать. Вот зашел я phpmyadmin, нашел таблицу _ejro_products, открыл структуру , нашел поле date_added, а что дальше делать ? как этот индекс добавить ?
  • 0

#18 Dbus

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 02 November 2012 - 06:38 PM

Это желательно, но не обязательно. Ищите проблему в другом.

Но я не очень понял что нужно делать. Вот зашел я phpmyadmin, нашел таблицу _ejro_products, открыл структуру , нашел поле date_added, а что дальше делать ? как этот индекс добавить ?


напротив поля справа найдите иконку с молниями (если шаблон не изменен), она так и называется - индекс
  • 0
502 Bad Gateway

#19 idal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 243 сообщений
Репутация: 7
Начинающий
  • ГородКиев

Отправлено 02 November 2012 - 06:42 PM

Но я не очень понял что нужно делать. Вот зашел я phpmyadmin, нашел таблицу _ejro_products, открыл структуру , нашел поле date_added, а что дальше делать ? как этот индекс добавить ?

В таблице есть графа "Добить индекс" просто нажимаете на нее и все, на разных хостингах по разному у меня на одном есть графа "Ещё" при наведении на нее появляется "Добить индекс".

Уважаемые idal и pavelbred, извиняюсь за конкретную задержку.
Видимо редактор форума "съел" кусок кода или я чего-то недоглядел.

Обновил кусок кода с новой функцией во втором посте: http://vsupport.club...dpost__p__14842

Спасибо
  • 0

#20 Jeck2000

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 159 сообщений
Репутация: 8
Начинающий
  • ГородСанкт-Петербург

Отправлено 02 November 2012 - 08:14 PM

Кое с чем разобрался. Я установил 2 сортировки в админк и списком в пользовательской части. В админке по умолчанию сортировка по дате и если заходишь в категорию первый раз, то там всё отсортировано как надо, т.е. начинается с последнего добавленного товара. Если выбираешь в пользовательской части в списке "новинки" он сортирует, но соответственно переворачивает список наоборот, и первым становится последний добавленный и обратно к первому варианту списка сортировки уже не вернутся, т.е. только заново заходом в категорию. не знаю глюк это или нет, но как-то не очень удобно получается
  • 0