私はjoomla2.5でコンポーネントに取り組んでおり、コードを介して動的にユーザーグループを作成する必要があります。
私が2.5で知っているように、joomlaは階層構造を維持するためにネストされたセットを使用しているため、新しいエントリを挿入するとテーブル全体に影響を与える可能性があります。
joomlaは、ユーザーグループを作成するために直接使用できる機能を提供しますか?親グループを指定できるものと、その下に新しいグループが作成されます。
私はjoomla2.5でコンポーネントに取り組んでおり、コードを介して動的にユーザーグループを作成する必要があります。
私が2.5で知っているように、joomlaは階層構造を維持するためにネストされたセットを使用しているため、新しいエントリを挿入するとテーブル全体に影響を与える可能性があります。
joomlaは、ユーザーグループを作成するために直接使用できる機能を提供しますか?親グループを指定できるものと、その下に新しいグループが作成されます。
自分で解決しました
私の場合、特定のグループのすぐ下に子グループを挿入する必要があります(以下のコードでは$ parent_idと記載されています)
// get max right from all the child under parent id
$child_query = "SELECT max(`rgt`) FROM `#__usergroups` WHERE `id` = ".$parent_id;
$db->setQuery($child_query);
$max_rgt = $db->loadResult();
// calculate left and rgt for new entry
$new_lft = $max_rgt;
$new_rgt = $max_rgt + 1;
// update lft and rgt of all entries having lft , rgt greater than max_rgt
$upd1 = "UPDATE `#__usergroups` SET `lft` = `lft` + 2 WHERE `lft` > ".$max_rgt;
$upd2 = "UPDATE `#__usergroups` SET `rgt` = `rgt` + 2 WHERE `rgt` >= ".$max_rgt;
// insert new child
$insert = "INSERT INTO `#__usergroups`(`parent_id`,`lft`,`rgt`,`title`) VALUES(".$matrix_parent.",".$new_lft.",".$new_rgt.",'".$title."')";
質問が古くてすでに受け入れられている場合でも、このコードを使用してカスタムコンポーネントのグループを追加/更新/削除します
必要なモデルを取得するには、次のことを行う必要がありcom_users
ます。
JModelLegacy::addIncludePath( JPATH_ADMINISTRATOR .
'/components/com_users/models/', 'UsersModel' );
$groupModel = JModelLegacy::getInstance( 'Group', 'UsersModel' );
以下に示すコードが機能する前に。
追加*/更新:
$groupData = array(
'title' => <new/old name of group here>,
'parent_id' => <new/old id of parent group here>,
'id' => <group id here> );
$groupModel->save( $groupData );
*グループが新しく作成された場合はid
必要以上に0
。保存後、グループの名前/タイトルがわかっているため、データベースクエリを使用して新しいIDにアクセスできます。
消去:
$groupModel->delete( $groupIds );
上記のコード全体save(), delete()
は、私のコンポーネントのモデルの1つのメソッドに含まれています。Joomlaはユーザーとグループ間の接続を個別のマップテーブルに保存するため、グループを削除するときにユーザーデータが破損することはありません。このdelete()
メソッドは、引数としてIDの配列を受け取ることに注意してください。