Позволяет редактировать количество товара повариантно в одной выбранной характеристике не заходя в каждый товар, а в общей таблице товаров. Т.е. так же, как количество товара без установки этого модуля.
Спонсор дополнения - 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}&sort=in_stock&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> </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" прямиком в код... И для нескольких характеристик сразу, если в одной категории повариантный учет по одной характеристике, а в другой категории по другой. Что ж мне сразу-то это в голову не пришло .