|
Descrierea problemei: In cazul in care componenta VirtueMart este referita din mai multe elemente de meniu, structura meniului nu este pastrata cand se afiseaza un produs in mod detaliat. Acest lucru poate fi foarte deranjant pentru utilizatori. De ex, pentru urmatoarea structura a meniurilor Home / Notebooks / Dell si Home / Desktop / IBM, ambele publicate,
unde Desktop si Notebook sunt doua meniuri, iar Dell si IBM sunt elemente de meniu care pointeaza catre componenta VirtueMart, pagina de detalii a produselor din ambele categorii va afisa in loc de meniu potrivit, una dintre cele doua categorii, in functie de ordinea cronologica a elementelor de meniu (depinde care a fost creat primul). Cauza problemei: Problema apare pentru ca in momentul in care se genereaza link-urile pentru o categorie de produse, functia folosita este: function getShopItemid() { if( empty( $_REQUEST['shopItemid'] )) { $db = new ps_DB; $db->query( "SELECT id FROM #__menu WHERE link='index.php?option=com_virtuemart' AND published=1"); if( $db->next_record() ) { $_REQUEST['shopItemid'] = $db->f("id"); } else { if( !empty( $_REQUEST['Itemid'] )) { $_REQUEST['shopItemid'] = intval( $_REQUEST['Itemid'] ); } else { $_REQUEST['shopItemid'] = 1; } } } return intval($_REQUEST['shopItemid']); } din fisierul /administrator/components/com_virtuemart/classes/ps_session.php Logica este urmatoare: - se itereaza peste elementele de meniu, publicate, care refera virtuemart, si se alege primul dintre ele. Acesta determina valoare pentru ItemId, care va fi memorata pe sesiune, si folosita pentru generarea link-urilor cu probleme (si in final detemina meniul folosit) In cazul in care este folosit doar un element de meniu catre VirtueMart in toata aplicatia, este in regula, problema apare in cazul in care sunt folosite mai multe astfel de elemente de meniu. Rezolvarea problemei: O solutie rapida este sa inlocuiti acest cod cu urmatorul: function getShopItemid() { if( !empty( $_REQUEST['Itemid'] )) { $_REQUEST['shopItemid'] = intval( $_REQUEST['Itemid'] ); } else { $_REQUEST['shopItemid'] = 1; } return intval($_REQUEST['shopItemid']); }
|