Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

агент + GetMenu

00 голосов
2
Всем доброго времени суток!
На сайте есть меню: .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);
      }
спросил 01 Сен, 13 от Zews (180 баллов)

2 Ответы

00 голосов
global $APPLICATION;
ответил 01 Сен, 13 от NitroGeN (2,840 баллов)
00 голосов
все время забываю про объявление global'сов. *wall*
спасибо большое.
естественно помогло
ответил 21 Ноя, 13 от Zews (180 баллов)

Похожие вопросы

0 голосов
3 ответов
спросил 27 Март, 14 от XIDAN (620 баллов)
0 голосов
3 ответов
спросил 05 Март, 14 от Amentet (2,080 баллов)
0 голосов
7 ответов
спросил 22 Июль, 13 от Aribor (560 баллов)