Сортировка товара по алфавиту

#
Сортировка товара по алфавиту
Уважаемые господа, может кто делал такое?:


Сортировка товара происходит по алфавиту, но сам алфавит представлен в виде списка Латинских и Русских букв

Поделитесь если кто делал, пожалуйста.
Модератор
#
Re: Сортировка товара по алфавиту
Можно сделать фильтр в ТДС по LIKE. Т.е. при нажатии на букву А будут выбираться товары на букву А. Например, так:


<?php
$shop = & singleton('shop');
$param = array();
$element = array();
$element['type']= 0;
$element['prefix'] = 'and';
$element['name'] = 'shop_items_catalog_name';
$element['if'] = 'LIKE ';
$element['value'] = 'A%';
$element['sufix'] = '';
$param['select'][] = $element;
$param['current_group_id'] = false;
$shop->ShowShop(1,'МагазинКаталогТоваров',$param);
?>
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Сортировка товара по алфавиту
Хм..идея практически понятна... но реализация чет не очень... вывести на отдельной странице получилось (благодаря службе поддержки):

<?php
$shop = & singleton('shop');
$param = array();
$element = array();
$element['type']= 0;
$element['prefix'] = 'and';
$element['name'] = 'shop_items_catalog_name';
$element['if'] = 'LIKE ';
$element['value'] = 'd%';
$element['sufix'] = '';
$param['select'][] = $element;
$param['items_order']='Asc';
$param['items_field_order']='shop_items_catalog_name';
$param['current_group_id'] = false;
$param['items_on_page'] = 100;
$param['xml_show_group_type'] = 'all';
$shop->ShowShop('3','Рейтинг',$param);
?>


Но вот с Вашим примером как действовать - не пойму((
#
Re: Сортировка товара по алфавиту
ipsus, ну а дальше-то вообще элементарно.

На буквы алфавита вешаете ссылки с get-параметром, указывающим необходимость фильтрации по. Например
<a href="/shop/group_1/?sort_alfabet=A">A</a> <a href="/shop/group_1/?sort_alfabet=B">B</a>


Затем в коде ТДС, где-нибудь перед вызовом метода ShowShop() вставляете условие, в котором проверяете что передан get-параметр sort_alfabet, и если передан, то получаете его значение (обязательно фильтруем его функциями to_str() и quote_smart()!!!) и передаете в тот же самый фильтр, который вы реализовали на отдельной странице. Получится что-то типа
if(isset($_GET['sort_alfabet']))
{
   $letter = quote_smart(to_str($_GET['sort_alfabet']));

   $element = array();
   $element['type']= 0;
   $element['prefix'] = 'and';
   $element['name'] = 'shop_items_catalog_name';
   $element['if'] = 'LIKE ';
   $element['value'] = $letter . '%';
   $element['sufix'] = '';
   $param['select'][] = $element;
}


И будет вам Щястье.

P.S. По-хорошему бы, надо после определения переменной $letter добавить какой-нибудь фильтр, например, регуляркой, чтобы отсеять все символы кроме разрешенных, а потом еще и проверить длину оставшейся строки, и если она равна 0 то ничего не фильтровать, т.к. будет SQL-ошибка, а если она больше 1 символа, то откусить от строки первый из них и фильтровать по нему. (Так, на всякий случай, мало ли кому чего приспичит дописать в ссылку после ?sort_alfabet= а она, хоть профильтрована от инъекций, но все-таки передается напрямую в запрос к БД, а значит может намусорить в выводе.)
Но эту часть я оставляю на вашей совести

P.P.S. А вот вопрос как в xslt автоматически формировать строку алфавита, с подстановкой нужных путей и букв - уже более интересен
Заказов не беру. Консультирую редко.
#
Re: Сортировка товара по алфавиту
Kotoff,
Спасибо!

Kotoff писал(а):
P.P.S. А вот вопрос как в xslt автоматически формировать строку алфавита, с подстановкой нужных путей и букв — уже более интересен


Да - думаю, тут вряд ли так просто, кто-то расскажет в примере...
Модератор
#
Re: Сортировка товара по алфавиту
ipsus писал(а):
А вот вопрос как в xslt автоматически формировать строку алфавита, с подстановкой нужных путей и букв — уже более интересен


Есть несколько решений: http://erum.ru/23.htm
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Сортировка товара по алфавиту
Я придумал как сформировать только активные буквы (на которые есть товары для фильтрации) и неактивные при помощи примеров alexander.egorov из последнего сообщения, но как быть если xml вывод списка товаров ограничен 20 товарами на странице? Наверное тогда нужно формировать этот список предварительно в ТДС или может есть какой-то способ кроме вывода всех товаров на одной странице?
Авторизация