Категории

[FAQ] Часто задаваемые вопросы и ответы

Проблемы и решения

Ошибки и исправления

Общие вопросы

Расширения

Установка и обновление

Модули

Шаблоны

Локализация интерфейса

Коммерческие предложения

Учимся бизнесу

Бизнес книги

Поисковая оптимизация (SEO)

Магазины на ShopOS

Хостинг для ShopOS

Предложения и пожелания

Курилка

Сортировка товаров

в каталоге товаров есть пункт выбора сколько товаров показывать на странице. там нет кнопки - показать все. также в этой же строке есть выбор сортировки ( по имени, по цене) можно ли сделать так чтобы сортировка по возрастании и по убыванию просто чередовалась от количества нажатия на кнопку, а не по 2 пункта.. Нужно добавить сортировку по производителю. в идеале чтобы сортировка могла идти по нескольким параметрам. Типа производитель и цена. Есть ли возможность в разных разделах каталога делать разные варианты сортировки??
Тот же вопрос к расширенному поиску.


все можно.

нужно заказывать доработку на free-lance.ru

готового ничего нет.


сделал на скорую руку, проверен:
на чистой ShopOS 2.4.4
на шаблоне default
(в других ситуациях не проверялся,
предположу что могут быть накладки)

в файле product_listing/product_listing_columns.html
или в product_listing/product_listing_list.html

(в зависимости от того какой используете)

вместо:

<a href="{$LINK_PAGE}10">10</a>, <a href="{$LINK_PAGE}20">20</a>, <a href="{$LINK_PAGE}50">50</a>, <a href="{$LINK_PAGE}100">100</a>


пишем:

{$SELECT_ONPAGE}


далее в /modules/product_listing.php
после:
$module->assign('LINK_sort_name_asc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page','sort', 'direction', 'info','x','y')) . 'sort=name&direction=asc'));
$module->assign('LINK_sort_name_desc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page','sort', 'direction', 'info','x','y')) . 'sort=name&direction=desc'));
$module->assign('LINK_sort_price_asc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page','sort', 'direction', 'info','x','y')) . 'sort=price&direction=asc'));
$module->assign('LINK_sort_price_desc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page','sort', 'direction', 'info','x','y')) . 'sort=price&direction=desc'));


добавляем:
$on_page_item_string = '';
$on_page_item_string .= '<select class="f_select" onChange="top.location.href =this.options.value">';
$value_onpage = array ('10', '20', '50', '100');
$key = $value_onpage;
    $on_page_item_string .= '<option '.$str.' >' . TEXT_SORT_PRODUCT_ONPAGE. '</option>';
while ($key = os_db_fetch_array($value_onpage)) {

if ($_SESSION == $key)
{
  $str = 'selected="selected"';
}
$on_page_item_string .= '<option '.$str.' VALUE="'.os_href_link(basename($PHP_SELF), 'on_page=' . $key.'&'.os_get_all_get_params(array('language', 'on_page')), $request_type).'">' . $key. '</option>';

$str = '';
  }

    $hidden_get_variables = '';
    reset($_GET);
    while (list($key, $value_onpage) = each($_GET)) {
      if ( ($key != 'on_page') && ($key != os_session_name()) && ($key != 'x') && ($key != 'y') ) {
        $hidden_get_variables .= os_draw_hidden_field($key, $value_onpage);
      }
    }
$on_page_item_string .= '</select>';
$module->assign('SELECT_ONPAGE', $on_page_item_string . $hidden_get_variables);

далее в lang.php перед
define('TITLE', STORE_NAME);
добавить:

define('TEXT_SORT_PRODUCT_ONPAGE', 'Товаров на странице:');



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


Благодарю! Попробую - отпишусь. У меня, правда, пока только 2.4.3... Еще не обновлялся...


ну а для сортировки по имени и цене можно сделать следующее:

в файле /modules/product_listing.php  перед

$module->assign('NAVIGATION', $navigation);


пишем:


