Есть структура каталога (таблица 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.