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')
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
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
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);
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;
}
}
}