Xmap és Virtuemart - menüpont nélkül |
| 2009. június 07. vasárnap, 17:47 |
|
Vannak olyan esetek, amikor menüpontot kell beszúrni egy menübe ahhoz, hogy egy másik komponens megfelelően működjön. Ilyen eset lehet például az, ha modulpozíciókat akarunk kötni VM-hez, ekkor kell egy Virtuemart-ra mutató menüpont, ugyanis csak ekkor keletkezik ItemId. Ha nem akarjuk megjeleníteni a menüsorban, nem gond, ugyanis a modulpozícióhoz kötés működik inaktív menüponttal is. Oldaltérkép generáláshoz mindig is az XMap nevű Joomla komponenst használtam, így a jelen esetben is ezt fogtam munkára. Azonban ahhoz, hogy Virtuemart linkeket kapjak, szükség van egy megjelenített, a webshopra mutató menüpontra. Egy kicsi XMap kód túrás és így a megoldás a tovább után. Módosított XMap verzió: 1.1.2 MegoldásElképzelhető a probléma kiküszöbölése új menü létrehozásával (és eltüntetésével -- CSS), de az nem túl elegáns megoldás. Így hát marad a kódmodifikáció. Az oldaltérkép megjelenítéséért az XMap frontend része felelős, természetesen erősen megtámogatva az admin részen belül található osztályokkal (A megoldáshoz nincs szükség ezekre). Az egyetlen szerkesztendő fájl: ../components/com_xmap/xmap.php printMenuTree() fv-n belül (306. sor): Először is át kell írni az SQL kérést, hogy ne legyen korlátozó kondíció a published vizsgálat. Ehhez ki kell venni a m.published='1' AND részt és be kell illeszteni a SELECT listába a m.published mezőt. Tehát az SQL kérésnek így kell kinéznie: $sql = "SELECT m.id, m.name, m.parent, m.link, m.type, m.browserNav, m.menutype, m.ordering, m.params, m.componentid,m.home, c.name AS component, m.published" . "\n FROM #__menu AS m" . "\n LEFT JOIN #__components AS c ON m.type='components' AND c.id=m.componentid" . "\n WHERE m.parent=".$menu->id." AND m.menutype = '".$menu->menutype."'" . ( $this->noauth ? '' : "\n AND m.access <= '". $this->gid ."'" ) . "\n ORDER BY m.menutype,m.parent,m.ordering"; A következő lépés a rekurzív iteráció apró módosítása, hogy csak azokat az elemeket vizsgálja, amik aktívak vagy a Virtuemart-ra mutatnak. Sor száma: 326. sor (a foreach-on belül): if (($item->published == '1') or (strpos($item->link, 'virtuemart') > -1)) { Ne felejtsük el lezárni az If-et!( XmapPlugins::printTree( $this, $item, $cache, $extensions ); utáni sorba kell rakni. ) ui. Figyelni kell arra, hogy a kukában ne maradjon semmilyen menüpont, mert bezavarhat. (Nálam volt egy VM-es, így kétszer generálta le a listát) |