вторник, 17 февраля 2009 г.

ShopCMS: реализуем возможность добавления в карзину дробного числа товаров

Движок магазина ShopCMS к сожалению предусматривает добавление в карзину только целого количества товаров. Иногда же возникает ситуация когда нужно позволить пользователю заказать, к примеру, 1.5 мешка сахора. При помощи небольших манипуляций с php кодом Shop CMS можно исправить ситуацию.

1. В корне движка находим файл cart.php. Ищем переменную $_GET["multyaddcount"] и везде где она встречается стираем перед ней конструкцию (int).

2. В этом же файле находим строку 
for ($mcn=0; $mcn<$_GET["multyaddcount"]; $mcn++) cartAddToCart((int)$_GET["addproduct"], $variants); заменяем ее на $mac=str_replace(",",".",$_GET["multyaddcount"]);  cartAddToCart((int)$_GET["addproduct"], $variants, $mac);

здесь заодно позволим пользователю ввести , вместо .

3. Открываем файл /functions/cart_functions.php

Находим заголовок функции
 function cartAddToCart( $productID, $variants )
и меняем его на
function cartAddToCart( $productID, $variants,$count_to_order)
далее в теле этой функции комментируем все места, где переменной $count_to_order присваевается значение, а так же стираем все конструкции (int) перед этой переменной.

4. Далее открываем файл /design/user/default/ shopping_cart.tpl
Находим в нем заголовок формы formppl. Обработчик формы ведет на файл index.php, но он закодирован зендом. Поэтому напишем свой обработчик. Меняем заголовок формы на

<form action="/update_cart.php?shopping_cart=yes" method=get name="formppl" id="formppl">

5. Теперь осталось написать сам обработчик update_cart.php и поместить его в корень сайта. Привожу его примерный текст:
<?
include ("config/connect.inc.php");
include ("includes/database/mysql.php");
include ("config/language_list.php");
include ("functions/functions.php");
include ("functions/session_functions.php");
MagicQuotesRuntimeSetting();


db_connect(DB_HOST, DB_USER, DB_PASS) or die(db_error());
db_select_db(DB_NAME) or die(db_error());

settingDefineConstants();

define("SECURITY_EXPIRE", 60 * 60 * CONF_SECURITY_EXPIRE);
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
session_set_cookie_params(SECURITY_EXPIRE);
session_start();

$qmin="select min(itemID) as m1 from pnte_shopping_carts";
$m1r=mysql_query($qmin);
$min=mysql_result($m1r,0);

$qmax="select max(itemID) as m2 from pnte_shopping_carts";
$m2r=mysql_query($qmax);
$max=mysql_result($m2r,0);

for ($i=$min; $i<=$max; $i++)
{
$nm="count_$i";
if ($_GET[$nm]){
$gnm=str_replace(",",".",$_GET[$nm]);

if ((int)regGetIdByLogin($_SESSION["log"])){
$query="update pnte_shopping_carts set Quantity=".$gnm." where itemID=$i and customerID=".(int)regGetIdByLogin($_SESSION["log"]);
print $query."<br>";
$result = mysql_query($query);
}
else{

for ($j = 0; $j < count($_SESSION["gids"]); $j++)
{
if ($_SESSION["gids"][$j]==$i)
{

$_SESSION["counts"][$j]=$gnm;

}
}
}
}
}
header ("Location: /cart.html");
?> 

Вот и все – теперь ваши пользователи смогут заказывать в интернет-магазине дробное количество товаров.


Комментариев нет: