Servus,
hat jemand eine Ahnung ob es möglich ist, registrierten Usern nach der Anmeldung eine bestimmte Seite zuzuweisen auf die er automatisch geleitet wird. Könnte auch nach Gruppen sortiert sein, oder eine Seite für alle registrierten User.
Danke
Maler
Reg. User bei Anmeldung auf bestimmte Seite leiten.
(7 posts) (3 voices)-
vor 2 years veröffentlicht #
-
Hallo Maler,
ja, das geht!
Hier ein mein Vorschlag:
Folgende Gegebenheiten nehme ich an:
- Jeder Benutzer bekommt eine eigene Seite deren Sichtbarkeit auf privat gesetzt wird.
- Alle Benutzerseiten befinden sich direkt in der Hauptebene
- Gibt es keine Benutzerseite, dann soll der Benutzer auf die Startseite umgeleitet werden.
- Wenn es eine Seite gibt die den gleichen Namen wie der Benutzer hat, dann wird der Benutzer nach der Anmeldung auf diese Seite geleitet.
Zuerst einmal benötigst Du eine Seite vom Typ code. Auf diese Seite sollen alle Benutzer weiter geleitet werden. Mit dem PHP-Code dieser Seite wird der Benutzer dann auf seine Benutzerseite weiter geleitet. Die Sichtbarkeit dieser Seite soll auf versteckt gesetzt werden.
Ich nenne die Seite weiterleitung.
In meiner Website Baker Konfiguration ist eingestellt, dass Seiten im Verzeichnis pages angelegt werden und die Erweiterung für Seiten .php sein soll.
die Seite weiterleitung lege ich direkt in der Hauptebene an.
Nach dem Erstellen gibt es also eine Seite weiterleitung.php im Verzeichnis pages.
Diese Seite ist über http://MeineDomain/pages/weiterleitung.php erreichbar.
Hier der Inhalt meines Code-Bereiches der Seite weiterleitung:
global $wb; $wb_startseite = WB_URL.PAGES_DIRECTORY."/"; if(FRONTEND_LOGIN == 'enabled' && is_numeric($wb->get_session('USER_ID'))) { $benutzer_seite = WB_URL.PAGES_DIRECTORY."/".$wb->get_session('USERNAME').PAGE_EXTENSION; if(!($test = fopen($benutzer_seite,"r"))) { header('location: '.$wb_startseite); exit; } else { header('location: '.$benutzer_seite); exit; } } else { header('location: '.$wb_startseite); exit; }
Der Code macht folgendes:
Ruft ein nicht registrierter Benutzer die Seite auf, wird er direkt auf die Startseite weitergeleitet.
Wenn in den Optionen die Anmeldung eingeschaltet ist (also ein Login auf der Seite angezeigt wird) und gleichzeitig die ID eines Benutzers als Session-Cookie gesetzt ist (also wenn ein Benutzer angemeldet ist), nur dann wir der Rest ausgeführt.
Das ist folgendes:
In eine Variable $benutzer_seite wird der Link zur Benutzerseite übergeben.
In der Konstante WB_URL ist der komplette URL zur Website Baker Installation hinterlegt (z.B. http://MeineDomain )
Die Konstante PAGES_DIRECTORY enthält das Verzeichnis in dem die Seiten angelegt werden (kann in den erweiterten Optionen ggf. geändert werden). Bei mir ist dies /pages
$wb->get_session('USERNAME') ist der Name des aktuell angemeldeten Benutzers (z.B. admin beim Administrator)
Die Konstante PAGE_EXTENSION enthält die Dateinamenerweiterung (bei mir .php).
Die Benutzerseite für den Administrator wäre also http://MeineDomain/pages/admin.php
Danach wird geprüft ob es die Benutzerseite auch gibt. Wenn ja, dann wird auf die jeweilige Benutzerseite umgeleitet, wenn nicht, dann wird auf die Startseite umgeleitet.
Jetzt muss nur noch dafür gesorgt werden, dass nach der Anmeldung eines Benutzers auch die Umleitungsseite aufgerufen wird.
Dazu editierst Du den Bereich des Login-Feldes in der index.php Deines Templates.
Am Beispiel des Template Round würde dies so aussehen:
Du suchst folgenden Code
<form name="login" action="<?php echo LOGIN_URL; ?>" method="post">
und änderst ihn in diesen:
< form name="login" action="<?php echo LOGIN_URL; ?>?redirect=<?php echo WB_URL.PAGES_DIRECTORY."/weiterleitung.php";?>" method="post">
Das war es schon.
Wenn Du anstelle von Benutzerseiten Gruppen-Seiten haben möchtest, dann brauchst Du auf der Umleitungsseite nur
$wb->get_session('USERNAME')
gegen
strtolower($wb->get_group_name())
auszutauschen.
Mein Benutzer admin ist in der Gruppe Administrators. Wenn ich eine Seite Administrators erstelle, wird im Verzeichnis pages eine Datei administrators.php angelegt.
$wb->get_group_name() enthält den Namen der Gruppe in der der aktuell angemeldete Benutzer ist.
strtolower() sogt dafür, dass alle Großbuchstaben in Kleinbuchstaben verwandelt werden.
Allerdings dürfte ein Benutzer nicht in mehreren Gruppen sein. Wäre ein Benutzer in der Gruppe Benutzer und in der Gruppe Administrators, wäre der Inhalt von $wb->get_group_name() folgender: Benutzer,Administrators
Ich hoffe das alles hilft Dir etwas weiter.
Viele Größe,
Daniel</form>vor 2 years veröffentlicht # -
Hi Daniel,
das ist ja gigantisch was Du da schreibst. So aufwendig sollte es gar nicht sein.
Jetzt genau, ich habe zwar verschiedene Gruppen angelegt, die aber nach der Anmeldung alle auf ein und die selbe Seite geleitet werden sollen (normalerweise landen sie wieder auf "HOME". Die Seite nennt sich "INTERN" und ist bereits im Hauptverzeichnis vorhanden. Sichtbarkeit auf "öffentlich" die Unterseiten jedoch auf "privat".
Ist es nötig eine Seite komplett neu anzulegen, oder reicht es einen Code zu ändern.
Wenn ja, wo und wie? Ich weiß, ist fast schon unverschämt, hab aber davon wenig Ahnung.
Danke erstmal
Hermannvor 2 years veröffentlicht # -
Hallo Hermann,
wenn alle Besucher immer auf die gleiche Seite geleitet werden sollen, reicht es völlig die index.php Deines Templates so anzupassen wie oben angegeben.
Anstelle von weiterleitung.php solltest du natürlich Deine Zielseite angeben.
Viele Grüße,
Danielvor 2 years veröffentlicht # -
Hi evtl hilft die Lösung hier ... ne spielerei mit nem persönlichen login ...
funnktioniert über einen zwischenstop über einer code section die dir die
userid/namen ausliesst
http://www.escpro.de/esc/posts/benutzer-auf-private-seite-weiterleiten-132.php
gruss escprovor 2 years veröffentlicht # -
Hallo Michael,
gute Idee!
Doch was ist z.B. mit
$admin->get_group_name()
Probier das mal mit WB 2.8 aus.
Du gehst auch davon aus, dass die Seiten immer im Pages Verzeichnis liegen. Das ist aber nicht bei jedem der Fall.
So etwas:
echo'<meta http-equiv="refresh" content="5; url='; echo WB_URL; echo'/pages/'; echo $admin->get_group_name(); echo '.php'; echo'">';
Würde ich dringend ausbessern.
In PHP gibt es einen Verknüpfungsoperator, dass ist der Punkt ( . ).
Dein Beispiel würde dann so aussehen:
echo '< meta http-equiv="refresh" content=5 url="'.WB_URL.'/pages/'.$admin->get_group_name().'.php">';
Ist doch gleich viel sauberer, oder?
Naja, ich bin ja auch kein PHP Freak :-)
Im Grunde genommen ist Deine Lösung meiner sehr ähnlich.
Viele Grüße,
Daniel
P.s.: In der Klasse wb (datei class.wb.php im Verzeichnis framework) sind ganz viele, tolle Funktionen auf die man zurück greifen kann. Dann ist es so gut wie unnötig irgend welche statischen Angaben zu machen.</meta>vor 2 years veröffentlicht # -
Hab jetzt eine Lösung gefunden. Einfach mal rumprobiert. Wahrscheinlich nicht optimal aber es funktioniert.
Habe eine Seite weiterleitung.php erstellt (versteckt) Darin steht:
echo'<meta http-equiv="refresh" content="5; url='; echo WB_URL; echo'/pages/'; echo '/intern.php'; echo'">';
Im Template hab ich geändert von
<form name="login" action="<?php echo LOGIN_URL; ?>" method="post">
Jetzt funktionierts, nach der Anmeldung werden die User, nach ca. 5 Sek. auf die Seite "INTERN" weitergeleitet.
Habt vielen Dank
Hermann</form></meta>vor 2 years veröffentlicht #
Antwort
Du musst angemeldet sein, um einen Beitrag zu schreiben.
