$q = db_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=$categoryID");
while($row=db_fetch_assoc($q)) $p_around[] = $row;
$i = 0;
$last = count($p_around)-1;
while($p_around[$i]['productID'] != $productID) $i++;
$smarty->assign("prev_productID", $p_around[$i>0?$i-1:$last]);
$smarty->assign("next_productID", $p_around[$i<$last?$i+1:0]);
При таком раскладе у первого товара в категории "предыдущим" становится последний, а у последнего "следующим" - первый.
Если товаров всего два, то обе ссылки будут на "другой" товар.
Если товар всего один, то обе ссылки будут "на себя".