$module->assign('SELECT_SORT_OPEN', '<select class="f_select" onChange="top.location.href =this.options.value">');
$module->assign('SELECT_SORT_OPEN_OPTION_EMPTY', '<option>');
$module->assign('SELECT_SORT_OPEN_OPTION_1', '<option value="'.os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page','sort', 'direction', 'info','x','y')) . 'sort=name&direction=asc').'">');
$module->assign('SELECT_SORT_OPEN_OPTION_2', '<option value="'.os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page','sort', 'direction', 'info','x','y')) . 'sort=name&direction=desc').'">');
$module->assign('SELECT_SORT_OPEN_OPTION_3', '<option value="'.os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page','sort', 'direction', 'info','x','y')) . 'sort=price&direction=asc').'">');
$module->assign('SELECT_SORT_OPEN_OPTION_4', '<option value="'.os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page','sort', 'direction', 'info','x','y')) . 'sort=price&direction=desc').'">');
$module->assign('SELECT_SORT_CLOSE_OPTION', '</option>');
$module->assign('SELECT_SORT_CLOSE', '</select>');



а в самом шаблоне, в файле product_listing/product_listing_columns.html
или в product_listing/product_listing_list.html

(в зависимости от того какой используете)

и вместо:

<a href="{$LINK_sort_name_asc}">&uarr;{#text_sort_name_asc#}</a> |
<a href="{$LINK_sort_name_desc}">&darr;{#text_sort_name_desc#}</a> |
<a href="{$LINK_sort_price_asc}">&uarr;{#text_sort_price_asc#}</a> |
<a href="{$LINK_sort_price_desc}">&darr;{#text_sort_price_desc#}</a>


пишем:


{$SELECT_SORT_OPEN}
{$SELECT_SORT_OPEN_OPTION_EMPTY}{#text_sort#}{$SELECT_SORT_CLOSE_OPTION}
{$SELECT_SORT_OPEN_OPTION_1}&uarr;{#text_sort_name_asc#}{$SELECT_SORT_CLOSE_OPTION}
{$SELECT_SORT_OPEN_OPTION_2}&darr;{#text_sort_name_desc#}{$SELECT_SORT_CLOSE_OPTION}
{$SELECT_SORT_OPEN_OPTION_3}&uarr;{#text_sort_price_asc#}{$SELECT_SORT_CLOSE_OPTION}
{$SELECT_SORT_OPEN_OPTION_4}&darr;{#text_sort_price_desc#}{$SELECT_SORT_CLOSE_OPTION}
{$SELECT_SORT_CLOSE}



готово, можно пользоваться.

проверял с сортировкой из предыдущего поста,
обе сортировки работают отлично, дополняя друг друга.


идея для реализации была взята здесь Выпадающее меню валют
только мною не реализована до конца,
но что-то пока не могу увидеть решение
для проверки например если выбрана
какая-то сортировка, то по умолчанию,
что-бы показывало её в <select ...


вот ещё один вариант для выпадающего списка сортировок:

идея  была подсмотрена на сайте mobile.de

в файле /modules/product_listing.php


ищем:

$module->assign('LINK_sort_name_asc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page','sort', 'direction', 'info','x','y')) . 'sort=name&direction=asc'));
$module->assign('LINK_sort_name_desc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page','sort', 'direction', 'info','x','y')) . 'sort=name&direction=desc'));
$module->assign('LINK_sort_price_asc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page','sort', 'direction', 'info','x','y')) . 'sort=price&direction=asc'));
$module->assign('LINK_sort_price_desc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page','sort', 'direction', 'info','x','y')) . 'sort=price&direction=desc'));



заменяем:

// -- SORTING -- //
if ((!isset ($_GET) && $_GET =='') && (!isset ($_GET) && $_GET =='')){
$module->assign('name_and_price_sorting','1');
$module->assign('LINK_sort_name_asc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page', 'sort', 'direction', 'info','x','y')) . 'sort=name&direction=asc'));
$module->assign('LINK_sort_name_desc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page', 'sort', 'direction', 'info','x','y')) . 'sort=name&direction=desc'));
$module->assign('LINK_sort_price_asc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page', 'sort', 'direction', 'info','x','y')) . 'sort=price&direction=asc'));
$module->assign('LINK_sort_price_desc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page', 'sort', 'direction', 'info','x','y')) . 'sort=price&direction=desc'));

} else {

$module->assign('name_and_price_sorting','0');
$module->assign('LINK_sort_delete',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page', 'sort', 'direction', 'info','x','y'))));

if ((os_not_null($_GET) && $_GET=='name') && (os_not_null($_GET) && $_GET=='asc')){
$module->assign('show_name_direction_asc','1');
$module->assign('LINK_sort_name_asc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page', 'sort', 'direction', 'info','x','y')) . 'sort=name&direction=asc'));
} else {$module->assign('show_name_direction_asc','0');
$module->assign('LINK_sort_name_asc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page', 'sort', 'direction', 'info','x','y')) . 'sort=name&direction=asc'));
}

