Benutzerabhängiger Inhalt
Benutzerabhängiger Inhalt
Hallo Ihrs,
ich bezeichne mich noch als Anfänger von CMSms und bräuchte mal eure Hilfe bzw. Anregungen.
Mein Forum ist fertig und es gibt 2 Benutzergruppen Moderatoren und normale Benutzer.
Nun möchte ich auf meiner Seite eine Seite einbauen, die nur angemeldete Leute sehen dürfen, die auch der Gruppe Moderatoren angehören oder halt auch einer neuen Gruppe.
Am liebsten wäre mir auch das der Menüpunkt nur von den ausgewählten gesehen werden darf.
Nun hab ich schon sowas hier gefunden, aber das ist alles zu neu für mich
{cms_module module=FrontEndUsers form="silent"}
{if $customcontent_loggedin > 0}
Willkommen
{$customcontent_loginname}
{else}
Sie sind nicht authorisiert, diese Daten zu sehen.
{/if}
Könnt ihr mir vllt. helfen bzw. gibt es gescheite Tutorials zu dem Thema
ich bezeichne mich noch als Anfänger von CMSms und bräuchte mal eure Hilfe bzw. Anregungen.
Mein Forum ist fertig und es gibt 2 Benutzergruppen Moderatoren und normale Benutzer.
Nun möchte ich auf meiner Seite eine Seite einbauen, die nur angemeldete Leute sehen dürfen, die auch der Gruppe Moderatoren angehören oder halt auch einer neuen Gruppe.
Am liebsten wäre mir auch das der Menüpunkt nur von den ausgewählten gesehen werden darf.
Nun hab ich schon sowas hier gefunden, aber das ist alles zu neu für mich
{cms_module module=FrontEndUsers form="silent"}
{if $customcontent_loggedin > 0}
Willkommen
{$customcontent_loginname}
{else}
Sie sind nicht authorisiert, diese Daten zu sehen.
{/if}
Könnt ihr mir vllt. helfen bzw. gibt es gescheite Tutorials zu dem Thema
Last edited by evoleena on Fri May 22, 2009 5:10 pm, edited 1 time in total.
Re: Benutzerabhängiger Inhalt
Zunächst ein wenig Theorie... 
Das Modul CustomContent bezieht seine Informationen über den Login-Status eines Webseitenbesuchers aus dem FrontendUsers Modul.
Damit das CustomContent Modul diese Daten auch beziehen kann, muss das FrontendUsers Modul auch "aktiv" sein.
D.h. es muss ebenfalls auf der Seite aufgerufen werden wo CustomContent aufgerufen wird.
Und das noch vor CustomContent.
Das FrontendUsers Modul zeigt als Standardeinstellung, wenn der Besucher nicht eingeloggt ist, das Login-Formular an.
Anderenfalls das Logout-Formular.
Das ist aber nicht das, was man unbeingt auf jeder Seite haben will bzw. manchmal kommt das Login-Formular erst nach dem Inhalt wodurch man den Inhalt nicht mit der {if}-Abfrage filtern kann, da die Variablen dazu erst ein paar Zeilen später existieren (hoffe Du kannst mir folgen).
D.h. folgendes Beispiel wird nicht funktionieren:
Daher gibt es den sogenannten "Silent-Modus" (form="silent").
D.h. das Modul wird ganz normal ausgeführt aber anstatt jetzt etwas anzuzeigen, werden dem Template nur die Variablen über den jeweils eingeloggten Benutzer bereitgestellt.
(Benutzername etc.)
Somit kann man auch auf Seiten auf denen das FrontendUsers Modul nicht zu sehen sein soll mit CustomContent den Loginstatus abfragen und die Inhalte entsprechend filtern.
Es empfielt sich die beiden Module FrontendUsers und CustomContent so wie in dem von Dir gefundenen Beispiel im Seitentemplate gleich zu Beginn der Seite (am besten direkt unter dem -Tag) zu platzieren:
Damit ist sichergestellt, dass die nötigen Variablen für eine entsprechende {if}-Abfrage für geschützte Inhalte immer bereitstehen.
So.
Im Prinzip ist das schon alles was Du brauchst.
Alles was zwischen {if} und {else} steht ist nicht öffentlich zugänglich.
Alles andere ist öffentlich.
In Deinem Seitentemplate steht also irgendwo {content}.
Dort wird später der Seiteninhalt ausgegeben.
Wenn Du jetzt um diesen Inhalt diese {if}-Konstruktion baust, dann wird der Inhalt nur angezeigt, wenn ein Benutzer eingeloggt ist.
Wenn Du das allerdings einfach so im Template machst, dann gilt das für alle Seiten.
D.h. Du müsstest ein neues Template für "geschützte" Seiten anlegen und jedesmal, wenn Du eine neue Seite erstellst, die nur eingeloggten Benutzern angezeigt werden soll, dieser Seite das neue Template zuweisen.
Soviel zur kurzen Erklärung.
Es gab dazu schonmal eine etwas ausführlichere Variante:
http://forum.cmsmadesimple.org/index.ph ... 898.0.html
Ich hoffe das hilft Dir weiter.

