[***РЕШЕНО***] Как найти ID дочерниx ресурсов всех уровней с 'isfolder' => 1 и 'published' => 1 ?
$parentId = 100;
$childs = $modx->getChildIds($parentId,10,array('context' => 'web'));
Выводит массив всех id дочерних ресурсов, у которых главный родитель имеет id:100.Как получить id всех дочерних опубликованных ресурсов контейнеров?
Комментарии: 6
можно через pdoResources
$parentId = 100;
$childs = $modx->runSnippet('pdoResources',array(
'parents' => $parentId,
'returnIds' => 1,
'limit' => 0
));
там по умолчанию параметры стоят 'isfolder' => 1 и 'published' => 1 $parentId = 100;
$childs = $modx->runSnippet('pdoResources',array(
'parents' => $parentId,
'returnIds' => 1,
'limit' => 0
));
return $childs;
В консоли выдает вот что:[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)если выключить ошибки, то выдает:
Language string not found: «ASC»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «DESC»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «ASC»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «DESC»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «is equal to»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «is not equal to»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «less than»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «less than or equal to»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «greater than or equal to»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «is empty»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «is not empty»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «is null»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «is in array»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «is between»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «System default»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: "-1 (relative to site_url)"
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «full (absolute, prepended with site_url)»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «abs (absolute, prepended with base_url)»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «http (absolute, forced to http scheme)»
[2019-12-25 15:25:58] (DEBUG @ /home/login/domains/mydomen.ru/public_html/core/model/modx/modlexicon.class.php: 416)
Language string not found: «https (absolute, forced to https scheme)»
53,41,42,43,46,51,50,44
SQL time: 0,0008 s
SQL queries: 5
PHP time: 0,0184 s
Total time: 0,0192 s
Memory: 0 MB
53,41,42,43,46,51,50,44
не все ресурсы, а кроме того некоторые НЕ контейнеры $parentId = 100;
$childs = $modx->runSnippet('pdoResources',array(
'parents' => $parentId,
'returnIds' => 1,
'limit' => 0,
'where' => '{"isfolder:=":1}'
));
return $childs;
так выведет только контейнеры
Благодарю!
Да, так выводит контейнеры, но также и кучу(DEBUG @ /… Как от них избавиться?
Кроме того 5 SQL queries. Total time в районе 0,02 s
Если убрать кучу(DEBUG @ /..., то как одно из решений очеь даже нормальное!
В общем сделал вот так. Публикую, может кому пригодится! Делал сам, так как нигде не нашел подобного универсального решения.
Если можно как-то улучшить, то буду признателен за публикацию примера с улучшением.
Вот сам код.
Выводит все дочерние опубликованные ресурсы контейнеры всех уровней
Да, так выводит контейнеры, но также и кучу(DEBUG @ /… Как от них избавиться?
Кроме того 5 SQL queries. Total time в районе 0,02 s
Если убрать кучу(DEBUG @ /..., то как одно из решений очеь даже нормальное!
В общем сделал вот так. Публикую, может кому пригодится! Делал сам, так как нигде не нашел подобного универсального решения.
Если можно как-то улучшить, то буду признателен за публикацию примера с улучшением.
Вот сам код.
//получение массива ВСЕХ дочерних ресурсов контейнеров
$parentId = 100;// id ресурса, у которого ищем потомков
$childIds= $modx->getChildIds($parentId,10,array('context' => 'web'));
$res = array();
$q = $modx->newQuery('modResource', array('modResource.id:IN' => $childIds, 'isfolder' => 1, 'published' => 1));
$q->select('id');
if ($q->prepare() && $q->stmt->execute()) {
while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
$res[] = $row['id'];
}
}
$childIds = $res; // получаем массив с id дочерних опубликованных ресурсов контейнеров всех уровней
Так всего SQL queries: 1Выводит все дочерние опубликованные ресурсы контейнеры всех уровней
Array
(
[0] => 41
[1] => 42
[2] => 43
[3] => 46
)
SQL time: 0,0001 s
SQL queries: 1
PHP time: 0,0104 s
Total time: 0,0106 s
Memory: 0 MB
мне кажется в коде опечатка, сначала идет срочка:
$childIds= $modx->getChildIds($parentId,10,array('context' => 'web'));
затем:$childIds = $res;
первая, наверное, лишняя?
нет, это не опечатка, это я уже из рабочего кода с сайта взял часть, которая отвечает за вывод id опубликованных дочерних ресурсов контейнеров… там далее по коду нужна переменная $childIds
Если чисто для тестирования в консоли, то тогда так:
Если чисто для тестирования в консоли, то тогда так:
//получение массива ВСЕХ дочерних ресурсов контейнеров
$parentId = 100;// id ресурса, у которого ищем потомков
$childIds= $modx->getChildIds($parentId,10,array('context' => 'web'));
$res = array();
$q = $modx->newQuery('modResource', array('modResource.id:IN' => $childIds, 'isfolder' => 1, 'published' => 1));
$q->select('id');
if ($q->prepare() && $q->stmt->execute()) {
while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
$res[] = $row['id'];
}
}
print '<pre>';
print_r($res);// получаем массив с id дочерних опубликованных ресурсов контейнеров всех уровней
print '</pre>';
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.