Всем доброго времени суток!
На сайте есть меню: .left.menu и .left_podmenu, родитель и дите соответственно.
Есть самописный агент (не относящийся ни к одному из модулей), в котором потребовалось получать ссылки на разделы, зная значение дополнительной переменной указанной в .left_podmenu.
Для этого в Агенте использую след код:
Код |
---|
$obMenu = $APPLICATION->GetMenu( //вот это строчка №169
"left",
false,
false,
"/shop/catalog/"
);
for ($i=1, $mainmenu = array(); $mainmenu[$obMenu -> arMenu[$i][3][codevidatov]][url] = $obMenu -> arMenu[$i][1]; $i++):
$obMenu_child = $APPLICATION->GetMenu(
"left_podmenu",
false,
false,
$mainmenu[$obMenu -> arMenu[$i][3][codevidatov]][url]
);
for ($j=1; $mainmenu[$obMenu -> arMenu[$i][3][codevidatov]][$obMenu_child -> arMenu[$j][3][codevidatov]] = $obMenu_child -> arMenu[$j][1]; $j++);
endfor; |
С тех пор агент не отрабатывается и периодически начала вылетать ошибка:
Fatal error: Call to a member function GetMenu() on a non-object in .../bitrix/php_interface/init.php on line 169, которая после пары нажатий на F5 исчезает и сайт нормально прогружается.
Подумалось мне, что это из-за отсутствия инициализации объект класса CMenu. Добавила перед каждым GetMenu соответствующие строчки:
Код |
---|
if (CMenu::Init("left", false, false))...
if (CMenu::Init("left_podmenu", false, false))... |
После этого с прежней периодичностью начала вылетать следующая ошибка:
Fatal error: Using $this when not in object context in .../bitrix/modules/main/classes/general/menu.php on line 48Код файла menu.php, по вышеуказанному адресу:
Код |
---|
while(strlen($Dir)>0)
{
$Dir = rtrim($Dir, "/");
$menu_file_name=$_SERVER["DOCUMENT_ROOT"].$Dir."/.".$this->type.".menu.php"; //вот это строчка №48
if(file_exists($menu_file_name))
{
include($menu_file_name);
$this->MenuDir = $Dir."/";
$this->arMenu = $aMenuLinks;
$this->template = $sMenuTemplate;
$bFounded = true;
break;
}
$pos = strrpos($Dir, "/");
if($pos===false || $onlyCurrentDir == true)
break;
$Dir = substr($Dir, 0, $pos+1);
} |