Может кому пригодится, хотя случай частный.
У меня такая структура
Родительская категория <не содержит товаров, благодаря хаку будет отображать товары из своих подкатегорий>
|_ Подкатегория1 <товар1 товар2>
|_ Подкатегория2 <товар2 товар 3>
Цель была,что бы при выборе товара1 из Родительской категории(который туда попал благодаря хаку), к pathway автоматом добавлялас Подкатегория1
Благодаря хаку товары из дочерних категорий попали в родительскую, но при этом возникло пару проблем
1) Линки на Следующий и Предыдущий товар перестали отображаться для этого применил этот хак
http://joomlaforum.ru/index.php/topic,69527.0.htmlв файле ps_product.php найти
function get_neighbor_products( $product_id ) {
global $perm, $orderby, $my, $auth, $keyword, $DescOrderBy, $limit, $limitstart, $search_limiter, $search_op,
$category_id, $manufacturer_id, $vm_mainframe, $vmInputFilter, $product_type_id, $keyword1, $keyword2;
$limit = 2000;
$limitstart = 0;
if( !empty( $_SESSION['last_browse_parameters'])) {
foreach( $_SESSION['last_browse_parameters'] as $paramName => $paramValue ) {
$$paramName = $paramValue;
}
}
$db = new ps_DB();
$db_browse = new ps_DB();
include( PAGEPATH . 'shop_browse_queries.php' );
должно быть
function get_neighbor_products( $product_id ) {
global $perm, $orderby, $my, $auth, $keyword, $DescOrderBy, $limit, $limitstart, $search_limiter, $search_op,
$category_id, $manufacturer_id, $vm_mainframe, $vmInputFilter, $product_type_id, $keyword1, $keyword2;
$limit = 2000;
$limitstart = 0;
include( PAGEPATH . 'shop_browse_queries.php' );
if( !empty( $_SESSION['last_browse_parameters'])) {
foreach( $_SESSION['last_browse_parameters'] as $paramName => $paramValue ) {
$$paramName = $paramValue;
}
}
$db = new ps_DB();
$db_browse = new ps_DB();
2) После этого хака появились линки на сл и предыдущий товар, но переходя по ним pathway менял в случайном порядке родительскую категорию, то есть я не ходил с помощью этих линок лишь по дочерней категории
а гулял по всем родительским категориям магазина. Данная проблема была из-за того что линки на сл и предыдущий товар не использовали айди категории, и товар с данным айди брался из любой категории где он был добавлен
Для исправления этого я применил этот хак
http://joomlaforum.ru/index.php/topic,104397.0.htmlФайл /administrator/components/com_virtuemart/html/shop.product_details.php
строка 170:
$url_parameters = 'page=shop.product_details&product_id='.$next_product['product_id'].'&flypage='.$ps_product->get_flypage($next_product['product_id']).'&pop='.$pop;
Дописываем перед точкой с запятой .'&category_id='.$category_id
$url_parameters = 'page=shop.product_details&product_id='.$next_product['product_id'].'&flypage='.$ps_product->get_flypage($next_product['product_id']).'&pop='.$pop.'&category_id='.$category_id;
строка 184, те же манипуляции:
$url_parameters = 'page=shop.product_details&product_id='.$previous_product['product_id'].'&flypage='.$ps_product->get_flypage($previous_product['product_id']).'&pop='.$pop.'&category_id='.$category_id;
Пока не знаю почему разработчики это не учли и где всплывет это мое исправление. Но так долго я парился с такой проблемой, что захотелось поделиться решением, хоть по ходу уже и поздно.
3) Все бы хорошо. но переходы по сл и предыдущей линке стали сквозными для дочерних категори 1 и 2, тобишь листая товары я будучи в дочерней подкатегории1 при пролистывании уже мог видеть твоары из дочерней подкатегории2. Проблема была в том что линки предыдущий и следующий товар не исчезали когда отображался последний или первый товар дочерней категории, для этого в используемом мной файле flypage.tpl я написал условие, что если первое слово названия товара не равно первому слову следующего товара то не выводит линку следующий товар.
Просто в моем случае это картины и название картины начинается с имени и фамилии художника, потом точка и название картины, что дало мне порог определения стоит дальше листать или нет
Мои справления во flypage.tpl
if( $this->get_cfg( 'product_navigation', 1 )) {
$current_title = explode(".", $product_name);
$prev_title = explode(".", shopMakeHtmlSafe($previous_product['product_name']));
if($current_title[0]==$prev_title[0]){
if( !empty( $previous_product )) {
echo '<div class="prevpage">';
echo '<a style="float:none;background: none;color:#777777;" class="previous_page" href="'.$previous_product_url.'"> << Предыдущий товар </a>';
echo '</div>';
}
}
$current_title = explode(".", $product_name);
$next_title = explode(".", shopMakeHtmlSafe($next_product['product_name']));
if($current_title[0]==$next_title[0]){
if( !empty( $next_product )) {
echo '<div class="nextpage">';
echo '<a style="float:none;background: none;color:#777777;" class="next_page" href="'.$next_product_url.'"> Следующий товар >> </a>';
echo '</div>';
}
}
}