Das Modul CustomContent bezieht seine Informationen über den Login-Status eines Webseitenbesuchers aus dem FrontendUsers Modul.
Damit das CustomContent Modul diese Daten auch beziehen kann, muss das FrontendUsers Modul auch "aktiv" sein.
D.h. es muss ebenfalls auf der Seite aufgerufen werden wo CustomContent aufgerufen wird.
Und das noch vor CustomContent.
Das FrontendUsers Modul zeigt als Standardeinstellung, wenn der Besucher nicht eingeloggt ist, das Login-Formular an.
Anderenfalls das Logout-Formular.
Das ist aber nicht das, was man unbeingt auf jeder Seite haben will bzw. manchmal kommt das Login-Formular erst nach dem Inhalt wodurch man den Inhalt nicht mit der {if}-Abfrage filtern kann, da die Variablen dazu erst ein paar Zeilen später existieren (hoffe Du kannst mir folgen).
D.h. folgendes Beispiel wird nicht funktionieren:
Code: Select all
{if $customcontent_loggedin}
{content}
{else}
Sie sind nicht authorisiert, diese Daten zu sehen.
{/if}
{cms_module module="FrontendUsers"}
{cms_module module="CustomContent"}
D.h. das Modul wird ganz normal ausgeführt aber anstatt jetzt etwas anzuzeigen, werden dem Template nur die Variablen über den jeweils eingeloggten Benutzer bereitgestellt.
(Benutzername etc.)
Somit kann man auch auf Seiten auf denen das FrontendUsers Modul nicht zu sehen sein soll mit CustomContent den Loginstatus abfragen und die Inhalte entsprechend filtern.
Es empfielt sich die beiden Module FrontendUsers und CustomContent so wie in dem von Dir gefundenen Beispiel im Seitentemplate gleich zu Beginn der Seite (am besten direkt unter dem -Tag) zu platzieren:
Code: Select all
<__html>
<head>
...
</head>
</__body>
{cms_module module=FrontEndUsers form="silent"}
{cms_module module='CustomContent'}
...
<__body>
</__html>
So.
Im Prinzip ist das schon alles was Du brauchst.
Alles was zwischen {if} und {else} steht ist nicht öffentlich zugänglich.
Alles andere ist öffentlich.
In Deinem Seitentemplate steht also irgendwo {content}.
Dort wird später der Seiteninhalt ausgegeben.
Wenn Du jetzt um diesen Inhalt diese {if}-Konstruktion baust, dann wird der Inhalt nur angezeigt, wenn ein Benutzer eingeloggt ist.
Wenn Du das allerdings einfach so im Template machst, dann gilt das für alle Seiten.
D.h. Du müsstest ein neues Template für "geschützte" Seiten anlegen und jedesmal, wenn Du eine neue Seite erstellst, die nur eingeloggten Benutzern angezeigt werden soll, dieser Seite das neue Template zuweisen.
Soviel zur kurzen Erklärung.
Es gab dazu schonmal eine etwas ausführlichere Variante:
http://forum.cmsmadesimple.org/index.ph ... 898.0.html
Ich hoffe das hilft Dir weiter.
Re: Benutzerabhängiger Inhalt
Gut die Erklärung war schonmal sehr hilfreich.
In dem Link steht das auch mit der Variante mit dem Menü drin. Klingt aber auch sehr schwer.
Mein Menüs sieht so aus:
Nun könnte ich ja vorher den $node->menutext abfragen ob der mit member_ anfängt und wenn er das macht, so er abchecken ob der angemeldete Benutzer zu meiner Gruppe Moderatoren gehört.
Das würde doch auch bedeuten, das ich das in meinem Menütemplate einbauen muss oder?
Wie müsste die Abfrage dann aussehen für den menutext?
Gruß
Evo
In dem Link steht das auch mit der Variante mit dem Menü drin. Klingt aber auch sehr schwer.
Mein Menüs sieht so aus:
Code: Select all
{foreach from=$nodelist item=node}
<a href="{if $node->id == 15}/{else}{$node->url}{/if}">
<div class="button">
{$node->menutext}
</div>
</a>
{/foreach}
Das würde doch auch bedeuten, das ich das in meinem Menütemplate einbauen muss oder?
Wie müsste die Abfrage dann aussehen für den menutext?
Gruß
Evo
Last edited by evoleena on Fri May 22, 2009 5:45 pm, edited 1 time in total.
Re: Benutzerabhängiger Inhalt
Ha ich glaub ich habs. Scheint zumindest zu funktionieren
meine betroffene Seite heist Test und so sieht nun mein Menü aus
meine betroffene Seite heist Test und so sieht nun mein Menü aus
Code: Select all
{foreach from=$nodelist item=node}
{if $node->menutext =='Test'}
{if $ccuser->loggedin() && $ccuser->memberof('Moderatoren')}
<a href="{if $node->id == 15}/{else}{$node->url}{/if}">
<div class="button">
{$node->menutext}
</div>
</a>
{/if}
{else}
<a href="{if $node->id == 15}/{else}{$node->url}{/if}">
<div class="button">
{$node->menutext}
</div>
</a>
{/if}
{/foreach}
Re: Benutzerabhängiger Inhalt
Geht auch.
Aber mir ist gerade etwas viel besseres eingefallen.
Ein Template für alle!
Seitenstruktur wie folgt anlegen:
Inhalt im Template wie folgt filtern:
Menü wie folgt filtern:
Wenn es funktioniert, viel Spaß.
Wenn nicht, nochmal fragen.
Edit:
Hab das ganze noch ein wenig verbessert.
Aber mir ist gerade etwas viel besseres eingefallen.
Ein Template für alle!
Seitenstruktur wie folgt anlegen:
Code: Select all
1 Öffentlicher Bereich (Inhaltstyp: SectionHeader; nicht im Menü sichtbar; nicht aktiv)
1.1 Home
1.2 Impressum
1.3 Kontakt
2 Mitgliederbereich (allgemein) (Inhaltstyp: SectionHeader; nicht im Menü sichtbar; nicht aktiv)
2.1 Allgemein 1
2.2 Allgemein 2
2.3 Allgemein 3
3 Mitgliederbereich (Moderatoren) (Inhaltstyp: SectionHeader; nicht im Menü sichtbar; nicht aktiv)
3.1 Moderatorseite 1
3.2 Moderatorseite 2
3.3 Moderatorseite 3
Inhalt im Template wie folgt filtern:
Code: Select all
{if $ccuser->loggedin()}
{* Inhalte nur für eingeloggte User *}
{content block="general" label="Inhalt für eingeloggte Benutzer"}
{else}
{* öffentliche Inhalte *}
{content}
{/if}
{if $ccuser->loggedin() && $ccuser->memberof('NAME DEINER MODERATOREN BENUTZERGRUPPE')}
{* Inhalte nur für eingeloggte User einer bestimmen Benutzergruppe *}
{content block="moderator" label="Inhalt für Moderatoren"}
{/if}
Menü wie folgt filtern:
Code: Select all
{* öffentliches Menü *}
{menu template="Dein Menü Template" start_element="1.1" show_root_siblings="1" collapse="1"}
{* Menü nur für eingeloggte User *}
{if $ccuser->loggedin()}
{menu template="Dein Menü Template" start_element="2.1" show_root_siblings="1" collapse="1"}
{/if}
{* Menü nur für eingeloggte Benutzer einer bestimmten Gruppe *}
{if $ccuser->loggedin() && $ccuser->memberof('Name der Gruppe')}
{menu template="Dein Menü Template" start_element="3.1" show_root_siblings="1" collapse="1"}
{/if}
Wenn nicht, nochmal fragen.
Edit:
Hab das ganze noch ein wenig verbessert.
Last edited by NaN on Sat May 23, 2009 1:23 am, edited 1 time in total.
Re: Benutzerabhängiger Inhalt
Ich habs jetzt so gelassen wie ich es gebaut hatte, damit komme ich ganz gut klar.
So nun wollte ich noch abfragen welcher Benutzer angemeldet ist, ich dachte das das mit geht.
Aber leider scheint der Name des angemeldeten Benutzers anders zu heißen als name. Wie bekomme ich das raus, oder wiest ihr das zufällig? ISt ja vermutlich auch eine Eigenschaft vom FEU
Gruß
Evoleena
So nun wollte ich noch abfragen welcher Benutzer angemeldet ist, ich dachte das das mit
Code: Select all
$ccuser->property('name')=='evoleena'
Aber leider scheint der Name des angemeldeten Benutzers anders zu heißen als name. Wie bekomme ich das raus, oder wiest ihr das zufällig? ISt ja vermutlich auch eine Eigenschaft vom FEU
Gruß
Evoleena
Re: Benutzerabhängiger Inhalt
Schon mitevoleena wrote: So nun wollte ich noch abfragen welcher Benutzer angemeldet ist, ich dachte das das mitgeht.Code: Select all
$ccuser->property('name')=='evoleena'
Aber leider scheint der Name des angemeldeten Benutzers anders zu heißen als name. Wie bekomme ich das raus, oder wiest ihr das zufällig?
Code: Select all
$ccuser->property('username')=='evoleena'
Oder nur mit
Code: Select all
$username=='evoleena'
Jain, der Benutzername wird beim FEU Module meist separat behandelt, weil er ja auch nicht wie die Eigenschaften verwaltet wird.evoleena wrote: ISt ja vermutlich auch eine Eigenschaft vom FEU
Re: Benutzerabhängiger Inhalt
Jetzt ja, aber ging auch nicht.
Noch jemand ideen?
Noch jemand ideen?
Re: Benutzerabhängiger Inhalt
Laut Beschreibung ist es 
Code: Select all
{$customcontent_loginname}

