Weiß jemand, wie man eine Template-Abfrage nach der ID einer Mitgliedergruppe gestalten müsste?
Ich möchte, je nachdem welcher Mitgliedergruppe der eingeloggte Nutzer angehört, etwas anderes anzeigen.
Druckbare Version
Weiß jemand, wie man eine Template-Abfrage nach der ID einer Mitgliedergruppe gestalten müsste?
Ich möchte, je nachdem welcher Mitgliedergruppe der eingeloggte Nutzer angehört, etwas anderes anzeigen.
Ungetestet, aber an sich so:
PHP-Code:
<?php
// Mitgliedsgruppen auslesen.
$memberGroups = \FrontendUser::getInstance()->groups ?: array();
// Überpr+fe Mitgliedsgruppe 3
if (in_array('3', $memberGroups)): ?>
User ist in Gruppe drei
<?php endif; ?>
Getestet, funktioniert ;-)
1 steht für die ID der MitgliedergruppeCode:<?php $this->import('FrontendUser', 'User'); ?>
<?php if($this->User->isMemberOf(1)) : ?>
<strong>Hallo</strong>
<?php endif; ?>
Und wenn der User mehreren Gruppen angehört?
Man könnte doch auch einfach mehrere CEs anlegen und schützen (nur bestimmten Gruppen anzeigen).
Oder habe ich die Anforderung das falsch verstanden?
fe_custom.html5
Oder auch ohne $this->extend in ein j_xxx oder moo_xxx Template schreiben und im Layout einbinden. Oder über Head-Tags als Datei reinholen {{file::inc-different_css.html5}}PHP-Code:
<?php
if(\FrontendUser::getInstance()->isMemberOf(2)) // Piano Students
{
$GLOBALS['TL_CSS'][] = 'files/css/group-piano_students.css|static';
}
else
{
$GLOBALS['TL_CSS'][] = 'files/css/group-default.css|static';
}
$this->extend('fe_page');
?>
Edit: Ach Mist, sehe gerade, es geht dir ja gar nicht um CSS, sorry. Aber vielleicht kannst du es trotzdem gebrauchen.
Herzlichen Dank für eure Hilfe, mit Ainschys Code bin ich prima weitergekommen.
Ich ärgere mich nur im Nachhinein, dass ich da nicht selbst drauf gekommen bin ... den Code kenne ich vom Prinzip schon aus der dcaconfig, habe nur nicht daran gedacht, dass der auch in normalen Templates funktionieren würde :D:o
Das ist die neuere Methode, die man auch überall in den Core-Dateien sieht. Wenn du noch weitere Eigenschaften des Members brauchst:PHP-Code:
\FrontendUser::getInstance()->isMemberOf([GroupID])
PHP-Code:
$userObj = \FrontendUser::getInstance();
// Felder Beispiel
echo $userObj->firstname;
echo $userObj->lastname;
// Alle Felder ansehen
var_dump($userObj->getData());
Andreas, weißt du, wie save() unter contao 3.5.33 umgesetzt wird?
Die print_r Ausgabe ergibt:PHP-Code:
<?php
$user = \FrontendUser::getInstance();
$groups = $user->groups;
$groups[] = "11";
$user->groups = serialize($groups);
$user->save();
// print_r(['gruppen'=>$user->groups]);
?>
abgespeichert wird aber nicht.Zitat:
Array ( [gruppen] => a:2:{i:0;s:1:"8";i:1;s:2:"11";} )
Das ist eigentlich richtig. Ist das vielleicht ein Bug?Bei mir funktioniert das auch nicht.
Vielleicht weiß da jemand mehr? Ja, ich.PHP-Code:
$member = \FrontendUser::getInstance();
dump($member->groups); // 1, 2 - bei jedem Aufruf, also nicht gespeichert
#$member->groups = array(42, 99);
$member->groups = serialize(array(42, 99));
$member->save();
dump($member->groups); // 42, 99
Ah, ich hab's. Wir erzeugen kein MemberModel. Es muss so sein.
Für dich:PHP-Code:
$memberObj = \FrontendUser::getInstance();
$memberModel = \MemberModel::findByPk($memberObj->id);
dump($memberModel->groups);
$memberModel->groups = serialize(array(42, 99));
$memberModel->save();
dump($memberModel->groups);
PHP-Code:
$user = \FrontendUser::getInstance();
$user = \MemberModel::findByPk($user->id);
dump($user->groups);
$groups = deserialize($user->groups);
$groups[] = '11';
$groups = serialize($groups);
$user->groups = $groups;
$user->save();
dump($user->groups);