© Сделано на LiveStreet
Дизайн - ©2009 MODx RED Group
<?php
if(!isset($id)) $id = 2;
if(!isset($level)) $level = 1;
if ($level > 1){
$tblsc = $modx->getFullTableName('site_content');
$access = "AND lvl{$level}.deleted=0 AND lvl{$level}.published=1";
$inner = '';
for ($i = $level-1; $i > 0; --$i){
$nextlvl = $i+1;
$inner .= "INNER JOIN $tblsc AS lvl{$i} ON lvl{$nextlvl}.parent=lvl{$i}.id AND lvl{$i}.deleted=0 AND lvl{$i}.published=1 ";
}
$sql = "SELECT lvl{$level}.id FROM $tblsc AS lvl{$level} " . $inner . "WHERE lvl1.parent=$id $access;";
$res = $modx->db->query($sql);
$children = array();
while($childId = $modx->db->getValue($res)){
$children[] = $childId;
}
}
else{
$children = $modx->getChildIds($id, 1);
}
return implode(',', $children);
?><?php
if(!isset($id)) $id = 2;
if(!isset($level)) $level = 5;
if($level>2) {
if(!function_exists('LevelChildren')){
function LevelChildren($docId, $levels){
global $modx;
$tblsc = $modx->getFullTableName('site_content');
$access = "AND lvl{$levels}.deleted=0 AND lvl{$levels}.published=1";
$inner = '';
for ($i = $levels-1; $i > 1; --$i){
$nextlvl = $i+1;
$inner .= "INNER JOIN $tblsc AS lvl{$i} ON lvl{$nextlvl}.parent=lvl{$i}.id AND lvl{$i}.deleted=0 AND lvl{$i}.published=1 ";
}
$sql = "SELECT lvl{$levels}.* FROM $tblsc AS lvl{$levels} " .
$inner .
"WHERE lvl2.parent=$docId $access;";
$res = $modx->db->query($sql);
$res = $modx->db->makeArray($res);
foreach($res as $v) {
$child[] = $v['id'];
}
return implode(",",$child);
}
}
$levelID = LevelChildren($id,$level);
return $levelID;
}
else { return '';}
?>$array1 = $modx->getChildIds($parent,$depth);
$array2 = $modx->getChildIds($parent,$depth-1);
$childParents = array_diff($array1, $array2);
Array getChildIds(mixed $id[, int $depth[, array $children]]);