web-dev-qa-db-fra.com

Comment obtenir l'identifiant du groupe d'utilisateurs par nom de groupe?

J'utilise JM3.4. J'ai ajouté des groupes d'utilisateurs personnalisés. Et j'ai ajouté un champ permettant à l'utilisateur de sélectionner un groupe d'utilisateurs lors de l'inscription. Je vais pirater le code suivant:

// Get the default new user group, Registered if not specified.
$system = $params->get('new_usertype', 2);

$this->data->groups[] = $system;

Je vais vérifier quel utilisateur a été sélectionné et remplacer le groupe configuré par le système. J'ai donc ajouté le code suivant entre les deux lignes de code précédentes:

if (!strcmp($this->data->role, "group0"))
{
    $system = 10;
}
elseif (!strcmp($this->data->role, "group1"))
{
    $system = 11;
}

Ma question est la suivante: comment ne pas coder en dur le groupe id ici, au lieu de 10,11, cela devrait ressembler à quelque chose comme: getGroupID('group0'), getGroupID('group1')

6
Rob L

Je ne sais pas si Joomla dispose d'un meilleur moyen de le faire, mais vous pouvez créer votre propre fonction et interroger la base de données:

function getGroupId($groupName){
    $db = JFactory::getDBO();
    $db->setQuery($db->getQuery(true)
        ->select('*')
        ->from("#__usergroups")
    );
    $groups = $db->loadRowList();
    foreach ($groups as $group) {
        if ($group[4] == $groupName) // $group[4] holds the name of current group
            return $group[0];        // $group[0] holds group ID
    }
    return false; // return false if group name not found
}

Ensuite, utilisez ce qui suit pour obtenir l'ID d'un groupe basé sur son nom:

echo (getGroupId("Administrator"));

Cela fera écho à l'ID du groupe appelé "Administrateur", s'il existe.

$groups ressemblera à ceci:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 0
            [2] => 1
            [3] => 22
            [4] => Public
        )

    [1] => Array
        (
            [0] => 2
            [1] => 1
            [2] => 8
            [3] => 19
            [4] => Registered
        )
...

Informations supplémentaires

Cela pourrait ne pas aider dans votre cas, mais JUserHelper a une méthode appelée getUserGroups ( https://api.joomla.org/cms-3/classes/JUserHelper.html# method_getUserGroups ) qui listera tous les groupes auxquels un utilisateur appartient. Usage:

getUserGroups(integer $userId) : array
4
johanpw

S'il vous plaît éviter les changements de cadre. Cela vous mènera à une rupture système/fonctionnalité après la mise à jour. Créez un plug-in de type utilisateur et travaillez-le sur un événement appelé onUserAfterSave. Ainsi, vous serez protégé contre les mises à jour. Ajoutez les champs de paramètre appropriés (group0 et group1) au fichier XML du plug-in. Les plugins ont leur propre configuration, vous ne pouvez donc pas obtenir ces paramètres à chaque fois que vous en avez besoin et les modifier dans l'interface utilisateur.

Voici un guide complet des événements de plugins:

Ici vous pouvez trouver des exemples de plugins:

Voici un type de champ que vous souhaitez utiliser comme paramètre dans la configuration du plugin

2
Artur Stępień

Vous pouvez créer votre propre fonction que vous pouvez appeler pour obtenir l'identifiant du groupe sous la forme:

public function getGroupId($groupName)
{
   $db = JFactory::getDbo();
   $select = "select id from #__usergroups where title='".$groupName."'";
   $db->setQuery($select);
   $db->query();
   $data = $db->loadObject();

   $groupId = $data->id;

   if(empty($groupId))
   $groupId = 2;

   return $groupId;
}

puis appelez-le comme:

$system = $this->getGroupId($this->data->role);
2
shine

Depuis Joomla 3.6.3 (avec l’ajout de serGroupsHelper class):

function getGroupId($groupName){
    foreach (JHelperUsergroups::getInstance()->getAll() as $group) {
        if ($group->title == $groupName) {
            return $group->id;
        }
    }
}
0
John Rix