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


Ввод количества товара в общей таблице для "Учет товаров по доп.характеристикам"


  • Вы не можете ответить в тему
В теме одно сообщение

#1 badisoft

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

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

Отправлено 30 March 2013 - 08:51 PM

Дополнение для модуля "Учет количества товара по дополнительным характеристикам" (http://www.shopkod.r...velopment&id=83)
Позволяет редактировать количество товара повариантно в одной выбранной характеристике не заходя в каждый товар, а в общей таблице товаров. Т.е. так же, как количество товара без установки этого модуля.

Спонсор дополнения - Lagaz

Для характеристики "Размер" (например варианты S,M,L,XL) это выглядит так:
Прикрепленный файл  example.JPG   22.27К   94 Количество загрузок:

В шаблон (обычно это выпадающий список вариантов размера) передаются только те варианты характеристики, которых по складу больше нуля. Т.е. если Товар с размером S закончился, то такого варианта не будет ни в кратком, ни в подробном описании.

Установка:

Админская часть:


1. заходим в админке в "Характеристики товара" и нажимаем (или просто наводим мышку) на "Возможные значения" нужной характеристики.
Увидим ссылку примерно такого вида - ...admin.php?dpt=catalog&sub=extra&optionID=123
записываем-запоминаем число 123, это OptionID нашей характеристики, оно нам пригодится позже.


2. в файле core/tpl/admin/index.tpl.html

перед


<title>{$smarty.const.ADMIN_TITLE}</title>


вставляем загрузку библиотеки JQuery


{* BEGIN CheckInStockToCategoryAdmin *}
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
{* END CheckInStockToCategoryAdmin *}



3. в файле catalog_products_categories.tpl.html

3.1 после строки


<td align="right"><a href='{$urlToSort}&amp;sort=in_stock&amp;sort_dir=ASC' title="{$smarty.const.ADMIN_ADMIN_MENUNEW11}" class="liv">{$smarty.const.ADMIN_PRODUCT_INSTOCK}</a></td>


вставляем


{* BEGIN CheckInStockToCategoryAdmin *}
{if $checked_option}
{foreach from=$checked_option item=checked_variant}
<td align="center" style="color:red">{$checked_variant.option_value}</td>
{/foreach}
{/if}
{* END CheckInStockToCategoryAdmin *}


3.2 вместо строки


<td align="right">{if $products[i].in_stock <= 0}<input type="text" name="left_{$products[i].productID}" value="{$products[i].in_stock}" class="prc prcss{if !$products[i].enabled} gryy{/if}">{else}<input type="text" name="left_{$products[i].productID}" value="{$products[i].in_stock}" class="prc prcss {if !$products[i].enabled}gryy{/if}">{/if}</td>


вставляем


{* BEGIN CheckInStockToCategoryAdmin *}
{*<td align="right">{if $products[i].in_stock <= 0}<input type="text" name="left_{$products[i].productID}" value="{$products[i].in_stock}" class="prc prcss{if !$products[i].enabled} gryy{/if}">{else}<input type="text" name="left_{$products[i].productID}" value="{$products[i].in_stock}" class="prc prcss {if !$products[i].enabled}gryy{/if}">{/if}</td>*}
<td align="right">{if $products[i].in_stock <= 0}<input type="text" id="left_{$products[i].productID}" name="left_{$products[i].productID}" value="{$products[i].in_stock}" class="prc prcss{if !$products[i].enabled} gryy{/if}">{else}<input type="text" id="left_{$products[i].productID}" name="left_{$products[i].productID}" value="{$products[i].in_stock}" class="prc prcss {if !$products[i].enabled}gryy{/if}">{/if}</td>
{foreach from=$products[i].product_extra item=option}
{if $option.optionID == $onum}
{foreach from=$checked_option item=checked_variant}
{assign var="vflag" value=1}
{foreach from=$option.values_to_select item=variant}
{if $checked_variant.variantID == $variant.variantID}
{assign var="vflag" value=0}
<td align="right"><input type="text" onchange="var sum=0;$('input[id^=\'variant_{$products[i].productID}_\']').each(function () {literal}{sum += parseInt( $(this).val(), 10 );}{/literal});$('input[id=\'left_{$products[i].productID}\']').val(sum)" id="variant_{$products[i].productID}_{$variant.variantID}" name="variant_{$products[i].productID}_{$variant.variantID}" value="{$variant.qty}" class="prc prcss{if !$products[i].enabled} gryy{/if}"></td>
{/if}
{/foreach}
{if $vflag}<td>&nbsp;</td>{/if}
{/foreach}
{/if}
{/foreach}
{* END CheckInStockToCategoryAdmin *}



4. в файле catalog_products_categories.php

4.1 перед строкой


function _getUrlToSubmit()


вставляем


# BEGIN CheckInStockToCategoryAdmin
$onum = 789;
# END CheckInStockToCategoryAdmin


Вот тут-то и понадобится записанное-запомненное число 123 (optionID). Вместо 789 вписываем его.

4.2 вторую найденную строку (вторую!)


$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order"


заменяем на


# BEGIN CheckInStockToCategoryAdmin
#$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order"
$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order", "variant"
# END CheckInStockToCategoryAdmin


4.3 перед второй найденной строкой (второй!)


if ( isset($val["price"]) )


вставляем


# BEGIN CheckInStockToCategoryAdmin
if ( isset($val["variant"]) )
{
list($productID,$variantID) = explode("_",$key);
db_query("UPDATE ".PRODUCTS_OPTIONS_SET_TABLE." SET qty = ".(int)$val["variant"]." WHERE productID=$productID AND variantID=$variantID");
$in_stock = db_fetch_row(db_query("SELECT SUM(qty) FROM ".PRODUCTS_OPTIONS_SET_TABLE." WHERE productID=$productID AND optionID=$onum"));
db_query("UPDATE ".PRODUCTS_TABLE." SET in_stock=".$in_stock[0]." WHERE productID=$productID");
}
# END CheckInStockToCategoryAdmin


4.4 перед строкой


$smarty->assign("navigatorHtml", $navigatorHtml );


вместо фигурной скобки } вставляем


