Seite 1 von 1
geschützte container per frontend login
Verfasst: Di 18. Jul 2006, 13:34
von kahuna
habe ne ecke danach gesucht hier und wurde nicht fündig, hoffe ich habe das nicht übersehen,
würde mit der neusten contenido version 4.6.8 gerne folgendes realisieren:
man sieht die seite ganz gewöhnlich, auf der rechten seite sind auch einige container zu sehen (unternavigation, newsletteranmeldung und co) - nun soll man sich einloggen können, darauf hin soll ein zusätzlicher container eben dort erscheinen (kalender) - habt ihr vielleicht ne idee wie man das schnell umsetzen kann? mit dem frontend login habe ich bisher noch garnicht gearbeitet (und warte gerade auf serverfreischaltung und kann daher nur "im kopf basteln"

) .... danke schonmal vorab,
kah
Verfasst: Di 18. Jul 2006, 14:46
von emergence
man könnte das modul das eventuell nur bei eingeloggten usern zu sehen sein soll von folgendem code umschließen
Code: Alles auswählen
<?php
if ($auth->auth["uid"] != "nobody"){
// any code
}
?>
Verfasst: Mi 29. Nov 2006, 00:55
von sherman
emergence hat geschrieben:man könnte das modul das eventuell nur bei eingeloggten usern zu sehen sein soll von folgendem code umschließen
Code: Alles auswählen
<?php
if ($auth->auth["uid"] != "nobody"){
// any code
}
?>
Hat das irgendjemand schon mal getestet. Habe námlich das gleiche Problem, Container für eingeloggte Frontenduser sichtbar zu machen bzw. für Unberechtigte unsichtbar zu lassen. Die Idee ist, bestimmte Informationen, z.B. Preislisten, in den Artikelbeschreibungen den autorisierten Partner zugänglich zu machen, ohne dafür einen kompletten "Partner-Bereich" (neuer Kategorienbaum) anzulegen.
Weiss jmd. wie man so etwas macht?
Danke
Verfasst: Mi 29. Nov 2006, 02:07
von Contenider
In phpBB Foren wir mittels dieser Art das gleiche Konzept realisiert. Ich kenne mich leider nicht sehr gut mit PHP aus, um den entsprechenden Code zu schreiben, jedoch sollte es prinzipiell funktionieren.
Man könnte das Ganze sogar noch verfeinern, indem man es Frontendgruppen abhängig macht - nur so als Idee...
Ich werde es in den kommenden Tagen ausprobieren, wenn jemand sich mir anschliesst und bereits vorher zu Ergebnissen kommt, bitte hier posten.
Verfasst: Mi 29. Nov 2006, 15:23
von HerrB
Hat das irgendjemand schon mal getestet.
Mir liegt zwar auf der Zunge, warum Du es selbst nicht mal testest (mal abgesehen davon, dass der Code von emergence ist), aber ja, es funktioniert so.
Wenn Du noch ein wenig mehr Energie reinsteckst, kannst Du das sogar abhängig von FrontendUser-Gruppen gestalten, mal im Forum suchen.
Gruß
HerrB
Verfasst: Mi 29. Nov 2006, 17:52
von Contenider
HerrB hat geschrieben:Wenn Du noch ein wenig mehr Energie reinsteckst, kannst Du das sogar abhängig von FrontendUser-Gruppen gestalten, mal im Forum suchen.
Ich würde das gerne machen, wonach muss ich suchen?
Verfasst: Mi 29. Nov 2006, 21:19
von HerrB
Nach FrontendGroupMemberCollection. Wenn sich nix findet:
Auf eine bestimmte Gruppe testen:
Code: Alles auswählen
cInclude("classes", "class.frontend.groups.php");
$FEGroupMemberCollection = new FrontendGroupMemberCollection;
$FEGroupMemberCollection->setWhere("idfrontenduser", $auth->auth["uid"]);
$FEGroupMemberCollection->setWhere("idfrontendgroup", <ID der zu prüfenden Gruppe>);
$FEGroupMemberCollection->query();
if ($FEGroupMemberCollection->next())
{
// ... mach was
}
Bei mehreren Gruppen oder variablen Aktionen:
Code: Alles auswählen
cInclude("classes", "class.frontend.users.php");
$FEUser = new FrontendUser;
$FEUser->loadByPrimaryKey($auth->auth["uid"]);
$aGroups = $FEUser->getGroupsForUser();
foreach ($aGroups as $iGroup)
{
switch ($iGroup)
{
case <Eine Gruppen-ID>:
// mach was...
break;
case <Eine andere Gruppen-ID>:
// mach was anderes...
break;
default:
// was Du machst, wenn unbekannte Gruppe vorkommt
}
}
Ungetestet. Ein Test auf Nobody für die uid sollte immer davor stehen (hier nicht dargestellt, siehe oben), um unnötige Datenbankabfragen zu vermeiden.
Gruß
HerrB
Verfasst: Do 30. Nov 2006, 03:06
von Contenider
Danke, setze mich am WE mal dran
Container schützen für Frontenduser
Verfasst: Fr 8. Dez 2006, 19:48
von sherman
Sorry, bin noch absolutes PHP Greenhorn.
Koennte mir vielleicht jemand helfen, das Modul mit dem Code "zu umschliessen"?
Habe mal den Code in das Modul eingefuegt, aber da tut sich gar nichts.
Braeuchte dringend Hilfe vom Forum.
Danke
Verfasst: Mo 11. Dez 2006, 10:45
von HerrB
Code: Alles auswählen
if ($auth->auth["uid"] != "nobody") {
cInclude("classes", "class.frontend.groups.php");
$FEGroupMemberCollection = new FrontendGroupMemberCollection;
$FEGroupMemberCollection->setWhere("idfrontenduser", $auth->auth["uid"]);
$FEGroupMemberCollection->setWhere("idfrontendgroup", <ID der zu prüfenden Gruppe>);
$FEGroupMemberCollection->query();
if ($FEGroupMemberCollection->next())
{
// ... mach was
echo "Abrakadabra";
}
}
Natürlich passiert nur etwas, wenn
- eine Frontend User-Gruppe angelegt und dessen ID im Modul eingetragen wurde (statt <ID der zu prüfenden Gruppe>).
- ein Frontend User angelegt wurde
- der Frontend User in die Gruppe eingetragen wurde
- die Gruppe zum Zugriff auf die Kategorie berechtigt wurde, in der sich der Artikel mit diesem Modul befindet
- man sich mit dem Frontend User-Account auf der Webseite anmeldet
- und den Artikel aufruft
Unter Tips & Tricks hier im Forum findet sich eine Information zu Frontend User-Gruppen, Frontend Usern, geschützten Kategorien und Authentifizierung, da ist das Vorgehen im Detail erläutert.
Gruß
HerrB
Verfasst: Do 14. Dez 2006, 17:57
von sherman
Vielen Dank HerrB!
Hab aber noch ein kleines Problem: Wenn ich den Code in ein Modul einfuege dann leuchtet die rote Laterne und Contenido sagt mir:
Fehler im Modul. Fehlerquelle: eval()'d code on line 9
Ich muss doch noch die query definieren, oder? Mach ich da ne MSQL Abfrage ala SELECT * FROM Frontendgruppe, oder wie habe ich das zu verstehen?
Danke schon mal im Voraus.
Verfasst: Do 14. Dez 2006, 23:00
von HerrB
Hast Du denn auch <ID der zu prüfenden Gruppe> komplett durch die ID der Gruppe ersetzt?
Dieser Code funktioniert und enthält nur als Gruppen-ID die 1:
Code: Alles auswählen
if ($auth->auth["uid"] != "nobody") {
cInclude("classes", "class.frontend.groups.php");
$FEGroupMemberCollection = new FrontendGroupMemberCollection;
$FEGroupMemberCollection->setWhere("idfrontenduser", $auth->auth["uid"]);
$FEGroupMemberCollection->setWhere("idfrontendgroup", 1);
$FEGroupMemberCollection->query();
if ($FEGroupMemberCollection->next())
{
// ... mach was
echo "Abrakadabra";
}
}
Ich muss doch noch die query definieren, oder? Mach ich da ne MSQL Abfrage ala SELECT * FROM Frontendgruppe, oder wie habe ich das zu verstehen?
Nein, das ist ein Beispiel für objektorientierte Programmierung. Die Datenbankabfrage usw. ist in dem setWhere ... query schon drin.
Und das Objekt $FEGroupMemberCollection (beliebige Bezeichnung möglich) repräsentiert als Objekt der Klasse FrontendGroupMemberCollection alle Mitglieder in Gruppen, die definiert sind.
Gruß
HerrB
Verfasst: Fr 15. Dez 2006, 19:19
von sherman
Klappt super - nur leider zu gut.
Der Container, den ich mit dem Code geschützt habe, wird im Backend nicht angezeigt.
Hab versucht, das Problem zu ¨loesen, in dem ich mich auch als Frontend User angelegt habe, aber funktioniert nicht.
Welche Aenderung muss ich vornehmen, damit ich den Container im Backend bearbeiten kann?
Danke
Verfasst: Mo 18. Dez 2006, 13:58
von HerrB
Code: Alles auswählen
if ($FEGroupMemberCollection->next() || $edit)
{
// ... mach was
echo "Abrakadabra";
}
Gruß
HerrB
Verfasst: Mo 18. Dez 2006, 17:49
von sherman
Super!!!
Danke HerrB, wirklich eine grosse Hilfe.