Ну вот, сайт мой стал уже большим и нужно искать другие, альтернативные способы решения. Постоянно "дописывать" скрипт pathway.php стало накладно. Пришлось вернутся к этому вопросу еще раз. И вот что у меня получилось:
При создании новой компоненты ExMenu мы
а) выбираем меню которое должен отображать этот новый компонент
б) указываем связь компонента с пунктами существующего меню, в правой колонке.
То есть, теоретически, мы связь уже делаем, построить "путь" можно зная ее. За эту связь отвечает таблица jos_modules_menu
Поля в этой таблице следующие: moduleid, menuid
То есть номер модуля и номер меню.
Далее мы дописываем скрипт include/pathway.php следующим образом:
После функции function pathwayMakeLink( $id, $name, $link, $parent, $menutype = null ) вставляем свою функцию:
/*
* Функция поиска родительского меню
* Возращает номер родительского пункта меню, если пункт не найден возращает 0
* Если не верно передали параметр, возращает False
*/
function MenuParentSearch($item) {
global $database;
if (isset($item) && is_object($item)) {
// получаем Id модуля по номеру раздела
$query = "SELECT moduleid"
."\nFROM #__modules_menu"
."\nWHERE menuid=".(int) $item->id;
$database->setQuery( $query );
$module_id = $database->loadRow();
// получаем список связанных разделов с этим модулем
$query = "SELECT jmm.menuid AS id, jm.menutype AS menutype"
."\nFROM #__modules_menu AS jmm"
."\nLEFT JOIN #__menu AS jm ON jm.id=jmm.menuid"
."\nWHERE jmm.moduleid = ".(int) $module_id[0]
."\nGROUP BY jm.menutype";
$database->setQuery( $query );
$lookup = $database->loadObjectList();
// если типы разные, входной и первый найденный - это родитель
foreach ($lookup as $row) {
if ($row->menutype != $item->menutype) {
$parent = $row->id;
}
}
if (isset($parent)) {
return $parent;
} else {
return 0;
}
} else {
return false;
}
}
и в нижней части скрипта, в месте где скрип определяет "Родителя", вставляем условие вызова этой функции
if (trim($newlink)!="") {
$path = $img .' '. $newlink .' '. $path;
} else {
$path = '';
}
// если "родителя нет" или значение равно нулю и тип меню не основной, любой другой
if (!isset($item->parent) || $item->parent == 0 && $item->menutype != "mainmenu" && $item->menutype != "topmenu") {
// вызываем функцию поиска родителя
$item->parent = MenuParentSearch($item);
}
$mid = $item->parent;
* обратите внимание что в скрипте, в условии, есть дополнение && $item->menutype != "topmenu" --> уберите его.
У меня на сайте Два основных меню, у вас, скорее всего, один, mainmenu.
* ну и понятно, что применяю эту доработку, путь в виде трех и более уровней работать не будет.
* в случае если у вас вызывается с титульной странице "Поиск" или скажем карта сайта, то путь тоже работать не будет, так как построение его идет из меню.