Сортировка товаров для интернет-магазинов, сконструированных на основе Shop-Script FREE
Воронежское региональное отделение Союза писателей России и администрация Аннинского района учредили литературную премию в честь выдающейся поэтессы Е. П. Ростопчиной.
$q = db_query("SELECT productID FROM ".PRODUCTS_TABLE." WHERE categoryID='$categoryID' AND enabled=1 ORDER BY name") or die (db_error());
На строку следующего содержания
$q = db_query("SELECT productID FROM ".PRODUCTS_TABLE." WHERE categoryID='$categoryID' AND enabled=1 ORDER BY Price") or die (db_error());
Вместо Price можно использовать и какой-то другой критерий – рейтинг, новизна и.т.п.
Но наша задача стоит несколько шире. Пользователь сам должен отсортировать товар по одному из предложенных критериев. Для решения потребуется внести изменения в следующие файлы скрипта Shop-Script FREE
- index.php (корень движка)
- category.tpl.html (папка tmpl1 в шаблонах)
- russian.php (папка languages)
- category.php (папка includes)
И создадим один новый файл php: product_conf.inc.php, который разместим в папке cfg
Файл product_conf.inc.php имеет следующую «внутреннюю начинку»
<?php
define('CONF_SORT_CATEGORY', 'categoryID');
define('CONF_SORT_CATEGORY_BY', 'ASC');
define('CONF_SORT_PRODUCT', 'productID');
define('CONF_SORT_PRODUCT_BY', 'ASC');
?>
1. Вносим изменения в index.php
- подключаем вызов созданного файла
include("./cfg/connect.inc.php");
include("./includes/database/mysql.php");
include("./cfg/general.inc.php");
include("./cfg/appearence.inc.php");
include("./cfg/functions.php");
include("./cfg/category_functions.php");
include("./cfg/language_list.php");
//***********************
include("./cfg/product_conf.inc.php");
//***********************
- перед // -------------SET SMARTY VARS AND INCLUDE SOURCE FILES------------//
добавляем следующий код
// sort order
if (isset($_GET["sort"]))
{
switch ($_GET["sort"])
{
case "name": $_SESSION["sort"] = "name"; break;
case "Price": $_SESSION["sort"] = "Price"; break;
default: $_SESSION["sort_order"] = CONF_SORT_PRODUCT; break;
}
switch ($_GET["order"])
{
case "asc": $_SESSION["order"] = "asc"; break;
case "desc": $_SESSION["order"] = "desc"; break;
default: $_SESSION["order"] = CONF_SORT_PRODUCT_BY; break;
}
}
else
{
if (!isset($_SESSION["sort"])) $_SESSION["sort"] = CONF_SORT_PRODUCT;
if (!isset($_SESSION["order"])) $_SESSION["order"] = CONF_SORT_PRODUCT_BY;
}
$smarty -> assign("sort", $_SESSION["sort"]);
$smarty -> assign("order", $_SESSION["order"]);
//echo $_SESSION["sort_order"];
2. Вносим изменения в файл category.tpl.html перед выражением
{if $products_to_show_count ne NULL}.
{* sort odrer *}
<div style="text-align: right;">
cортировать по:
<select name="orderby" onchange="location=this.value">
<option value="index.php?categoryID={$selected_category[0]}&sort=name&order=asc" {if $sort == "name" && $order == "asc"}selected{/if}>{$smarty.const.ADMIN_SORT_BY_NAME_ASC}</option>
<option value="index.php?categoryID={$selected_category[0]}&sort=name&order=desc" {if $sort == "name" && $order == "desc"}selected{/if}>{$smarty.const.ADMIN_SORT_BY_NAME_DESC}</option>
<option value="index.php?categoryID={$selected_category[0]}&sort=Price&order=asc" {if $sort == "Price" && $order == "asc"}selected{/if}>{$smarty.const.ADMIN_SORT_BY_PRICE_ASC}</option>
<option value="index.php?categoryID={$selected_category[0]}&sort=Price&order=desc" {if $sort == "Price" && $order == "desc"}selected{/if}>{$smarty.const.ADMIN_SORT_BY_PRICE_DESC}</option>
<option value="index.php?categoryID={$selected_category[0]}&sort=customers_rating&order=desc" {if $sort == "customers_rating"}selected{/if}>{$smarty.const.ADMIN_SORT_BY_RATING}</option>
<option value="index.php?categoryID={$selected_category[0]}&sort=in_stock&order=desc" {if $sort == "in_stock"}selected{/if}>{$smarty.const.ADMIN_SORT_BY_IN_STOCK}</option>
<option value="index.php?categoryID={$selected_category[0]}&sort=product_code" {if $sort == "product_code"}selected{/if}>{$smarty.const.ADMIN_SORT_BY_CODE}</option>
</select>
</div>
{* eof sort order *}
3. Вносим изменения в файл, где хранятся русифицированные константы russian.php. Объявляем блок констант для сортировки
//sort order
define('ADMIN_SORT', 'Параметры сортировки');
define('ADMIN_SORT_PRODUCT', 'Сортировать по');
define('ADMIN_SORT_BY_PRICE', 'цене');
define('ADMIN_SORT_BY_NAME', 'названию');
define('ADMIN_SORT_BY_PRICE_DESC', 'цене, сначала дорогие');
define('ADMIN_SORT_BY_PRICE_ASC', 'цене, сначала недорогие');
define('ADMIN_SORT_BY_NAME_ASC', 'названию');
define('ADMIN_SORT_BY_NAME_DESC', 'названию в обратном порядке');
4. Меняем логику запроса к базе данных в файле category.php
Строку
$q = db_query("SELECT productID FROM ".PRODUCTS_TABLE." WHERE categoryID='$categoryID' AND enabled=1 ORDER BY name") or die (db_error());
Заменяем на
$q = db_query("SELECT productID FROM ".PRODUCTS_TABLE." WHERE categoryID='$categoryID' AND enabled=1 ORDER BY ".$_SESSION["sort"]." ".$_SESSION["order"]) or die (db_error());
Все. Вопрос с сортировкой решен. Посмотреть результат работы можно в Интернет-магазине на этом сайте.
Примечание: Для решения вопроса сортировки очень помогла бесплатная сборка Shop-Script Free с расширенными возможностями и функционалом Shop-Script "Lego Edition". За что большое спасибо автору.