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);
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) перед этой переменной.
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");
?>
Вот и все – теперь ваши пользователи смогут заказывать в интернет-магазине дробное количество товаров.
Комментарии