if ((os_not_null($_GET) && $_GET=='name') && (os_not_null($_GET) && $_GET=='desc')){
$module->assign('show_name_direction_desc','1');
$module->assign('LINK_sort_name_desc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page', 'sort', 'direction', 'info','x','y')) . 'sort=name&direction=desc'));
} else {$module->assign('show_name_direction_desc','0');
$module->assign('LINK_sort_name_desc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page', 'sort', 'direction', 'info','x','y')) . 'sort=name&direction=desc'));
}

if ((os_not_null($_GET) && $_GET=='price') && (os_not_null($_GET) && $_GET=='asc')){
$module->assign('show_price_direction_asc','1');
$module->assign('LINK_sort_price_asc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page', 'sort', 'direction', 'info','x','y')) . 'sort=price&direction=asc'));
} else {$module->assign('show_price_direction_asc','0');
$module->assign('LINK_sort_price_asc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page', 'sort', 'direction', 'info','x','y')) . 'sort=price&direction=asc'));
}

if ((os_not_null($_GET) && $_GET=='price') && (os_not_null($_GET) && $_GET=='desc')){
$module->assign('show_price_direction_desc','1');
$module->assign('LINK_sort_price_desc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page', 'sort', 'direction', 'info','x','y')) . 'sort=price&direction=desc'));
} else {$module->assign('show_price_direction_desc','0');
$module->assign('LINK_sort_price_desc',os_href_link(basename($PHP_SELF),os_get_all_get_params(array ('page', 'sort', 'direction', 'info','x','y')) . 'sort=price&direction=desc'));
}
}
// -- END SORTING -- //

далее в  шаблоне, в файле product_listing/product_listing_columns.html
или в product_listing/product_listing_list.html

(в зависимости от того какой используете)

вместо:

