We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 1208
    • 79 Posts
    Есть структура каталога (таблица w_cats с полями id, name и parent), количество уровней которого заранее не известно. Требуется по введенному id собрать в массив все категории (номера), лежащие ниже уровнем и имеющие указанную категорию среди предков.
    Для этого пишу такую функцию:
    function children($pid,&$res) {
          $raw = $modx->db->select("*","`w_cats`","`parent`=$pid");    #получаем список подкатегорий
          $co = $modx->db->getRecordCount($raw);              #получаем количество подкатегорий
          if  ($co==0 || !$co) return;                           #если ноль - возврат
          else {                                            #иначе
            $list = $modx->db->makeArray($raw);           #делаем массив
            foreach ($list as $li) {                     #идем по массиву
              $lid = $li[id];
              $res[] = $lid;                         #добавляем элемент
              children($lid,$res);                  #и идем по подкатегориям
            }
          }
    }
    

    таким образом в массиве $res должны накапливаться id потомков разного уровня.
    Когда приходит время, использую функцию:
    $chid = array();
          children($cid, $chid);
    


    Но вместо результата получаю ошибку:
    Fatal error: Call to a member function select() on a non-object in (путь к сайту)/manager/includes/document.parser.class.inc.php(770) : eval()’d code on line 4

    4 строка как раз обращение к базе. Проверял, что попадает в $pid - там все нормально (вводил 2 категорию, потомков там нет).
    В чем может быть дело?

    P.S. MODx Evo 1.4, PHP 5.2, MYSQL5.
      • 785
      • 2,113 Posts
      Добавить в функцию
      global $modx;
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 1208
        • 79 Posts
        Grand Merci)) с ума сошел пока искал. А такую мелочь и не учел)