我正在 joomla 2.5 中处理我的组件,我需要通过我的代码动态创建用户组。
正如我在 2.5 中所知道的,joomla 使用嵌套集来维护层次结构,因此当我们插入任何新条目时它可能会影响整个表。
joomla 是否提供任何可直接用于创建用户组的功能?我们可以在其中指定父组和新组的东西将在其下创建。
我正在 joomla 2.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()
我的组件模型之一的方法中。由于 Joomla 将用户和组之间的连接存储在单独的 Map 表中,因此删除组时不会损坏用户数据。请注意,该delete()
方法将 id 数组作为参数。