2

私はjoomla2.5でコンポーネントに取り組んでおり、コードを介して動的にユーザーグループを作成する必要があります。

私が2.5で知っているように、joomlaは階層構造を維持するためにネストされたセットを使用しているため、新しいエントリを挿入するとテーブル全体に影響を与える可能性があります。

joomlaは、ユーザーグループを作成するために直接使用できる機能を提供しますか?親グループを指定できるものと、その下に新しいグループが作成されます。

4

2 に答える 2

4

自分で解決しました

私の場合、特定のグループのすぐ下に子グループを挿入する必要があります(以下のコードでは$ 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."')";
于 2012-07-17T09:47:10.123 に答える
4

質問が古くてすでに受け入れられている場合でも、このコードを使用してカスタムコンポーネントのグループを追加/更新/削除します

必要なモデルを取得するには、次のことを行う必要があり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の配列を受け取ることに注意してください。

于 2013-06-21T09:31:23.007 に答える