При достижении последнего товара в категории переходит к первому товару следующей.
При достижении последнего товара последней категории переходит к первому товару первой категории.
При движении в обратную сторону (по предыдущему товару) аналогично.
Ну и таки да, картинка товара, как же без этого .
Вдохновитель написания модуля - хялявщик Grom. Без него я бы так и не собрался наконец-то сделать все это по человечески, т.е. с поддержкой сортировки и переходом из категории в категорию.
Посмотреть можно тут - http://cpu.badisoft....ook-IQ-701.html
Установка:
==========
1. в файле category.php
1.1 в функции _getUrlToNavigate
1.1.1 вместо
$url .= "&sort=".$_GET["sort"];
вставляем
# BEGIN Save-sort-to-session
#$url .= "&sort=".$_GET["sort"];
$_SESSION["sort"] = $_GET["sort"];
if ( isset($_SESSION["sort"]) )
$url .= "&sort=".$_SESSION["sort"];
# END Save-sort-to-session
1.1.2 вместо
$url .= "&direction=".$_GET["direction"];
вставляем
# BEGIN Save-sort-to-session
#$url .= "&direction=".$_GET["direction"];
$_SESSION["direction"] = $_GET["direction"];
if ( isset($_SESSION["direction"]) )
$url .= "&direction=".$_SESSION["direction"];
# END Save-sort-to-session
1.2 вместо
$callBackParam["sort"] = $_GET["sort"];
вставляем
# BEGIN Save-sort-to-session
#$callBackParam["sort"] = $_GET["sort"];
$_SESSION["sort"] = $_GET["sort"];
if ( isset($_SESSION["sort"]) )
$callBackParam["sort"] = $_SESSION["sort"];
# END Save-sort-to-session
1.3 вместо
$callBackParam["direction"] = $_GET["direction"];
вставляем
# BEGIN Save-sort-to-session
#$callBackParam["direction"] = $_GET["direction"];
$_SESSION["direction"] = $_GET["direction"];
if ( isset($_SESSION["direction"]) )
$callBackParam["direction"] = $_SESSION["direction"];
# END Save-sort-to-session
Таким образом мы сохраним в $_SESSION выбранную в категории сортировку и сможем ее потом использовать при переходе к предыдущему/следующему товарам
2. в файле product_detailed.php
перед
$smarty->hassign("customer_name", $customer_name);
вставляем
# BEGIN Prev-Next-products
$mcats = array();
foreach ($cats as $cat) // получим список только не пустых категорий
{
$child_count = 0;
foreach ($cats as $child) if ($child['parent']==$cat['categoryID']) $child_count += $child['products_count'];
if ($cat['products_count']>$child_count) $mcats[] = $cat;
}
$last_cats = count($mcats)-1;
for ($i=0;$i<=$last_cats;$i++) // найдем предыдущую и следующую категории относительно текущей
{
if ($categoryID == $mcats[$i]['categoryID'])
{
if ($i == 0) // если текущая категория первая, то предыдущей будет последняя
{
$prev_cat = $mcats[$last_cats]['categoryID'];
$next_cat = $mcats[1]['categoryID'];
}
elseif ($i == $last_cats) // если текущая категория последняя, то следующей будет первая
{
$prev_cat = $mcats[$last_cats-1]['categoryID'];
$next_cat = $mcats[0]['categoryID'];
}
else
{
$prev_cat = $mcats[$i-1]['categoryID'];
$next_cat = $mcats[$i+1]['categoryID'];
}
break;
}
}
$sort = isset($_SESSION['sort'])?$_SESSION['sort']:str_replace(array(' ASC',' DESC'),'',CONF_DEFAULT_SORT_ORDER);
$direction = isset($_SESSION['direction'])?$_SESSION['direction']:(strpos('ASC',CONF_DEFAULT_SORT_ORDER)?'ASC':(strpos('DESC',CONF_DEFAULT_SORT_ORDER)?'DESC':''));
$reverce = ($direction == 'DESC')?'ASC':'DESC';
$query = "SELECT p.productID, p.name, p.Price, pp.filename FROM ".PRODUCTS_TABLE." AS p LEFT JOIN ".PRODUCT_PICTURES." AS pp ON p.default_picture = pp.photoID where p.enabled=1 AND p.categoryID=";
$prod = array();
$data = db_query("$query$categoryID ORDER BY $sort $direction");
while ($row = db_fetch_assoc($data)) $prod[] = $row;
$last_prod = count($prod)-1;
for ($i=0;$i<=$last_prod;$i++)
{
if ($productID == $prod[$i]['productID'])
{
if ( $last_prod == 0) // в категории всего один товар, т.е. "следующий" и "предыдущий" будут из "следующей" и "предыдущей" категорий (либо - см. ниже про "либо")
{
$row = db_fetch_assoc(db_query("$query$prev_cat ORDER BY $sort $reverce LIMIT 1"));
$prev = $row;
$row = db_fetch_assoc(db_query("$query$next_cat ORDER BY $sort $direction LIMIT 1"));
$next = $row;
}
elseif ($i == 0) // это первый товар в категории с учетом сортировки и "предыдущий" товар будет из "предыдущей" категории (либо последний из последней категории, если текущая категория первая)
{
$row = db_fetch_assoc(db_query("$query$prev_cat ORDER BY $sort $reverce LIMIT 1"));
$prev = $row;
$next = $prod[1];
}
elseif ($i == $last_prod) // это последний товар в категории с учетом сортировки и "следующий" товар будет из "следующей" категории (либо первый из первой категории, если теущая категория последняя)
{
$row = db_fetch_assoc(db_query("$query$next_cat ORDER BY $sort $direction LIMIT 1"));
$prev = $prod[$last_prod-1];
$next = $row;
}
else
{
$prev = $prod[$i-1];
$next = $prod[$i+1];
}
break;
}
}
$smarty->assign("prev", $prev);
$smarty->assign("next", $next);
# BEGIN Prev-Next-products
3. в файл product_detailed.tpl.html вставляем
{* BEGIN Prev-Next-products *}
<table width="100%">
<tr align="center">
<td><a href='{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$prev.productID}.html{else}index.php?productID={$prev.productID}{/if}'><img src="data/small/{$prev.filename}" alt="{$prev.name}" title="{$prev.name}" style="max-height:100px"></a></td>
<td><a href='{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$next.productID}.html{else}index.php?productID={$next.productID}{/if}'><img src="data/small/{$next.filename}" alt="{$next.name}" title="{$next.name}" style="max-height:100px"></a></td>
</tr>
<tr align="center">
<td><a href='{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$prev.productID}.html{else}index.php?productID={$prev.productID}{/if}'>Предыдущий</a></td>
<td><a href='{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$next.productID}.html{else}index.php?productID={$next.productID}{/if}'>Следующий</a></td>
</tr>
</table>
{* END Prev-Next-products *}