查询带有类型的用户组

首先,通过打印

echo $lang['usergroups_member'];
echo '<br />';
echo $lang['usergroups_special'];
echo '<br />';
echo $lang['usergroups_specialadmin'];
echo '<br />';
echo $lang['usergroups_system'];

我们可以获取到4种类型的名称。分别对应的是:会员用户组、自定义用户组、自定义管理组、系统用户组。
而在表 pre_common_usergroup 中,仅提供了三种类型。也就是说,自定义用户组、自定义管理组,同时都使用的是字段 type 的 special 这个值。区分它们的关系是用到的是字段 radminid。 如果 radminid=0,表示为自定义用户组。radminid>0,表示为自定义管理组。
逻辑通了。查询如下:
table/table_config.php

class table_config extends discuz_table {
        public function Admin_Groups(){
            return DB::fetch_all("SELECT * FROM ".DB::table('common_usergroup')." WHERE groupid NOT IN (5, 6, 7, 8, 9)");
        }
}

$Admin_Groups = C::t('#yulun_test#config')->Admin_Groups();

$groups = [];
foreach($Admin_Groups as $key=>$group){
        $group['type'] = $group['type'] == 'special' && $group['radminid'] ? 'specialadmin' : $group['type'];
        $groups[] = $group;
}
function array_group_by($arr, $key){
        $grouped = [];
        foreach ($arr as $value) {
        $grouped[$value[$key]][] = $value;
 }
        if (func_num_args() > 2) {
        $args = func_get_args();
        foreach ($grouped as $key => $value) {
                $parms = array_merge([$value], array_slice($args, 2, func_num_args()));
                $grouped[$key] = call_user_func_array('array_group_by', $parms);
        }
    }
return $grouped;
}
$groups = array_group_by($groups, 'type');

插件使用

$Admin_Setting_Groups = '';
foreach($groups as $key=>$optgroup){
        $Admin_Setting_Groups .= '<optgroup label="'.$lang['usergroups_'.$key].'">';
        foreach($optgroup as $option){
            $Admin_Setting_Groups .= '<option value="'.$option['groupid'].'">'.$option['grouptitle'].'</option>';
        }
        $Admin_Setting_Groups .= '</optgroup>';
}

showsetting(标题, '', '', '<select name="Groups[]" multiple="multiple" size="10">'.$Admin_Setting_Groups.'</select>', '', '', '');

模板使用

<select name="groupid[]" multiple="multiple" size="10">
<!--{loop $groups $catname $cats}-->
<optgroup label="{$catname}">
    <!--{loop $cats $group}-->
    <option value="{$group['groupid']}">{$group['grouptitle']}</option>
    <!--{/loop}-->
</optgroup>
<!--{/loop}-->
</select>