Под заказ
#21
Отправлено 19 February 2012 - 03:30 PM
В виду усиленного копания со временем косяки (( но при такой схеме мы можем оформлять заказы при кнопке "Заказ " данное решение может немного неудачное , но цель была - слежение за складом и визуализация товаров на заказ ... пробовал обращаться к кодерам - они за данный модуль хотят от 4500 - и выше.....
#22
Отправлено 19 February 2012 - 05:21 PM
в моем решении слежение за складом работает, а те товары, количество которых <=0 после оформления их кол-во уменьшается,например:цель была - слежение за складом и визуализация товаров на заказ ...
веники 0 шт. -> заказали 5 шт, кол-во на складе стало -5, т.е. для клиентов оно остается под заказ. Когда приходуем 10 веников, меняем в админке кол-во с -5 на 10 и все а пррцесс оформления заказа проходит абсолютно идентично как для товаров, кол-во которых >0
#23
Отправлено 19 February 2012 - 09:54 PM
#24
Отправлено 20 February 2012 - 12:19 PM
[HIDE-POSTS=50]
core/functions/cart_functions.php
//check for current item in the current shopping cart content
$item_index=SearchConfigurationInSessionVariable( $variants, $productID );
if ( $item_index == -1 )
$count_to_order = $min_order_amount;
if ( $item_index!=-1 ) //increase current product's quantity
{
//////////////// -1 CART EDIT ////////////////
if (CONF_CHECKSTOCK==0 || $_SESSION["counts"][$item_index]+$count_to_order <= $is)
$_SESSION["counts"][$item_index] += $count_to_order;
// else return false;
else $_SESSION["counts"][$item_index] += $count_to_order;
//////////////// END -1 CART EDIT ////////////////
}
else if (CONF_CHECKSTOCK==0 || $is >= $count_to_order) //no item - add it to $gids array
{
$_SESSION["gids"][] = $productID;
$_SESSION["counts"][] = $count_to_order;
$_SESSION["configurations"][]=$variants;
}
//////////////// -1 CART EDIT ////////////////
// else return false;
else
{
$_SESSION["gids"][] = $productID;
$_SESSION["counts"][] = $count_to_order;
$_SESSION["configurations"][]=$variants;
}
//////////////// END -1 CART EDIT ////////////////
}
else //authorized customer - get cart from database
{
$itemID=SearchConfigurationInDataBase($variants, $productID );
if ( $itemID !=-1 ) // if this configuration exists in database
{
$q = db_query("select Quantity FROM ".SHOPPING_CARTS_TABLE.
" WHERE customerID=".(int)regGetIdByLogin($_SESSION["log"])." AND itemID=".(int)$itemID);
$row = db_fetch_row($q);
$quantity = $row[0];
if (CONF_CHECKSTOCK==0 || $quantity + $count_to_order <= $is)
db_query("UPDATE ".SHOPPING_CARTS_TABLE.
" SET Quantity=".(int)($row[0]+$count_to_order).
" WHERE customerID=".(int)regGetIdByLogin($_SESSION["log"]).
" AND itemID=".(int)$itemID);
else
//////////////// -1 CART EDIT ////////////////
// else return false;
db_query("UPDATE ".SHOPPING_CARTS_TABLE.
" SET Quantity=".(int)($row[0]+$count_to_order).
" WHERE customerID=".(int)regGetIdByLogin($_SESSION["log"]).
" AND itemID=".(int)$itemID);
//////////////// END -1 CART EDIT ////////////////
}
else //insert new item
{
$count_to_order = $min_order_amount;
if (CONF_CHECKSTOCK==0 || $is >= $count_to_order)
{
$itemID=InsertNewItem($variants, $productID );
InsertItemIntoCart($itemID);
db_query("UPDATE ".SHOPPING_CARTS_TABLE.
" SET Quantity=".(int)$count_to_order.
" WHERE customerID=".(int)regGetIdByLogin($_SESSION["log"]).
" AND itemID=".(int)$itemID);
}
//////////////// -1 CART EDIT ////////////////
// else return false;
else
{
$itemID=InsertNewItem($variants, $productID );
InsertItemIntoCart($itemID);
db_query("UPDATE ".SHOPPING_CARTS_TABLE.
" SET Quantity=".(int)$count_to_order.
" WHERE customerID=".(int)regGetIdByLogin($_SESSION["log"]).
" AND itemID=".(int)$itemID);
}
//////////////// END -1 CART EDIT ////////////////
core/includes/shopping_cart.php
if (isset($_POST["update"])) //update shopping cart content
{
foreach ($_POST as $key => $val)
{
if (strstr($key, "count_"))
{
if (isset($_SESSION["log"])) //authorized user
{
$productID = GetProductIdByItemId( str_replace("count_","",$key) );
$is=GetProductInStockCount( $productID );
if ($val > 0) //$val is a new items count in the shopping cart
{
//////////////// -1 CART EDIT //////////////// if (CONF_CHECKSTOCK==1) $val = min($val, $is); //check stock level
$q = db_query("UPDATE ".SHOPPING_CARTS_TABLE.
" SET Quantity=".$val.
// " SET Quantity=".floor($val).
" WHERE customerID=".
regGetIdByLogin($_SESSION["log"]).
" AND itemID=".
(int)str_replace("count_","",$key));
}
else //$val<=0 => delete item from cart
$q = db_query("DELETE FROM ".SHOPPING_CARTS_TABLE." WHERE customerID=".regGetIdByLogin($_SESSION["log"])." AND itemID=".(int)str_replace("count_","",$key));
}
else //session vars
{
$res=DeCodeItemInClient( str_replace("count_","", $key) );
$is=GetProductInStockCount( $res["productID"] );
if ($val > 0)
{
$i=SearchConfigurationInSessionVariable($res["variants"], $res["productID"] );
//check stock level
//////////////// -1 CART EDIT //////////////// if (CONF_CHECKSTOCK==1) $val = min($val, $is);
$_SESSION["counts"][$i] = $val;
}
else //remove
{
$i=SearchConfigurationInSessionVariable($res["variants"], $res["productID"] );
$_SESSION["gids"][$i] = 0;
}
}
}
}
Redirect( $cart_reguest."&shopping_cart=yes" );
}
в файле шаблона product_brief.tpl.html и product_detailed.tpl.html меняем строки
{if $smarty.const.CONF_SHOW_ADD2CART eq 1 && ( $smarty.const.CONF_CHECKSTOCK==0 || $product_info.in_stock > 0 ) }на
{if $smarty.const.CONF_SHOW_ADD2CART eq 1}
и вот это
{if $smarty.const.CONF_CHECKSTOCK == '1'}{$smarty.const.IN_STOCK}: <b>{if $product_info.in_stock > 0}<span class="oki">{if $smarty.const.CONF_EXACT_PRODUCT_BALANCE == '1'}{$product_info.in_stock}{else}{$smarty.const.ANSWER_YES}{/if}</span>{else}<span class="error">{if $product_info.in_stock < 0}{$smarty.const.STOCK_TRAIN_GO}{else}{$smarty.const.ANSWER_NO}{/if}</span>{/if}</b>
меняем на вот это
{if $smarty.const.CONF_CHECKSTOCK == '1'}{$smarty.const.IN_STOCK}: <b>{if $product_info.in_stock > 0}<span class="oki">{if $smarty.const.CONF_EXACT_PRODUCT_BALANCE == '1'}{$product_info.in_stock}{else}{$smarty.const.ANSWER_YES}{/if}</span>{else}<span class="error">{if $product_info.in_stock <= 0}{$smarty.const.STOCK_TRAIN_GO}{/if}</span>{/if}</b>
P.S. обращаю внимание - в последнем блоке кода if $product_info.in_stock <= 0, т.к если товара на складе 1 шт, эту 1 шт - купили, и кол-во на складе не установится на "-1" а будет "0"
core/includes/order4_confirmation.php
if ( CONF_CHECKSTOCK ) { $cartContent = cartGetCartContent(); $rediractflag = false; foreach ( $cartContent["cart_content"] as $cartItem ) { // if conventional ordering if ( isset ( $_SESSION["log"] )) { $productID = GetProductIdByItemId($cartItem["id"]); $q = db_query("select name, in_stock FROM ".PRODUCTS_TABLE." WHERE productID=".( int ) $productID); $left = db_fetch_row($q); # if ( $left["in_stock"] < 1 ) { # $rediractflag = true; # db_query("DELETE FROM ".SHOPPING_CARTS_TABLE." WHERE customerID=".regGetIdByLogin($_SESSION["log"])." AND itemID=".( int ) $cartItem["id"]); # db_query("DELETE FROM ".SHOPPING_CART_ITEMS_TABLE." where itemID=".( int ) $cartItem["id"]); # db_query("DELETE FROM ".SHOPPING_CART_ITEMS_CONTENT_TABLE." where itemID=".( int ) $cartItem["id"]); # db_query("DELETE FROM ".ORDERED_CARTS_TABLE." where itemID=".( int ) $cartItem["id"]); # } } else // if quick ordering { $productID = $cartItem["id"]; $q = db_query("select name, in_stock FROM ".PRODUCTS_TABLE." WHERE productID=".( int ) $productID); $left = db_fetch_row($q); # if ( $left["in_stock"] < 1 ) # { # $rediractflag = true; # $res = DeCodeItemInClient($productID); # $i = SearchConfigurationInSessionVariable($res["variants"], $res["productID"]); # if ( $i != - 1 ) # $_SESSION["gids"][$i] = 0; # } } } # if ( $rediractflag ) Redirect("index.php?product_removed=yes"); }
core/includes/order4_confirmation_quick.php
if ( CONF_CHECKSTOCK ) { $cartContent = cartGetCartContent(); $rediractflag = false; foreach ( $cartContent["cart_content"] as $cartItem ) { // if conventional ordering if ( isset ( $_SESSION["log"] )) { $productID = GetProductIdByItemId($cartItem["id"]); $q = db_query("select name, in_stock FROM ".PRODUCTS_TABLE." WHERE productID=".( int ) $productID); $left = db_fetch_row($q); # if ( $left["in_stock"] < 1 ) { # $rediractflag = true; # db_query("DELETE FROM ".SHOPPING_CARTS_TABLE." WHERE customerID=".regGetIdByLogin($_SESSION["log"])." AND itemID=".( int ) $cartItem["id"]); # db_query("DELETE FROM ".SHOPPING_CART_ITEMS_TABLE." where itemID=".( int ) $cartItem["id"]); # db_query("DELETE FROM ".SHOPPING_CART_ITEMS_CONTENT_TABLE." where itemID=".( int ) $cartItem["id"]); # db_query("DELETE FROM ".ORDERED_CARTS_TABLE." where itemID=".( int ) $cartItem["id"]); # } } else // if quick ordering { $productID = $cartItem["id"]; $q = db_query("select name, in_stock FROM ".PRODUCTS_TABLE." WHERE productID=".( int ) $productID); $left = db_fetch_row($q); # if ( $left["in_stock"] < 1 ) # { # $rediractflag = true; # $res = DeCodeItemInClient($productID); # $i = SearchConfigurationInSessionVariable($res["variants"], $res["productID"]); # if ( $i != - 1 ) # $_SESSION["gids"][$i] = 0; # } } } # if ( $rediractflag ) Redirect("index.php?product_removed=yes"); }[/HIDE-POSTS]
#25
Отправлено 20 February 2012 - 02:56 PM
У меня не читается скрытый текст, нужно 50 сообщений на форуме, а я совсем еще нуб - 5 месаг*** скрытый текст ***
Скажи прямо, чего хотел, или напиши в личку.
#26
Отправлено 20 February 2012 - 04:14 PM
У меня не читается скрытый текст, нужно 50 сообщений на форуме, а я совсем еще нуб - 5 месаг
Скажи прямо, чего хотел, или напиши в личку.
я выложил решение проблемы, только увидеть его смогут те, у кого уже более 50 сообщений на форуме
#27
Отправлено 20 February 2012 - 06:10 PM
Но, кстати, все равно спасибо
#28
Отправлено 23 February 2012 - 02:36 AM
Эту фразу надо куда-нибудь в скрижали, анналы и прочие буквы на мраморных досках.Понимаю, что любой труд стоит оплаты, но платных готовых решений прошу не предлагать
Как конкретный пример халявщика .
#29
Отправлено 23 February 2012 - 04:37 PM
Я, вообще-то, ни у кого с ножом у горла не прошу о халявном сыре. Написал же дальше, сразу после этой фразы, для пояснения своей позиции:
Мне интересно самому разобраться, откуда там ноги растут и что подправить. Денег свободных сейчас нет, чтобы платить неизвестно кому неизвестно за что (да простят меня присутствующие). Да и вопрос, как я написал, не сильно горит. Было бы очень нужно - искал бы специально кодера и заплатил ему за работу. А коль скоро здесь форум, на котором обсуждают и делятся инфой, то мне интересно получить наводку, чтобы поковыряться в коде. 1С 7.7, к примеру, или мелкомягкий Офис с VB скриптами, когда надо было, ковырял и что мог сам делать - делал. Вопрос лишь необходимости, срочности и банальной лениЕсли кто пояснит, что да как - сам с удовольствием поковыряюсь в коде, чтобы понять как это работает.
Так что, уважаемый, желаете пофлудить - велкам в бложики или твиттер.
#30
Отправлено 23 February 2012 - 08:59 PM
Уважаемый, тут каждый второй такой же как Вы. В том числе и я. Которые запросто все сами сделают, а вопрос задали просто из интереса и лишнего времени .Так что, уважаемый, желаете пофлудить - велкам в бложики или твиттер.
#31
Отправлено 09 May 2015 - 06:25 PM
РЕШЕНИЕ ПРОБЛЕМЫ (движок 3.1.2)
Сначала воспользовался данным решением, в результате чего столкнулся с множеством проблем. Например при пересчете корзины количество добавленного товара становилось отрицательным.
Нашел для себя более элегантное решение. В таблицу БД товаров добавляю дополнительное поле по дефолту равное нулю. Если поле равняется 1, значит товар под заказ. Теперь несложно прописать условие и работать с товарами под заказ как с товарами на складе, но выводить значение поля Наличие вместо "В наличии" - "Ожидание 2-3 дня". Также по условию можно менять текст кнопки: вместо в "В корзину" или "Купить" показывать "Заказать". Статус товара удобно менять с помощью чекбокса в админке в списке товаров в Каталоге.