Ну и сортировать по этому критерию, как же без этого. Хотя и примитивненько, без красоты и изыска .
Cпонсор дополнения: wwwsasa2, автор картинок (и спонсор предыдущего похожего дополнения) poloskun
Установка:
----------
1. файлы *.png копируем в каталог /data/[шаблон]/
Файлы весьма условные. Тестовые. Для красоты создайте свои. Лишь бы они были 46х62px, либо надо поправить соответствующие width и height в коде.
3. в файле catalog_products_categories.php
3.1 перед строкой
$callBackParam = array();
вставляем
# BEGIN New-Top-Action-products
if (!db_fetch_row(db_query("SHOW COLUMNS FROM ".PRODUCTS_TABLE." LIKE 'newtopact'"))) db_query("ALTER TABLE ".PRODUCTS_TABLE." ADD newtopact tinyint(1) DEFAULT 0");
# END New-Top-Action-products
3.2 вместо строк
//save changes in current category
$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order" ) );
вставляем
//save changes in current category
# BEGIN New-Top-Action-products
#$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order" ) );
$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order", "newtopact" ) );
# END New-Top-Action-products
3.3 перед ВТОРОЙ (!) найденной строкой
if ( isset($val["enable"]) )
вставляем
# BEGIN New-Top-Action-products
if ( isset($val["newtopact"]) ) db_query( "update ".PRODUCTS_TABLE." set newtopact=".(int)$val["newtopact"]." WHERE productID=".(int)$key );
# END New-Top-Action-products
4. в файле category.php
перед строкой
$smarty->assign( "categoryID", $categoryID);
вставляем
# BEGIN New-Top-Action-products
$smarty->assign( "pictures", array("","new.png","top.png","action.png","discount.png"));
# END New-Top-Action-products
5. в файле product_detailed.php
перед строкой
$smarty->assign("main_content_template", "product_detailed.tpl.html");
вставляем
# BEGIN New-Top-Action-products
$smarty->assign( "pictures", array("","new.png","top.png","action.png","discount.png"));
# END New-Top-Action-products
6. в файле product_functions.php
6.2 в функции prdSearchProductByTemplateAdmin
6.2.1 после строк
$order_by_clause = " order by ".xEscSQL($callBackParam["sort"])." DESC ";
}
вставляем
# BEGIN New-Top-Action-products
elseif ($callBackParam["sort"] == "newtopact") $order_by_clause = " ORDER BY newtopact DESC, sort_order";
# END New-Top-Action-products
6.2.2 вместо строки
" customers_rating, Price, in_stock, ".
вставляем
# BEGIN New-Top-Action-products
#" customers_rating, Price, in_stock, ".
" customers_rating, Price, in_stock, newtopact, ".
# END New-Top-Action-products
6.3 в функции prdSearchProductByTemplate
6.3.1 после строк
$order_by_clause = " order by ".xEscSQL($callBackParam["sort"])." DESC ";
}
вставляем
# BEGIN New-Top-Action-products
elseif ($callBackParam["sort"] == "new") $order_by_clause = " ORDER BY newtopact=1 DESC, sort_order";
elseif ($callBackParam["sort"] == "top") $order_by_clause = " ORDER BY newtopact=2 DESC, sort_order";
elseif ($callBackParam["sort"] == "act") $order_by_clause = " ORDER BY newtopact=3 DESC, sort_order";
elseif ($callBackParam["sort"] == "dis") $order_by_clause = " ORDER BY newtopact=4 DESC, sort_order";
# END New-Top-Action-products
6.3.2 вместо строки
" customers_rating, Price, in_stock, ".
вставляем
# BEGIN New-Top-Action-products
#" customers_rating, Price, in_stock, ".
" customers_rating, Price, in_stock, newtopact, ".
# END New-Top-Action-products
7. в файле catalog_products_categories.tpl.html
7.1 после строки
<td align="center"><a href='{$urlToSort}&sort=viewed_times&sort_dir=DESC' title="{$smarty.const.ADMIN_ADMIN_MENUNEW10}" class="liv">VT</a></td>
вставляем
{* BEGIN New-Top-Action-products *}
<td align="center"><a href='{$urlToSort}&sort=newtopact' title="Сортировка по Акция/Топ/Новинка/Скидка" class="liv">Доп.Картинка</a></td>
{* END New-Top-Action-products *}
7.2 после строки
<td align="center" {if !$products[i].enabled}class="toph3 gryy"{else}class="toph3"{/if}>{$products[i].viewed_times}</td>
вставляем
{* BEGIN New-Top-Action-products *}
<td align="center">
<select name="newtopact_{$products[i].productID}">
<option value="0"{if $products[i].newtopact==0} selected{/if}>---</option>
<option value="1"{if $products[i].newtopact==1} selected{/if}>Новинка</option>
<option value="2"{if $products[i].newtopact==2} selected{/if}>Топ продаж</option>
<option value="3"{if $products[i].newtopact==3} selected{/if}>Акция</option>
<option value="4"{if $products[i].newtopact==4} selected{/if}>Скидка</option>
</select>
</td>
{* END New-Top-Action-products *}
8. в файле category.tpl.html
вместо строк (таких строк обычно две, в начале страницы и в конце)
<td class="cattop" align="center">{$string_product_sort}</td>
вставляем
{* BEGIN New-Top-Action-products *}
{*<td class="cattop" align="center">{$string_product_sort}</td>*}
<td class="cattop" align="center">{$string_product_sort}
<a href="index.php?categoryID={$categoryID}&sort=new">(Новинки)</a>
<a href="index.php?categoryID={$categoryID}&sort=top">(Топ продаж)</a>
<a href="index.php?categoryID={$categoryID}&sort=act">(Акции)</a>
<a href="index.php?categoryID={$categoryID}&sort=dis">(Скидки)</a>
</td>
{* END New-Top-Action-products *}
9. в файле product_brief.tpl.html
вместо строки (в случае картинки справа)
<td class="imboxr"><a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$product_info.productID}.html{else}index.php?productID={$product_info.productID}{/if}"><img src="data/small/{$product_info.picture}" alt="{$product_info.name}"></a></td>
вставляем
{* BEGIN New-Top-Action-products *}
{*<td class="imboxr"><a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$product_info.productID}.html{else}index.php?productID={$product_info.productID}{/if}"><img src="data/small/{$product_info.picture}" alt="{$product_info.name}"></a></td>*}
<td class="imboxr">
{if $product_info.newtopact > 0}
<div style="position: relative;">
<div style="position: absolute; z-index: 1; top: 0px; left: 0px; background:url('data/{$smarty.const.TPL}/{$pictures[$product_info.newtopact]}'); height: 62px; width: 46px;">
<a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$product_info.productID}.html{else}index.php?productID={$product_info.productID}{/if}">
<img src="data/{$smarty.const.TPL}/pixel.gif" width="46" height="62">
</a>
</div>
<a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$product_info.productID}.html{else}index.php?productID={$product_info.productID}{/if}">
<img src="data/small/{$product_info.picture}" alt="{$product_info.name}">
</a>
</div>
{else}
<a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$product_info.productID}.html{else}index.php?productID={$product_info.productID}{/if}">
<img src="data/small/{$product_info.picture}" alt="{$product_info.name}">
</a>
{/if}
</td>
{* END New-Top-Action-products *}
вместо строки (в случае картинки слева)
<td class="imboxl"><a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$product_info.productID}.html{else}index.php?productID={$product_info.productID}{/if}"><img src="data/small/{$product_info.picture}" alt="{$product_info.name}"></a></td>
вставляем
{* BEGIN New-Top-Action-products *}
{*<td class="imboxl"><a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$product_info.productID}.html{else}index.php?productID={$product_info.productID}{/if}"><img src="data/small/{$product_info.picture}" alt="{$product_info.name}"></a></td>*}
<td class="imboxl">
{if $product_info.newtopact > 0}
<div style="position: relative;">
<div style="position: absolute; z-index: 1; top: 0px; left: 0px; background:url('data/{$smarty.const.TPL}/{$pictures[$product_info.newtopact]}'); height: 62px; width: 46px;">
<a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$product_info.productID}.html{else}index.php?productID={$product_info.productID}{/if}">
<img src="data/{$smarty.const.TPL}/pixel.gif" width="46" height="62">
</a>
</div>
<a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$product_info.productID}.html{else}index.php?productID={$product_info.productID}{/if}">
<img src="data/small/{$product_info.picture}" alt="{$product_info.name}">
</a>
</div>
{else}
<a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$product_info.productID}.html{else}index.php?productID={$product_info.productID}{/if}">
<img src="data/small/{$product_info.picture}" alt="{$product_info.name}">
</a>
{/if}
</td>
{* END New-Top-Action-products *}
10. в файле product_detailed.tpl.html
10.1 после строки
hs.lang.fullExpandTitle = '{$smarty.const.STRING_HS_FULLEXPANDTITLE}';
вставляем
{* BEGIN New-Top-Action-products *}
hs.headingEval = 'this.thumb.alt';
{* END New-Top-Action-products *}
10.2 ищем строку class="imboxr" (либо "imboxl" для картинки слева) и чуть ниже вместо строки
{if $product_info.big_picture} <a href="data/big/{$product_info.big_picture}" class="highslide" onclick="return hs.expand(this)"><img src="data/medium/{$product_info.thumbnail}" alt="{$product_info.name}" id="{$product_info.big_picture}"></a>{*
вставляем
{* BEGIN New-Top-Action-products *}
{*{if $product_info.big_picture}<a href="data/big/{$product_info.big_picture}" class="highslide" onclick="return hs.expand(this)"><img src="data/medium/{$product_info.thumbnail}" alt="{$product_info.name}" id="{$product_info.big_picture}"></a>*}
{if $product_info.big_picture}
{if $product_info.newtopact > 0}
<div style="position: relative;">
<div style="position: absolute; z-index: 1; top: 0px; left: 0px; background:url('data/{$smarty.const.TPL}/{$pictures[$product_info.newtopact]}'); height: 62px; width: 46px;">
<img src="data/{$smarty.const.TPL}/pixel.gif" width="46" height="62">
</div>
<a href="data/big/{$product_info.big_picture}" class="highslide" onclick="return hs.expand(this)"><img src="data/medium/{$product_info.thumbnail}" alt="<img src='data/{$smarty.const.TPL}/{$pictures[$product_info.newtopact]}'>" id="{$product_info.big_picture}"></a>
</div>
{else}
<a href="data/big/{$product_info.big_picture}" class="highslide" onclick="return hs.expand(this)"><img src="data/medium/{$product_info.thumbnail}" alt="{$product_info.name}" id="{$product_info.big_picture}"></a>
{/if}
{* END New-Top-Action-products *}{*
Пункты (9) и (10) приведены для дефолтового шаблона. В других шаблонах html-код может (и наверняка будет!) отличаться, так что придется проявить смекалку.