PDA

Zobacz pełną wersję : kolejność kategorii w virtuemart



dmuchowski
03-02-2012, 12:16
Joomla 1.5.22
Virtuemart 1.1.9

problem dotyczy witryny: http://www.sklep.swisskiss.pl (http://www.sklep.swisskiss.pl/)

teraz do rzeczy... wchodząc np. Linie Kaw >> Ligne d'Azur

wyświetla się lista produktów w danej kategorii, wszystko działa ale do czasu...na górze są strzałki umożliwiające poruszanie się pomiędzy produktami i tak:
Linie Kaw arrow Ligne d`Azur arrow Côte d’Azur 1kg

klikając strzałkę w prawo uzyskujemy:
Linie Kaw arrow Ligne d`Azur arrow Côte d’Azur 250g (jeszcze wszystko ok)

kolejne przejście w prawo:
Rodzaj ziarna arrow Mieszanki arrow Saint Tropez 1kg

i kolejne...
Opakowania arrow 250g arrow Saint Tropez 250g

i tu pojawia się mój problem, dlaczego wciśniecie kolejnego produktu powoduje wyście z kategorii, podkategorii i wejście do innej?
Jakiś pomysł na rozwiązanie problemu?

kodhtml
06-02-2012, 11:38
Dlatego, że masz przypisane produkty do różnych kategorii. Aby to poprawić trzeba byłoby prawdopodobnie modyfikować kod VM, co mogłoby sprawić problem w przypadku aktualizacji. Prostym rozwiązaniem (aczkolwiek niezbyt eleganckim) jest dodanie duplikatów produktów do poszczególnych kategorii. Jednak w tym wypadku problemem będzie kontrola stanu magazynowego.

dmuchowski
06-02-2012, 17:32
o tym myślałem jako ostateczność, jednak co jeśli baza zawiera powyżej 100 produktów.

kodhtml
07-02-2012, 10:03
W tym wypadku pozostaje modyfikacja kodu.

dmuchowski
07-02-2012, 10:48
konretnie jakie zmiany w kodzie?
do wyświetlania produktów używam: flypage.tpl

kodhtml
07-02-2012, 10:59
To nie ma związku z szablonem, chodzi o funkcję pobierającą "sąsiadujące" produkty względem aktualnie wyświetlanego (get_neighbor_products). Przeanalizuj jej działanie i dokonaj odpowiednich zmian.

dmuchowski
07-02-2012, 12:55
Problem dotyczy funkcji get_neighbor_products w pliku
ps_products.php

1* http://sklep.swisskiss.pl/index.php?page=shop.product_details&flypage=flypage.tpl&product_id=32&category_id=18&option=com_virtuemart&Itemid=22

2* http://sklep.swisskiss.pl/index.php?page=shop.product_details&product_id=31&flypage=flypage.tpl&pop=0&option=com_virtuemart&Itemid=22

do tego etapu dodatkowa ścieżka produktów jest w tej samej
kategorii, w kolejnym etapie

3* http://sklep.swisskiss.pl/index.php?page=shop.product_details&product_id=30&flypage=flypage.tpl&pop=0&option=com_virtuemart&Itemid=22

wchodzi do innej kategorii, a ma zostać w tej samej.


/**
* This function retrieves the "neighbor" products of a product
specified by $product_id
* Neighbors are the previous and next product in the current list
*
* @param int $product_id
* @return array
*/
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();

if (defined('VM_ALLOW_EXTENDED_CLASSES') &&
defined('VM_THEMEPATH') && VM_ALLOW_EXTENDED_CLASSES &&
file_exists(VM_THEMEPATH.'user_class/shop_browse_queries.php')) {
// Load the user-defined shop_browse_queries file
include_once(VM_THEMEPATH.'user_class/shop_browse_queries.php');
} else {
// Otherwise we have to use the original file
include( PAGEPATH . 'shop_browse_queries.php' );
}


$db->query( $list );

$neighbors = array('previous'=>'',
'next'=>'');

while( $db->next_record() ) {
if( $db->f( 'product_id' ) == $product_id ) {
$previous_row = $db->previousRow();
$next_row = $db->nextRow();

if( !empty( $previous_row->product_id )) {
$neighbors['previous']['product_id'] =
$previous_row->product_id;
$neighbors['previous']['product_name'] =
$previous_row->product_name;
}
if( !empty( $next_row->product_id )) {
$neighbors['next']['product_id'] = $next_row->product_id;
$neighbors['next']['product_name'] = $next_row->product_name;
}
}
}
return $neighbors;
}
/**

http://www.tgmarkow.webd.pl/produkty.png

plik shop.produkt_details:


// Get the neighbor Products to allow navigation on product
level
$neighbors = $ps_product->get_neighbor_products( !empty(
$product_parent_id ) ? $product_parent_id : $product_id );
$next_product = $neighbors['next'];
$previous_product = $neighbors['previous'];
$next_product_url = $previous_product_url = '';
if( !empty($next_product) ) {
$url_parameters =
'page=shop.product_details&product_id='.$next_product['product_id'].'&flypage='.$ps_product->get_flypage($next_product['product_id']).'&pop='.$pop;
if( $manufacturer_id ) {
$url_parameters .= "&manufacturer_id=" . $manufacturer_id;
}
if( $keyword != '') {
$url_parameters .= "&keyword=".urlencode($keyword);
}
if( $pop == 1 ) {
$next_product_url = $sess->url(
$_SERVER['PHP_SELF'].'?'.$url_parameters );
} else {
$next_product_url = str_replace("index2","index",$sess->url(
$url_parameters ));
}
}
if( !empty($previous_product) ) {
$url_parameters =
'page=shop.product_details&product_id='.$previous_product['product_id'].'&flypage='.$ps_product->get_flypage($previous_product['product_id']).'&pop='.$pop;
if( $manufacturer_id ) {
$url_parameters .= "&manufacturer_id=" . $manufacturer_id;
}
if( $keyword != '') {
$url_parameters .= "&keyword=".urlencode($keyword);
}
if( $pop == 1 ) {
$previous_product_url = $sess->url(
$_SERVER['PHP_SELF'].'?'.$url_parameters );
} else {
$previous_product_url = str_replace("index2","index",$sess->url(
$url_parameters ));
}
}