# BEGIN CheckInStockToCategoryAdmin
# }
foreach ($products[$i]["product_extra"] as $option)
{
if ($option["optionID"] == $onum)
{
foreach ($option["values_to_select"] as $variant)
{
$opt[$variant['variantID']]['variantID'] = $variant['variantID'];
$opt[$variant['variantID']]['option_value'] = $variant['option_value'];
}
}
}

}

if (isset($opt))
{
$smarty->assign("checked_option", $opt );
$smarty->assign("onum", $onum );
}
# END CheckInStockToCategoryAdmin


Убираем выдачу в шаблон вариантов с нулевым количеством товара на складе:

5. в файле product_functions.php в функции GetExtraParametrs

5.1 перед строкой


ORDER BY povvt.sort_order, povvt.option_value


вставляем строку


'.(strpos($_SERVER['REQUEST_URI'],ADMIN_FILE)?'':' AND (post.optionID!=789 OR post.qty>0)').'


где тоже меняем 789 на наше 123

5.2 перед строкой

$ProductsExtras[$_Row['productID']][] = $_Row;


вставляем


# BEGIN CheckInStockToCategoryAdmin
if ($i>0)
# END CheckInStockToCategoryAdmin


(позже) Хм... а ведь можно реализовать и без вписывания "123" прямиком в код... И для нескольких характеристик сразу, если в одной категории повариантный учет по одной характеристике, а в другой категории по другой. Что ж мне сразу-то это в голову не пришло :(.
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 idal

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

  • Assistent vsupport.club
  • PipPipPip
  • 243 сообщений
Репутация: 7
Начинающий
  • ГородКиев

Отправлено 19 January 2014 - 03:40 PM

Нужна доработка. Надо чтобы через экспорт/импорт можно было заполнять данные по типу {S-10,L-10-40}, где 10 - количество размер данного, 40 - плюс к цене. О деталях пишите в личку или сюда. Спасибо.
  • 0