Мы Вам покажем, как в интернет магазине на JoomShopping реализовать навигацию в карточке товара по предыдущему и следующему товару.
Как это выглядит:
Чтобы при обновлении JoomShopping наше решение не было затронуто будем все изменения проводить в шаблоне карточки товара.
Заходим в шаблон карточки товара:
/components/com_jshopping/templates/default/product/product_default.php
Находим строку:
<?php include(dirname(__FILE__)."/load.js.php");?>
и после неё вставляем код:
<?php $product_id = JRequest::getInt('product_id');
$product_nav = &JTable::getInstance('product', 'jshop');
$product_nav->load($product_id);
$category_id = $product_nav->getCategory();
$products = &$this->getModel("products"); //Определяем сортировку и направление сортировки пользователя
$mainframe =& JFactory::getApplication();
$jshopConfig = &JSFactory::getConfig();
$order = $mainframe->getUserStateFromRequest( 'jshoping.list.front.productorder', 'order', $jshopConfig->product_sorting, 'int');
$orderby = $mainframe->getUserStateFromRequest( 'jshoping.list.front.productorderby', 'orderby', $jshopConfig->product_sorting_direction, 'int');
$orderbyq = getQuerySortDirection($order, $orderby);
$field_order = $jshopConfig->sorting_products_field_select[$order];
$order_query = "";
if (!$field_order) return $order_query;
$order_original = $field_order;
$multyCurrency = count(JSFactory::getAllCurrency());
if ($multyCurrency>1 && $field_order=="prod.product_price"){
if (strpos($adv_from,"jshopping_currencies")===false){
$adv_from .= " LEFT JOIN `#__jshopping_currencies` AS cr USING (currency_id) ";
}
if ($jshopConfig->product_list_show_min_price){
$field_order = "prod.min_price/cr.currency_value";
}else{
$field_order = "prod.product_price/cr.currency_value";
}
}
if ($field_order=="prod.product_price" && $jshopConfig->product_list_show_min_price){
$field_order = "prod.min_price";
}
$order_query = " ORDER BY ".$field_order;
if ($orderbyq){
$order_query .= " ".$orderbyq;
}
//Собственно сам запрос
$db =& JFactory::getDBO();
$query = "SELECT *, `prod`.`name_ru-RU` as name FROM `#__jshopping_products` AS prod
INNER JOIN `#__jshopping_products_to_categories` AS pr_cat ON `pr_cat`.`product_id` = `prod`.`product_id`
LEFT JOIN `#__jshopping_categories` AS cat ON `pr_cat`.`category_id` = `cat`.`category_id`
WHERE `prod`.`product_quantity`> 0 AND `prod`.`product_publish` = 1 AND `pr_cat`.`category_id` = ".$category_id." ".$order_query;
$db->setQuery($query);
$rows = $db->loadObjectList();
$total = Count($rows);
addLinkToProducts($rows, 0, 1);
$Next = false;
$Prev = false;
foreach($rows as $Key=>$row){
If ($row->product_id == $product_id){
if($rows[$Key + 1]->product_link) $Next='<a style="font-size: 10px;text-decoration: none;" href="'.$rows[$Key + 1]->product_link.'" title="'.$rows[$Key + 1]->name.'">'.$rows[$Key + 1]->name.' ></a>';
if($rows[$Key - 1]->product_link) $Prev='<a style="font-size: 10px;text-decoration: none;" href="'.$rows[$Key - 1]->product_link.'" title="'.$rows[$Key - 1]->name.'">< '.$rows[$Key - 1]->name.'</a>';
Break;
}
}
?>
Всё готово!!!
Если в Вашем магазине товары находиться в нескольких категориях и Вам нужно чтобы предыдущий и следующий товар были из текущей категории - Вам необходимо во втором блоке кода в 4 строке вместо $category_id = $product->getCategory(); вставить $category_id = JRequest::getInt('category_id');
В магазинах в которых не выводятся остаток товара - количество которого равно 0. В этом случаи необходимо из запроса удалить "`prod`.`product_quantity`> 0 AND " после WHERE
Также Вы можете скачать специальный плагин после установки которого Вам только остаётся вывести в карточки товара информацию в любом подходящем месте для Вас.