it-swarm.com.de

Wie erhalte ich die Benutzergruppen-ID nach Gruppennamen?

Ich benutze JM3.4. Ich habe einige benutzerdefinierte Benutzergruppen hinzugefügt. Und ich habe ein Feld hinzugefügt, in dem Benutzer Benutzergruppen bei der Registrierung auswählen können. Ich werde folgenden Code hacken:

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

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

Ich werde überprüfen, welcher Benutzer ausgewählt hat, und die vom System konfigurierte Gruppe überschreiben. Deshalb habe ich folgenden Code zwischen den beiden vorhergehenden Codezeilen eingefügt:

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

Meine Frage ist, wie kann ich die Gruppen-ID hier nicht fest codieren, statt 10,11 sollte es so aussehen: getGroupID('group0'), getGroupID('group1')

6
Rob L

Ich bin mir nicht sicher, ob Joomla eine bessere Möglichkeit bietet, aber Sie können Ihre eigene Funktion erstellen und die Datenbank abfragen:

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
}

Verwenden Sie dann Folgendes, um die ID einer Gruppe basierend auf dem Namen abzurufen:

echo (getGroupId("Administrator"));

Dies gibt die ID der Gruppe mit dem Namen "Administrator" aus, sofern vorhanden.

$groups sieht ungefähr so ​​aus:

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
        )
...

Zusätzliche Informationen

Dies ist in Ihrem Fall möglicherweise nicht hilfreich, aber JUserHelper hat eine Methode namens getUserGroups ( https://api.joomla.org/cms-3/classes/JUserHelper.html# method_getUserGroups ) listet alle Gruppen auf, zu denen ein Benutzer gehört. Verwendung:

getUserGroups(integer $userId) : array
4
johanpw

Bitte vermeiden Sie Rahmenänderungen. Dies führt nach dem Update zu einer System-/Funktionsstörung. Erstellen Sie ein Plug-in für den Benutzertyp und bearbeiten Sie das Ereignis "onUserAfterSave". Auf diese Weise sind Sie update-sicher. Fügen Sie der Plug-in-XML-Datei die richtigen Parameterfelder (group0 und group1) hinzu. Plugins haben ihre eigene Konfiguration, sodass Sie diese Parameter nicht jedes Mal abrufen können, wenn Sie sie benötigen, und sie in der Benutzeroberfläche ändern können.

Hier ist eine vollständige Anleitung zu Plugins-Ereignissen:

Hier finden Sie ein Plugin-Beispiel:

Hier ist ein Feldtyp, den Sie als Parameter in der Plugin-Konfiguration verwenden möchten

2
Artur Stępień

Sie können eine eigene Funktion erstellen, die Sie aufrufen können, um die Gruppen-ID wie folgt abzurufen:

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

dann nenne es wie folgt:

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

Seit Joomla 3.6.3 (mit dem Zusatz von serGroupsHelper class):

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