Sto usando JM3.4. Ho aggiunto alcuni gruppi di utenti personalizzati. E ho aggiunto un campo per consentire all'utente di selezionare il gruppo di utenti durante la registrazione. Ho intenzione di hackerare il seguente codice:
// Get the default new user group, Registered if not specified.
$system = $params->get('new_usertype', 2);
$this->data->groups[] = $system;
Ho intenzione di verificare quale utente ha selezionato e ignorare il gruppo configurato dal sistema. Quindi ho aggiunto il seguente codice tra le due precedenti righe di codice:
if (!strcmp($this->data->role, "group0"))
{
$system = 10;
}
elseif (!strcmp($this->data->role, "group1"))
{
$system = 11;
}
La mia domanda è: come posso non codificare l'ID di gruppo qui, invece di 10,11, dovrebbe essere qualcosa del tipo: getGroupID('group0')
, getGroupID('group1')
Non sono sicuro che Joomla abbia un modo migliore per farlo, ma puoi creare la tua funzione e interrogare il database:
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
}
Quindi utilizzare quanto segue per ottenere l'ID di un gruppo in base al nome:
echo (getGroupId("Administrator"));
Questo farà eco all'ID del gruppo chiamato "Amministratore", se esiste.
$groups
avrà un aspetto simile al seguente:
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
)
...
Informazioni aggiuntive
Questo potrebbe non essere d'aiuto nel tuo caso, ma JUserHelper
ha un metodo chiamato getUserGroups
( https://api.joomla.org/cms-3/classes/JUserHelper.html# method_getUserGroups ) che elencherà tutti i gruppi a cui appartiene un utente. Uso:
getUserGroups(integer $userId) : array
Si prega di evitare modifiche al framework. Questo ti porterà all'interruzione del sistema/funzionalità dopo l'aggiornamento. Crea un plug-in di tipo Utente e lavoraci su un evento chiamato onUserAfterSave. In questo modo sarai sicuro per l'aggiornamento. Aggiungi i campi dei parametri corretti (gruppo0 e gruppo1) al file XML del plug-in. I plugin hanno una propria configurazione, quindi non puoi ottenere quei parametri ogni volta che ne hai bisogno e modificarli nell'interfaccia utente.
Ecco una guida completa agli eventi dei plugin:
Qui puoi trovare un esempio di plugin:
Ecco un tipo di campo che si desidera utilizzare come parametro nella configurazione del plug-in
Puoi creare la tua funzione che puoi chiamare per ottenere l'id del gruppo come:
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;
}
quindi chiamalo come:
$system = $this->getGroupId($this->data->role);
Da Joomla 3.6.3 (con l'aggiunta di serGroupsHelper class):
function getGroupId($groupName){
foreach (JHelperUsergroups::getInstance()->getAll() as $group) {
if ($group->title == $groupName) {
return $group->id;
}
}
}