Регистрация
Вход через соцсети
Восстановление пароля

Сортировка товара по возрастанию сначала с ценой, затем товары без цены

Новый топик
12.10.2014, 22:54
Ответить | Цитировать
Гость
Гость

Все привет!
В магазине есть товары без цены. нужно вывести товары с ценой по возрастанию потом товары без цены. Порядок должен быть такой:
товар1 1000 рэ
товар2 1200 рэ
товар3 1400 рэ
товар4 цена по запросу (поле Price не заполнено)

Посоветуйте, как возможно?
Спасибо
12.10.2014, 23:16
Ответить | Цитировать
Вячеслав
ruCreate
Вячеслав

Зарегистрирован:
2013-04-12
Сообщений: 87

В системных настройках компонента добавьте

Код:
$query_order="(Price+0)";
13.10.2014, 10:32
Ответить | Цитировать
Гость
Гость

спасибо! не работает ...
14.10.2014, 03:13
Ответить | Цитировать
Вячеслав
ruCreate
Вячеслав

Зарегистрирован:
2013-04-12
Сообщений: 87

Должно работать, посмотрите, чтобы не было записи в "Сортировать объекты по полю (полям)*"
Только цена по запросу будет в самом верху, потому как в таблице компонента значение "0"
14.10.2014, 10:38
Ответить | Цитировать
nadin k

Зарегистрирован:
2006-05-18
Сообщений: 1

Вячеслав,
не работает. вот сис настройки

Код:
<?php

$query_order="(Price+0)";

if (!nc_module_check_by_keyword("netshop")) {
die (NETCAT_MODULE_NETSHOP_MODULEUNCHECKED);
}

$netshop = nc_netshop::get_instance();

// Параметр request_type установлен, если страница запрошена скриптом переключения варианта товара
$request_type = $nc_core->input->fetch_get_post('request_type');

$pages_template['prefix'] = "";
$pages_template['suffix'] = "";
$pages_template['active'] = "<div class=\"tpl-block-pages-item tpl-state-current\"><a href=\"%URL\">%PAGE</a></div>";
$pages_template['unactive'] = "<div class=\"tpl-block-pages-item\"><a href=\"%URL\">%PAGE</a></div>";
$pages_template['divider'] = " ";

$subdivision = $nc_core->subdivision->get_by_id($sub);

// Показывать в списке отключенные товары, если у них имеются включенные варианты:
$ignore_check = true;
$query_where = "(a.`Checked` = 1 OR (a.`Checked` = 0 AND (" .
"SELECT `Message_ID` FROM `Message$classID` as `child` " .
" WHERE `child`.`Parent_Message_ID` = a.`Message_ID` AND `child`.`Checked` = 1 " .
" LIMIT 1" .
")))";

$filter_fields = array(
'Vendor' => array(
'field' => 'checkbox'
),
'Price' => array(
'field' => 'range'
),
'Length' => array(
'field' => 'range'
),
'Width' => array(
'field' => 'range'
),
'Height' => array(
'field' => 'range'
),
'Weight' => array(
'field' => 'range'
),
'EntranceCount' => array(
'field' => 'checkbox'
),
'PlaceCount' => array(
'field' => 'checkbox'
),
'Frame' => array(
'field' => 'checkbox'
),
'Material' => array(
'field' => 'checkbox'
),
'Purpose' => array(
'field' => 'checkbox'
),
'TentType' => array(
'field' => 'checkbox'
),
'Frame' => array(
'field' => 'checkbox'
),
);

$netshop->filter->init_fields($filter_fields);
$netshop->filter->query_where($query_where);

$sortBy = $nc_core->input->fetch_get('sortBy');
$sortDesc = (int)$nc_core->input->fetch_get('sortDesc');

$sorting_methods = array(
'' => array('field' => 'Name', 'title' => 'По алфавиту'),
'price' => array('field' => 'Price', 'title' => 'По цене'),
);

if (isset($sorting_methods[$sortBy])) {
$query_order = '`' . $sorting_methods[$sortBy]['field'] . '`' . ($sortDesc ? ' DESC' : '');
}

$f_Slider_tpl = array(
'prefix' => "<div class='catalogue_full_animate'>",
'record' => "<div class='block'><div class='display_table'><div class='display_table_row'><div class='display_table_cell'>
<a href='%Path%'><img src='%Preview%' alt='' /></a>
</div></div></div></div>",
'divider' => '',
'suffix' => '</div>',
);

if (!function_exists('current_link')) {
function current_link($params, $val = null) {
if (!is_array($params)) {
$params = array($params => ($val == '' ? null : $val));
}
if ($get = nc_core('input')->fetch_get()) {
$params = array_merge($get, $params);
}
return nc_infoblock_path($GLOBALS['cc'], 'index', 'html', null, $params);
}
}


nadin
14.10.2014, 11:50
Ответить | Цитировать
Вячеслав
ruCreate
Вячеслав

Зарегистрирован:
2013-04-12
Сообщений: 87

Сейчас проверил на демо версии ИМ.
Старый товар удаляете создаете новый, и новый фильтруется по цене
14.10.2014, 12:50
Ответить | Цитировать
Гость
Гость

мне нужно сортировать сначала товары с ценой от мин до макс, а товары=0 отправить в конец списка. У Вас работает?
14.10.2014, 13:24
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

Не лучший вариант

Может вам стоит разделить выборку на две части.
С ценниками и без. Сперва выбрать все товары с ценниками и отсортировать как угодно. После скажем в суффиксе объектов впишите <?=($search ? nc_objects_list($sub,$cc,"",true) : null)?> с неким параметром указывающим что нужно отображать товары без цены или отдельный шаблон (будет не удобно если что то нужно изменить).

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
15.10.2014, 17:11
Ответить | Цитировать
Гость
Гость

можно добавить в SELECT условие IF(Price>0,Price,БОЛЬШОЕ_ЧИСЛО) price_sort, а потом в ORDER BY price_sort
26.10.2014, 14:03
Ответить | Цитировать
Гость
Гость

Цитата:
можно добавить в SELECT условие IF(Price>0,Price,БОЛЬШОЕ_ЧИСЛО) price_sort, а потом в ORDER BY price_sort


Здравствуйте

а можно подробнее.
и БОЛЬШОЕ_ЧИСЛО - ?

спасибо!
14.11.2014, 21:19
Ответить | Цитировать
Гость
Гость

например, БОЛЬШОЕ_ЧИСЛО=4000000
198 196 2014-11-14 21:19:06 13843
Описание проекта