<a href="{$LINK_sort_name_asc}">&uarr;{#text_sort_name_asc#}</a> |
<a href="{$LINK_sort_name_desc}">&darr;{#text_sort_name_desc#}</a> |
<a href="{$LINK_sort_price_asc}">&uarr;{#text_sort_price_asc#}</a> |
<a href="{$LINK_sort_price_desc}">&darr;{#text_sort_price_desc#}</a>


ставим:

{if $name_and_price_sorting =='1'}<div class="body_type_title " style="width:auto;border:#eb7800 solid 1px; display:inline-block; padding:.2em .5em">{else}
<div class="body_type_title " style="width:auto;border:#eb7800 solid 1px; display:inline-block; padding:.2em .5em">{/if}
{#text_sort#}&nbsp;
{if $show_name_direction_asc == '1'}<a href="{$LINK_sort_name_asc}">&uarr;{#text_sort_name_asc#}</a>{/if}
{if $show_name_direction_desc == '1'}<a href="{$LINK_sort_name_desc}">&darr;{#text_sort_name_desc#}</a>{/if}
{if $show_price_direction_asc == '1'}<a href="{$LINK_sort_price_asc}">&uarr;{#text_sort_price_asc#}</a>{/if}
{if $show_price_direction_desc == '1'}<a href="{$LINK_sort_price_desc}">&darr;{#text_sort_price_desc#}</a>{/if}

{if $name_and_price_sorting =='1'}<ul class="body_type_display" style="position:absolute;background:#fff;border:#eb7800 solid 1px; display:inline-block; padding:.2em .5em">{else}
<ul class="body_type_display" style="position:absolute;background:#fff;border:#eb7800 solid 1px; display:inline-block; padding:.2em .5em">{/if}
{if $name_and_price_sorting =='0'}<li><a href="{$LINK_sort_delete}">&rarr; delete</a></li>{/if}
{if $name_and_price_sorting =='1'}
<li><a href="{$LINK_sort_name_asc}">&uarr;{#text_sort_name_asc#}</a></li>
<li><a href="{$LINK_sort_name_desc}">&darr;{#text_sort_name_desc#}</a></li>
<li><a href="{$LINK_sort_price_asc}">&uarr;{#text_sort_price_asc#}</a></li>
<li><a href="{$LINK_sort_price_desc}">&darr;{#text_sort_price_desc#}</a></li>
{/if}

{if $show_name_direction_asc == '1'}<li><a href="{$LINK_sort_name_asc}">&uarr;{#text_sort_name_asc#} - SELECTED</a></li>{/if}
{if $show_name_direction_desc == '1'}<li><a href="{$LINK_sort_name_desc}">&darr;{#text_sort_name_desc#} - SELECTED</a></li>{/if}
{if $show_price_direction_asc == '1'}<li><a href="{$LINK_sort_price_asc}">&uarr;{#text_sort_price_asc#} - SELECTED</a></li>{/if}
{if $show_price_direction_desc == '1'}<li><a href="{$LINK_sort_price_desc}">&darr;{#text_sort_price_desc#} - SELECTED</a></li>{/if}

{if $show_name_direction_asc == '0'}<li><a href="{$LINK_sort_name_asc}">&uarr;{#text_sort_name_asc#}</a></li>{/if}
{if $show_name_direction_desc == '0'}<li><a href="{$LINK_sort_name_desc}">&darr;{#text_sort_name_desc#}</a></li>{/if}
{if $show_price_direction_asc == '0'}<li><a href="{$LINK_sort_price_asc}">&uarr;{#text_sort_price_asc#}</a></li>{/if}
{if $show_price_direction_desc == '0'}<li><a href="{$LINK_sort_price_desc}">&darr;{#text_sort_price_desc#}</a></li>{/if}



{if $name_and_price_sorting =='1'}</ul>{else}</ul>{/if}
{if $name_and_price_sorting =='1'}</div>{else}</div>{/if}


и теперь что-бы оживить все это нада
в файле includes/header.php

между тегами <head ...

вставить:


<script type="text/javascript" src="jscript/jquery/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
  $('.body_type_display').css("display","none");
 $(".body_type_title").hover(function(){
      $(".body_type_display").fadeIn();
  },function() {
 $(".body_type_display").css("display", "none");
  });
});
</script>


но есть один момент:
я не вкурсе на каких страницах данная сортировка используеться,
поэтому подключал для всех страниц сайта,
кто помнит где данная сортировка используется,
просьба подсказать эти страницы,
дабы jquery выводился только там - где он необходим.

ну а стили и классы из примера каждый под себя "подгонит"


как добавить сортировку товаров в выводе результатов расширеного поиска?


что никто не знает? :-[


Кто-то знает. Но длинно описывать не совсем простой процесс - не слишком интересно.
Смотрите,  как сделана сортировка в других местах и действуйте по аналогии...
Или используйте ранее написанное в теме...


Хочу вывести сортировку в результатах расширеного поиска, в  advanced_search_result.php вставляю код который приведен здесь выше
теперь только не пойму куда вставлять код

{if $name_and_price_sorting =='1'}<div class="body_type_title " style="width:auto;border:#eb7800 solid 1px; display:inline-block; padding:.2em .5em">{else}
<div class="body_type_title " style="width:auto;border:#eb7800 solid 1px; display:inline-block; padding:.2em .5em">{/if}
{#text_sort#}&nbsp;
{if $show_name_direction_asc == '1'}<a href="{$LINK_sort_name_asc}">&uarr;{#text_sort_name_asc#}</a>{/if}
{if $show_name_direction_desc == '1'}<a href="{$LINK_sort_name_desc}">&darr;{#text_sort_name_desc#}</a>{/if}
{if $show_price_direction_asc == '1'}<a href="{$LINK_sort_price_asc}">&uarr;{#text_sort_price_asc#}</a>{/if}
{if $show_price_direction_desc == '1'}<a href="{$LINK_sort_price_desc}">&darr;{#text_sort_price_desc#}</a>{/if}

{if $name_and_price_sorting =='1'}<ul class="body_type_display" style="position:absolute;background:#fff;border:#eb7800 solid 1px; display:inline-block; padding:.2em .5em">{else}
<ul class="body_type_display" style="position:absolute;background:#fff;border:#eb7800 solid 1px; display:inline-block; padding:.2em .5em">{/if}
{if $name_and_price_sorting =='0'}<li><a href="{$LINK_sort_delete}">&rarr; delete</a></li>{/if}
{if $name_and_price_sorting =='1'}
<li><a href="{$LINK_sort_name_asc}">&uarr;{#text_sort_name_asc#}</a></li>
<li><a href="{$LINK_sort_name_desc}">&darr;{#text_sort_name_desc#}</a></li>
<li><a href="{$LINK_sort_price_asc}">&uarr;{#text_sort_price_asc#}</a></li>
<li><a href="{$LINK_sort_price_desc}">&darr;{#text_sort_price_desc#}</a></li>
{/if}

{if $show_name_direction_asc == '1'}<li><a href="{$LINK_sort_name_asc}">&uarr;{#text_sort_name_asc#} - SELECTED</a></li>{/if}
{if $show_name_direction_desc == '1'}<li><a href="{$LINK_sort_name_desc}">&darr;{#text_sort_name_desc#} - SELECTED</a></li>{/if}
{if $show_price_direction_asc == '1'}<li><a href="{$LINK_sort_price_asc}">&uarr;{#text_sort_price_asc#} - SELECTED</a></li>{/if}
{if $show_price_direction_desc == '1'}<li><a href="{$LINK_sort_price_desc}">&darr;{#text_sort_price_desc#} - SELECTED</a></li>{/if}

{if $show_name_direction_asc == '0'}<li><a href="{$LINK_sort_name_asc}">&uarr;{#text_sort_name_asc#}</a></li>{/if}
{if $show_name_direction_desc == '0'}<li><a href="{$LINK_sort_name_desc}">&darr;{#text_sort_name_desc#}</a></li>{/if}
{if $show_price_direction_asc == '0'}<li><a href="{$LINK_sort_price_asc}">&uarr;{#text_sort_price_asc#}</a></li>{/if}
{if $show_price_direction_desc == '0'}<li><a href="{$LINK_sort_price_desc}">&darr;{#text_sort_price_desc#}</a></li>{/if}



{if $name_and_price_sorting =='1'}</ul>{else}</ul>{/if}
{if $name_and_price_sorting =='1'}</div>{else}</div>{/if}

подскажите ?



Хочу вывести сортировку в результатах расширеного поиска, в  advanced_search_result.php вставляю код который приведен здесь выше
теперь только не пойму куда вставлять код
подскажите ?


1. Не понятно, Вы код вставляете или только думаете, куда вставлять?
2. Если только думаете, то попробуйте вставлять в разные места. Скорее всего в любом случае ничего хорошего не выйдет.
3. Этот код сам по себе ужасно кривой.
4.  Этот код сам по себе никак не подходит для вставки в указанный файл.


ну понятно, допустим я возьму другой код(их тут несколько в теме) куда его вставить?

вставляю в файлы как здесь в теме указано - все работает, по аналогии вставляю в файл advanced_search_result.php
а второй код который должен вставлятся (как здесь показано product_listing_columns.html), незнаю в какой модуль вставить?


Источник



Copyright ShopOS