Сортировка товаров для интернет-магазинов, сконструированных на основе Shop-Script FREE

подслушано в Аннинском районе:
«Продимекс» выкупил земельные активы «Талекса» в Аннинском и Панинском районах
У большинства "движков" линейки FREE функционал весьма ограничен. Можно было бы закрыть на многое глаза (если магазин небольшой), но только не на отсутствие сортировки товара посетителем магазина в режиме онлайн. Жестко задать вариант сортировки, например, по цене,  не представляет особого труда. Достаточно заменить в файле category.php (папка includes) строку запроса к базе данных

$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ортировать по:&nbsp;&nbsp;

              <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());

Все. Вопрос с сортировкой решен. Посмотреть результат работы можно в Интернет-магазине на этом сайте.

подслушано в поселке Анна:
Численность крупного рогатого скота в Аннинском районе составляет более 18 тысяч голов
Примечание: Для решения вопроса сортировки очень помогла бесплатная сборка Shop-Script Free с расширенными возможностями и функционалом Shop-Script "Lego Edition". За что большое спасибо автору.

все материалы текущего раздела