Перейти к содержимому


Под заказ


  • Вы не можете ответить в тему
Сообщений в теме: 30

#21 A26

    Новичок

  • Download User
  • Pip
  • 7 сообщений
Репутация: 0
Начинающий

Отправлено 19 February 2012 - 03:30 PM

решение было немного другим изменения в тех же самых файлах , но .... я зациклился на кнопочке >0 и изменил пределы что если на складе >100 то кнопка купить , если от 0 до 100 - кнопка заказ ,, если 0 то недоступен для продажи....... соответственно sql запросом прибавляем ко всем товарам 100 получаем корректный склад , можно добавить обработку вывода количества в админке и магазине ( наприер выводить 2 последних знака)


В виду усиленного копания со временем косяки (( но при такой схеме мы можем оформлять заказы при кнопке "Заказ " данное решение может немного неудачное , но цель была - слежение за складом и визуализация товаров на заказ ... пробовал обращаться к кодерам - они за данный модуль хотят от 4500 - и выше.....
  • 0

#22 dorian

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 107 сообщений
Репутация: 24
Ассистент

Отправлено 19 February 2012 - 05:21 PM

цель была - слежение за складом и визуализация товаров на заказ ...

в моем решении слежение за складом работает, а те товары, количество которых <=0 после оформления их кол-во уменьшается,например:
веники 0 шт. -> заказали 5 шт, кол-во на складе стало -5, т.е. для клиентов оно остается под заказ. Когда приходуем 10 веников, меняем в админке кол-во с -5 на 10 и все :) а пррцесс оформления заказа проходит абсолютно идентично как для товаров, кол-во которых >0
  • 0

#23 SoVA

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 66 сообщений
Репутация: 0
Начинающий
  • ГородКраснодар

Отправлено 19 February 2012 - 09:54 PM

Понимаю, что любой труд стоит оплаты, но платных готовых решений прошу не предлагать. Если кто пояснит, что да как - сам с удовольствием поковыряюсь в коде, чтобы понять как это работает. А так, временное решение прикрутил: все-таки отключил контроль остатков, как по ссылке на форуме shopcms.ru, и организовал вывод в карточке товара 2 надписей, в зависимости от положительного (есть в наличии) или любого другого (под заказ) остатка. Не очень удобно, но пока терпит, вопрос не срочный, а так товарищ у меня готов поковыряться как-нибудь по свободе в коде из спортивного интереса. Если что порешается - я напишу сюда, поделюсь.
  • 0
Make love, not work!

#24 dorian

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 107 сообщений
Репутация: 24
Ассистент

Отправлено 20 February 2012 - 12:19 PM

РЕШЕНИЕ ПРОБЛЕМЫ (движок 3.1.2)

[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]
  • 0

#25 SoVA

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 66 сообщений
Репутация: 0
Начинающий
  • ГородКраснодар

Отправлено 20 February 2012 - 02:56 PM

*** скрытый текст ***

У меня не читается скрытый текст, нужно 50 сообщений на форуме, а я совсем еще нуб - 5 месаг :)
Скажи прямо, чего хотел, или напиши в личку.
  • 0
Make love, not work!

#26 dorian

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 107 сообщений
Репутация: 24
Ассистент

Отправлено 20 February 2012 - 04:14 PM

У меня не читается скрытый текст, нужно 50 сообщений на форуме, а я совсем еще нуб - 5 месаг
Скажи прямо, чего хотел, или напиши в личку.


я выложил решение проблемы, только увидеть его смогут те, у кого уже более 50 сообщений на форуме
  • 0

#27 SoVA

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 66 сообщений
Репутация: 0
Начинающий
  • ГородКраснодар

Отправлено 20 February 2012 - 06:10 PM

dorian, ну что ж, буду зарабатывать очки :)

Но, кстати, все равно спасибо :)
  • 0
Make love, not work!

#28 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 23 February 2012 - 02:36 AM

Понимаю, что любой труд стоит оплаты, но платных готовых решений прошу не предлагать

Эту фразу надо куда-нибудь в скрижали, анналы и прочие буквы на мраморных досках.
Как конкретный пример халявщика :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#29 SoVA

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 66 сообщений
Репутация: 0
Начинающий
  • ГородКраснодар

Отправлено 23 February 2012 - 04:37 PM

badisoft, Ваш пост надо куда-нибудь в анналы истории, как конкретный пример выдергивания части мысли из контекста.
Я, вообще-то, ни у кого с ножом у горла не прошу о халявном сыре. Написал же дальше, сразу после этой фразы, для пояснения своей позиции:

Если кто пояснит, что да как - сам с удовольствием поковыряюсь в коде, чтобы понять как это работает.

Мне интересно самому разобраться, откуда там ноги растут и что подправить. Денег свободных сейчас нет, чтобы платить неизвестно кому неизвестно за что (да простят меня присутствующие). Да и вопрос, как я написал, не сильно горит. Было бы очень нужно - искал бы специально кодера и заплатил ему за работу. А коль скоро здесь форум, на котором обсуждают и делятся инфой, то мне интересно получить наводку, чтобы поковыряться в коде. 1С 7.7, к примеру, или мелкомягкий Офис с VB скриптами, когда надо было, ковырял и что мог сам делать - делал. Вопрос лишь необходимости, срочности и банальной лени :)

Так что, уважаемый, желаете пофлудить - велкам в бложики или твиттер.
  • 0
Make love, not work!

#30 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 23 February 2012 - 08:59 PM

Так что, уважаемый, желаете пофлудить - велкам в бложики или твиттер.

Уважаемый, тут каждый второй такой же как Вы. В том числе и я. Которые запросто все сами сделают, а вопрос задали просто из интереса и лишнего времени :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#31 makki

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 148 сообщений
Репутация: 7
Начинающий

Отправлено 09 May 2015 - 06:25 PM

РЕШЕНИЕ ПРОБЛЕМЫ (движок 3.1.2)


Сначала воспользовался данным решением, в результате чего столкнулся с множеством проблем. Например при пересчете корзины количество добавленного товара становилось отрицательным.

Нашел для себя более элегантное решение. В таблицу БД товаров добавляю дополнительное поле по дефолту равное нулю. Если поле равняется 1, значит товар под заказ. Теперь несложно прописать условие и работать с товарами под заказ как с товарами на складе, но выводить значение поля Наличие вместо "В наличии" - "Ожидание 2-3 дня". Также по условию можно менять текст кнопки: вместо в "В корзину" или "Купить" показывать "Заказать". Статус товара удобно менять с помощью чекбокса в админке в списке товаров в Каталоге.
  • 0