на вывод вариантов отдельными строками с ценой. Дефолтовый вариант не выводится.
Заведомо предполагается, что дефолтовый вариант не уменьшает и не увеличивает цену товара.
Такое дополнение полезно, например, тогда, когда к товару можно добавить какие-либо работы и удобно было бы их видеть раздельно и с ценой.
Спонсор дополнения: mailomsk
=====================================
1. в файле custord_new_orders.php
1.1 после строки
} else {
вставляем
# BEGIN ExtraCart
# этот код нужен один раз для создания таблицы, затем его можно удалить.
db_query("CREATE TABLE IF NOT EXISTS ".DB_PRFX."order_variants (
orderID INT(11),
itemID INT(11),
price_surplus INT(11),
option_value VARCHAR(255)
) ENGINE=MYISAM") or die(mysql_error());
# END ExtraCart
1.2 заходим в админку в справочник заказов. Код из 1.1 отработает (создаст таблицу) и его можно убрать.
2. в файле custord_new_orders.tpl.html
вместо строк
<td align="right" class="toph3">{$orderContent[i].PriceOne}</td>
<td align="right" class="toph3">{$orderContent[i].PriceToShow}</td>
</tr><tr><td colspan="4" class="separ"><img src="data/admin/pixel.gif" alt="" class="sep"></td></tr>
вставляем
{* BEGIN ExtraCart *}
{*
<td align="right" class="toph3">{$orderContent[i].PriceOne}</td>
<td align="right" class="toph3">{$orderContent[i].PriceToShow}</td>
</tr><tr><td colspan="4" class="separ"><img src="data/admin/pixel.gif" alt="" class="sep"></td></tr>
*}
<td align="right" class="toph3">{$orderContent[i].PriceOneVar}</td>
<td align="right" class="toph3">{$orderContent[i].PriceToShowVar}</td>
</tr>
{foreach from=$orderContent[i].addons item=variant}
<tr class="liney">
<td align="left" colspan="3"> {$variant.option_value}</td>
<td align="right" class="toph3">{$variant.price_surplus}</td>
</tr>
{/foreach}
<tr><td colspan="4" class="separ"><img src="data/admin/pixel.gif" alt="" class="sep"></td></tr>
{* END ExtraCart *}
3. в файле cart.php
перед строкой
$variants[] = $val;
вставляем
# BEGIN ExtraCart
if(!db_fetch_assoc(db_query("SELECT optionID FROM ".PRODUCT_OPTIONS_VALUES_TABLE." WHERE productID=".$_GET["addproduct"]." AND variantID=$val")))
# END ExtraCart
4. в файле cart_functions.php
4.1 в функции cartMoveContentFromShoppingCartsToOrderedCarts
вместо строк
$options = GetStrOptions( $variants );
if ( $options != "" )
$productComplexName = $product["name"]."(".$options.")";
else
вставляем
# BEGIN ExtraCart
/*
$options = GetStrOptions( $variants );
if ( $options != "" )
$productComplexName = $product["name"]."(".$options.")";
else
*/
foreach ($variants as $variant)
if ($row = db_fetch_assoc(db_query("SELECT price_surplus, option_value, name FROM ".PRODUCTS_OPTIONS_SET_TABLE." AS pos JOIN ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." AS povv USING (variantID) JOIN ".PRODUCT_OPTIONS_TABLE." AS po ON po.optionID=pos.optionID WHERE productID=$productID AND variantID=$variant")))
db_query("INSERT INTO ".DB_PRFX."order_variants SET orderID=".(int)$orderID.",itemID=".(int)$item['itemID'].",price_surplus=".$row['price_surplus']*$item['Quantity'].",option_value='".$row['name'].": ".$row['option_value']."'");
# END ExtraCart
4.2 в функции cartGetCartContent
после строк
$costUC = GetPriceProductWithOption( $variants,
$shopping_cart_item["productID"] );
вставляем
# BEGIN ExtraCart
$addons = array();
foreach ($variants as $variant)
{
if ($row = db_fetch_assoc(db_query("SELECT price_surplus, option_value, name FROM ".PRODUCTS_OPTIONS_SET_TABLE." AS pos JOIN ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." AS povv USING (variantID) JOIN ".PRODUCT_OPTIONS_TABLE." AS po ON po.optionID=pos.optionID WHERE productID=".(int)$shopping_cart_item["productID"]." AND variantID=$variant")))
$addons[] = array("name" => $row["name"],"option_value" => $row["option_value"],"price_surplus" => show_price($row["price_surplus"] * $cart_item["Quantity"]));
}
# END ExtraCart
перед строкой
"productID" => $product["productID"],
вставляем
# BEGIN ExtraCart
"addons" => $addons,
"costmin" => show_price($cart_item["Quantity"]*$product["Price"]),
# END ExtraCart
строки
$strOptions=GetStrOptions(
GetConfigurationByItemId( $tmp["id"] ));
if ( trim($strOptions) != "" )
$tmp["name"].=" (".$strOptions.")";
заменяем на (комментируем)
# BEGIN ExtraCart
/*
$strOptions=GetStrOptions(
GetConfigurationByItemId( $tmp["id"] ));
if ( trim($strOptions) != "" )
$tmp["name"].=" (".$strOptions.")";
*/
# END ExtraCart
после строк
$costUC = GetPriceProductWithOption(
$_SESSION["configurations"][$j],
$_SESSION["gids"][$j])/* * $_SESSION["counts"][$j]*/;
вставляем
# BEGIN ExtraCart
$addons = array();
foreach ($_SESSION["configurations"][$j] as $variant)
if ($row = db_fetch_assoc(db_query("SELECT price_surplus, option_value, name FROM ".PRODUCTS_OPTIONS_SET_TABLE." AS pos JOIN ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." AS povv USING (variantID) JOIN ".PRODUCT_OPTIONS_TABLE." AS po ON po.optionID=pos.optionID WHERE productID=".(int)$_SESSION["gids"][$j]." AND variantID=$variant")))
$addons[] = array("name" => $row["name"],"option_value" => $row["option_value"],"price_surplus" => show_price($row["price_surplus"] * $_SESSION["counts"][$j]));
# END ExtraCart
перед строкой
"productID" => $_SESSION["gids"][$j],
вставляем
# BEGIN ExtraCart
"addons" => $addons,
"costmin" => show_price($_SESSION["counts"][$j]*$r["Price"]),
# END ExtraCart
строки
$strOptions=GetStrOptions( $_SESSION["configurations"][$j] );
if ( trim($strOptions) != "" )
$tmp["name"].=" (".$strOptions.")";
заменяем на (комментируем)
# BEGIN ExtraCart
/*
$strOptions=GetStrOptions( $_SESSION["configurations"][$j] );
if ( trim($strOptions) != "" )
$tmp["name"].=" (".$strOptions.")";
*/
# END ExtraCart
5. в файле order_functions.php
5.1 в функции _moveSessionCartContentToOrderedCart
вместо строк
$options = GetStrOptions( $variants );
if ( $options != "" )
$productComplexName = $product["name"]."(".$options.")";
else
вставляем
# BEGIN ExtraCart
/*
$options = GetStrOptions( $variants );
if ( $options != "" )
$productComplexName = $product["name"]."(".$options.")";
else
*/
foreach ($variants as $variant)
if ($row = db_fetch_assoc(db_query("SELECT price_surplus, option_value, name FROM ".PRODUCTS_OPTIONS_SET_TABLE." AS pos JOIN ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." AS povv USING (variantID) JOIN ".PRODUCT_OPTIONS_TABLE." AS po ON po.optionID=pos.optionID WHERE productID=$productID AND variantID=$variant")))
db_query("INSERT INTO ".DB_PRFX."order_variants SET orderID=".(int)$orderID.",itemID=".(int)$itemID.",price_surplus=".$row['price_surplus']*$quantity.",option_value='".$row['name'].": ".$row['option_value']."'");
# END ExtraCart
5.2 в функции ordGetOrderContent
после строки
$product = GetProduct( $productID );
вставляем
#BEGIN ExtraCart
$price = $row["Price"];
$vars = db_query("SELECT option_value, price_surplus FROM ".DB_PRFX."order_variants WHERE OrderID=$orderID AND itemID=".$row["itemID"]);
while ($row_add = db_fetch_assoc($vars))
{
$price -= $row_add['price_surplus']/$row["Quantity"];
$row['addons'][]=array("option_value" => $row_add['option_value'],"price_surplus" => _formatPrice(roundf($currency_value*$row_add['price_surplus']),$currency_round)." ".$currency_code);
}
$row["PriceToShowVar"] = _formatPrice(roundf($currency_value*$price*$row["Quantity"]),$currency_round)." ".$currency_code;
$row["PriceOneVar"] = _formatPrice(roundf($currency_value*$price),$currency_round)." ".$currency_code;
#END ExtraCart
5.3 в функции ordDeleteOrder
после строки
db_query( "delete from ".ORDER_STATUS_CHANGE_LOG_TABLE." where orderID=".(int)$orderID);
вставляем
#BEGIN ExtraCart
db_query("DELETE FROM ".DB_PRFX."order_variants WHERE OrderID=$orderID");
#END ExtraCart
6. в файле shopping_cart.tpl.html
вместо строки
<td class="padt" align="center" valign="middle" nowrap="nowrap">{$cart_content[i].cost}</td>
вставляем
{* BEGIN ExtraCart *}
{*<td class="padt" align="center" valign="middle" nowrap="nowrap">{$cart_content[i].cost}</td>*}
<td class="padt" align="center" valign="middle" nowrap="nowrap">{$cart_content[i].costmin}</td>
{* END ExtraCart *}
перед строками
{/section}
{if $discount_prompt != 0}
вставляем
{* BEGIN ExtraCart *}
{foreach from=$cart_content[i].addons item=variant}
<tr>
<td class="padt" align="left" valign="middle" colspan="{if $smarty.const.CONF_DISPLAY_PRCODE EQ 1}3{else}2{/if}"> {$variant.name}:{$variant.option_value}</td>
<td class="padt" align="center" valign="middle" nowrap="nowrap">{$variant.price_surplus}</td>
<td></td>
</tr>
{/foreach}
{* END ExtraCart *}
7. в файле order4_confirmation.tpl.html
вместо строк
<td class="padt" align="center" valign="middle" style="white-space: nowrap">{$orderSum.sumOrderContent[i].cost}</td>
</tr>
вставляем
{* BEGIN ExtraCart *}
{*
<td class="padt" align="center" valign="middle" style="white-space: nowrap">{$orderSum.sumOrderContent[i].cost}</td>
</tr>
*}
<td class="padt" align="center" valign="middle" style="white-space: nowrap">{$orderSum.sumOrderContent[i].costmin}</td>
</tr>
{foreach from=$orderSum.sumOrderContent[i].addons item=variant}
<tr>
<td class="padt" align="left" valign="middle" colspan="2"> {$variant.name}:{$variant.option_value}</td>
<td class="padt" align="center" valign="middle" nowrap="nowrap">{$variant.price_surplus}</td>
</tr>
{/foreach}
{* END ExtraCart *}
8. в файле order4_confirmation_quick.tpl.html
вместо строк
<td class="padt" align="center" valign="middle" style="white-space: nowrap">{$orderSum.sumOrderContent[i].cost}</td>
</tr>
вставляем
{* BEGIN ExtraCart *}
{*
<td class="padt" align="center" valign="middle" style="white-space: nowrap">{$orderSum.sumOrderContent[i].cost}</td>
</tr>
*}
<td class="padt" align="center" valign="middle" style="white-space: nowrap">{$orderSum.sumOrderContent[i].costmin}</td>
</tr>
{foreach from=$orderSum.sumOrderContent[i].addons item=variant}
<tr>
<td class="padt" align="left" valign="middle" colspan="2"> {$variant.name}:{$variant.option_value}</td>
<td class="padt" align="center" valign="middle" nowrap="nowrap">{$variant.price_surplus}</td>
</tr>
{/foreach}
{* END ExtraCart *}