これを実現するために、組み込みの MODX メソッドのいくつかを使用できます。
これはテストされておらず、機能しない可能性がありますが、次の方法で実行できる可能性があります。
// userGroups = membergroups
$userGroups = $user->getUserGroups();
foreach ($userGroups as $userGroup) {
$resGroups = $userGroup->getResourceGroups();
foreach ($resGroups as $resGroup) {
$resources = $resGroup->getResources();
// merge resources into an array or something
}
}
moduser.class.php、modusergroup.class.php、およびmodresourcegroup.class.phpをチェックして、これらのメソッドの背後にあるクエリを確認してください。それらを 1 つのより効率的なクエリに適合させることができる場合があります。
また、あなたが達成したいことを誤解していなければ、あなたの結果は、ユーザーがログインしたときにマネージャーのリソース ツリーに表示されるものと似ているはずです。
これは、resource/getnodes.class.php プロセッサを使用します。このプロセッサは、getCollection を使用してコンテキストごとに可能なすべてのリソースを取得し、それぞれをループして、 を使用して表示するかどうかを決定します$resource->checkPolicy('list')
。それは考慮すべき別のアプローチかもしれません。
私は通常、MODX リソースではなくカスタム データを使用するので、これをどのように進めているかを知りたいと思っています。