Re: Benutzerabhängiger Inhalt
Mhh, das hab ich jetzt auch genommen, habs auch einfach nur so reingeschrieben, wies bei der Willkommensmeldung auch ist, aber es wird nix angezeigt im Menü. Wenn ich {$customcontent->loginname|print_r} mache, dann steht eine 1 da, aber nie steht mein Loginname da, muss ich vielleicht irgendwie wieder das modul in das menü mit einbinden? Ich werde es mal ausprobieren, aber das mit dem Anmelden und rausfinden ob derjenige auch in der Moderatorengruppe ist, geht ja auch ohne das das Modul mit eingebunden wurde.
Gruß
Evoleena
Gruß
Evoleena
Re: Benutzerabhängiger Inhalt
hallo, leider klappt es bei mir mit den geschützten bereich nicht wirklich.
ich habe für die geschützen bereich ein extra template gemacht und wie folgt gearbeitet.
{cms_module module=FrontEndUsers form="silent"}
{cms_module module='CustomContent'}
.....
{if $customcontent_loggedin}
{content}
{else}
Sie sind nicht authorisiert, diese Daten zu sehen.
{/if}
wenn ich mich dann einlogge und die gewünschte seite aufrufe, dann bekomme ich nur den
inhalt" Sie sind nicht authorisiert, diese Daten zu sehen."
wenn ich im adminpanel bei den globale einstellungen den zwischenspeicher lösche und dann die "geschützte seite" reloade, dann wird mir der inhalt angezeigt. reloade ich ein weiteres mal, dann steht dort wieder " Sie sind nicht authorisiert, diese Daten zu sehen."
was könnte das für ein fehler sein?
ich habe für die geschützen bereich ein extra template gemacht und wie folgt gearbeitet.
{cms_module module=FrontEndUsers form="silent"}
{cms_module module='CustomContent'}
.....
{if $customcontent_loggedin}
{content}
{else}
Sie sind nicht authorisiert, diese Daten zu sehen.
{/if}
wenn ich mich dann einlogge und die gewünschte seite aufrufe, dann bekomme ich nur den
inhalt" Sie sind nicht authorisiert, diese Daten zu sehen."
wenn ich im adminpanel bei den globale einstellungen den zwischenspeicher lösche und dann die "geschützte seite" reloade, dann wird mir der inhalt angezeigt. reloade ich ein weiteres mal, dann steht dort wieder " Sie sind nicht authorisiert, diese Daten zu sehen."
was könnte das für ein fehler sein?
Re: Benutzerabhängiger Inhalt
Die Variable $customcontent_loggedin gibt es glaube ich nicht mehr.
Es muss jetzt immer über {if $ccuser->loggedin()} abgefragt werden.
Aber noch viel wichtiger ist, dass alle Seiten, die mit CustomContent gefiltert werden sollen, natürlich nicht zwischengespeichert werden dürfen. Dazu beim Bearbeiten einer Seite im Tab Optionen den Haken bei "Zwischenspeichern" rausnehmen.
Es muss jetzt immer über {if $ccuser->loggedin()} abgefragt werden.
Aber noch viel wichtiger ist, dass alle Seiten, die mit CustomContent gefiltert werden sollen, natürlich nicht zwischengespeichert werden dürfen. Dazu beim Bearbeiten einer Seite im Tab Optionen den Haken bei "Zwischenspeichern" rausnehmen.
Re: Benutzerabhängiger Inhalt
Hallo zusammen,
beschäftige mich seit paar tagen mit cms und bin was cms, homepages usw angeht blutiger anfänger
Würde gerne einen geschützten bereich einrichten.
Nach einiger recherche hier im Forum habe ich das soweit jetzt auch hinbekommen.
Weiterhin würde jetzt aber auch gerne nach benutzergruppen differenzieren und benutze dazu:
{if $ccuser->loggedin() && $ccuser->memberof('gruppe1')}
habe zwei gruppen angelegt und zwei user angelegt (User 1 -> Gruppe1; User 2 -> Gruppe2).
HAbe jetzt aber das Problem, dass ich mich auch mit dem Login von User 2 anmelden kann und den Inhalt, welcher für User 1 spezifiziert war, sehen kann.
Ich habe keine Ahnung was ich hier falsch mache.
{cms_module module="FrontendUsers"}
{cms_module module="CustomContent"}
{if $ccuser->loggedin() && $ccuser->memberof('Gruppe1')}
{content}
{else}
Sie sind nicht authorisiert, diese Daten zu sehen.
{/if}
Wäre für jede Hilfe sehr dankbar.
Gruß,
Dan
beschäftige mich seit paar tagen mit cms und bin was cms, homepages usw angeht blutiger anfänger
Würde gerne einen geschützten bereich einrichten.
Nach einiger recherche hier im Forum habe ich das soweit jetzt auch hinbekommen.
Weiterhin würde jetzt aber auch gerne nach benutzergruppen differenzieren und benutze dazu:
{if $ccuser->loggedin() && $ccuser->memberof('gruppe1')}
habe zwei gruppen angelegt und zwei user angelegt (User 1 -> Gruppe1; User 2 -> Gruppe2).
HAbe jetzt aber das Problem, dass ich mich auch mit dem Login von User 2 anmelden kann und den Inhalt, welcher für User 1 spezifiziert war, sehen kann.
Ich habe keine Ahnung was ich hier falsch mache.
{cms_module module="FrontendUsers"}
{cms_module module="CustomContent"}
{if $ccuser->loggedin() && $ccuser->memberof('Gruppe1')}
{content}
{else}
Sie sind nicht authorisiert, diese Daten zu sehen.
{/if}
Wäre für jede Hilfe sehr dankbar.
Gruß,
Dan
Last edited by Nazgul on Wed Jan 27, 2010 8:21 pm, edited 1 time in total.
Re: Benutzerabhängiger Inhalt
Hm, kann da jetzt keine Fehler entdecken.
Hast Du beim Gruppen Namen auf Groß und Kleinschreibung geachtet?
Gehören die User wirklich nur jeweils der einen Gruppe an?
Ist der Zwischenspeicher für diese Seite deaktiviert (Tab Optionen beim Bearbeiten einer Seite) und danach auch mal gelöscht?
Hast Du beim Gruppen Namen auf Groß und Kleinschreibung geachtet?
Gehören die User wirklich nur jeweils der einen Gruppe an?
Ist der Zwischenspeicher für diese Seite deaktiviert (Tab Optionen beim Bearbeiten einer Seite) und danach auch mal gelöscht?
Re: Benutzerabhängiger Inhalt
Hallo,
ich Vollidiot.
Danke erst mal für die Antwort. Passt alles.
Man sollte halt die ganze Seite lesen.
Ich habe nur den erfolgreichen Login gesehen und mich davon blenden lassen. Klar ist der Login erfolgreich bei dieser Abfrage, der Inhalt wurde aber nicht angezeigt. Habe nämlich nur zwei kurze Testnachrichten eingefügt ('Nicht authorisiert' bzw 'Sichtbar wenn Login') und diese völlig übersehen. Naja, manchmal sieht man den Wald vor lauter Bäumen nicht mehr.
Dachte die ganze Zeit, dass die Abfrage
{if $ccuser->loggedin() && $ccuser->memberof('EngOS')} dann bei einem falschen User zur Meldung 'Invalid User or Password' führt.
Naja passiert.
Aber wie gesagt, trotzdem danke für die Hilfe NaN!
Gruß, Dan
ich Vollidiot.
Danke erst mal für die Antwort. Passt alles.
Man sollte halt die ganze Seite lesen.
Ich habe nur den erfolgreichen Login gesehen und mich davon blenden lassen. Klar ist der Login erfolgreich bei dieser Abfrage, der Inhalt wurde aber nicht angezeigt. Habe nämlich nur zwei kurze Testnachrichten eingefügt ('Nicht authorisiert' bzw 'Sichtbar wenn Login') und diese völlig übersehen. Naja, manchmal sieht man den Wald vor lauter Bäumen nicht mehr.
Dachte die ganze Zeit, dass die Abfrage
{if $ccuser->loggedin() && $ccuser->memberof('EngOS')} dann bei einem falschen User zur Meldung 'Invalid User or Password' führt.
Naja passiert.
Aber wie gesagt, trotzdem danke für die Hilfe NaN!
Gruß, Dan