Kundenlogin und Custom Content

Hilfe zu Modulen und Tags
Post Reply
cyberman

Re: Kundenlogin und Custom Content

Post by cyberman »

janditze wrote: Ich dachte man könne sowas mit dem CustomContent Modul machen, aber irgendwie ist das dafür ja nicht bestimmt, oder doch?
Warum sollte das nicht gehen? Für die Downloads benötigst du nur noch das Uploads-Modul ...
NaN

Re: Kundenlogin und Custom Content

Post by NaN »

janditze wrote: hm,

ich würde gerne ein Navipunkt "Kundenportal" mit den Unterpunkten
- Kunde1
- Kunde2
- ...

Loggt sich ein Kunde ein, soll er nur seine Seite sehen. Mit dem Custom Content Modul kann ich sowas machen?
Jain.
Schau Dir dazu die Modul-Hilfe des CustomContent Moduls an.

Kurze Anleitung...

1. Den Zwischenspeicher für alle Seiten deaktivieren:
In der Administration jede Seite bearbeiten und im Tab "Optionen" den Haken bei "Zwischenspeichern" wegmachen.
Unter "Administrator->Seitenvorgaben" das gleiche nochmal (ist dann automatisch schon für jede neu erstellte Seiten so eingestellt)

2. Erforderliche Variablen für das Template bereitstellen:
Im Seiten-Template die Module FrontendUsers und CustomContent gleich als erstes im Body folgendermaßen aufrufen:
(Adminstration unter "Layout->Templates" Dein Template auswählen, einfügen, speichern.)

Code: Select all

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<__html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" >

	<head>
		...
	</head>

	</__body>

{cms_module module=FrontEndUsers form="silent"}
{cms_module module=CustomContent}
...

3. Template für den benutzerspezifischen Inhalt anlegen:
In der Seitenadministration unter "Layout->Templates" Dein Seiten-Template kopieren. (in der Tabelle rechts auf den Button mit den zwei Blättern klicken)
Nennen wir das neue Template... sagen wir "Meine Seite".
In diesem Template maskierst Du einfach den {content}-Tag mit dem Syntax des CustomContent Moduls:

Code: Select all


{if $customcontent_loggedin}

     {content}

{else}

     <p>Sie sind nicht eingeloggt.</p>

{/if}

4. (optional) Den Menüpunkt "Meine Seite" nur anzeigen lassen, wenn man eingeloggt ist:
Dazu gibt es verschiedene Möglichkeiten.
Dazu kannst Du z.B. jeder Seite, die nur für Benutzer angezeigt werden soll im Tab "Optionen" ein Seitenpräfix geben.
Z.B. member_[name_des_seitenalias].
Dann musst Du das Menü-Template im Menümanager so modifizieren, dass er Menüpunkte mit dem Präfix "member_" nur anzeigt, wenn man eingeloggt ist.
Das ist für Laien etwas schwierig und hängt vom verwendeten Menü ab.
Daher schlage ich vor, dass wir uns erst daran wagen, wenn Du weißt welche Art von Menü Du verwendest.

Eine andere Möglichkeit wäre, ein seperates Menü nur für User. Sauber abgetrennt vom Hauptmenü.
Dazu legst Du einen neuen Inhalt vom Typ "SectionHeader" an. (In der Seitnadministration "Inhalte->Seiten" auf den Link "Neue Seite hinzufügen" klicken. Bei "Inhaltstyp" SectionHeader" auswählen.)
Diesen Menüpunkt nennst Du... sagen wir "Mitgliederbereich".
Dieser Menüpunkt soll nicht im Menü angezeigt werden und muss auch auch nicht aktiv sein (einfach die entsprechenden Haken rausmachen)
Alle Seiten, die nur für User zugänglich sein sollen ordnest Du nun diesem Menüpunkt unter.
Zusätzlich wählst Du für diese Seiten bei "Template" das Template für benutzerspezifische Inhalte (in unserem Fall "Meine Seite")
Im Template für benutzerspezifische Inhalte kannst Du nun unter dem Hauptmenü das Menü-Modul erneut aufrufen, jedoch soll es nur die Menüpunkte anzeigen, die dem Menüpunkt "Mitgliederbereich" untergeordnet sind.
Z.B.:

Code: Select all


{* Hauptmenü. Ist immer sichtbar *}
{menu template='simple_navigation.tpl' collapse='1'}

{* Usermenü. Ist nur sichtbar wenn eingeloggt *}
{if $customcontent_loggedin}
     <h3>Mitgliederbreich:</h3>
     {menu template="simple_navigation.tpl" start_element="X.1" show_root_siblings="1" collapse="1"}

{/if}

Bei dem Parameter start_element musst Du für den Wert X einfach die Position des Menüpunktes "Mitgliederbereich" angeben. (In der Seitenadministration unter "Inhalte->Seiten" in der Tabelle die Nummer vor der Seite.)
Last edited by NaN on Fri May 22, 2009 5:17 pm, edited 1 time in total.
excalibur77
Forum Members
Forum Members
Posts: 65
Joined: Mon Jan 14, 2008 8:09 pm

Re: Kundenlogin und Custom Content

Post by excalibur77 »

Hi NaN,

zum Thema hätte ich auch zwei Fragen:

Zwischenspeicher für ALLE Seiten deaktivieren, nicht nur für die mit CustomContents?

Der Tag {cms_module module=FrontEndUsers form="logout"} stellt leider nicht nur die Option Abmelden zur Verfügung sondern auch die anderen Optionen. Natürlich kann man für eine Logout - Option auch den direkten Link nehmen, wundern tut's mich aber schon.

HG
exc
NaN

Re: Kundenlogin und Custom Content

Post by NaN »

excalibur77 wrote:
Zwischenspeicher für ALLE Seiten deaktivieren, nicht nur für die mit CustomContents?
Es reicht natürlich aus, wenn man den Zwischenspeicher nur bei den Seiten, die benutzerspezifischen Inhalt haben deaktviert.
Ich habe einen kleinen Fehler in meiner Anleitung:

Wenn man die Menüpunkte des "Mitgliederbreichs" ausblenden will, muss man natürlich auch im "normalen" Seiten-Template prüfen, ob man angemeldet ist oder nicht.
D.h.:

Code: Select all


{cms_module module=FrontEndUsers form="silent"}
{cms_module module=CustomContent}

muss auch im "normalen" Seiten-Template aufgerufen werden.
Und die Überprüfung beim Menü:

Code: Select all


{* Hauptmenü. Ist immer sichtbar *}
{menu template='simple_navigation.tpl' collapse='1'}

{* Usermenü. Ist nur sichtbar wenn eingeloggt *}
{if $customcontent_loggedin}
     <h3>Mitgliederbreich:</h3>
     {menu template="simple_navigation.tpl" start_element="X.1" show_root_siblings="1" collapse="1"}

{/if}

muss ebenfalls in dieses Template (sonst ist das Usermenü ja nie zu sehen).
In diesem Fall muss dann der Zwischenspeicher für alle Seiten deaktiviert werden, da CustomContent ja immer aufgerufen wird. Macht nach meiner Erfahrung sowieso nur einen sehr geringen Performance-Verlust.

excalibur77 wrote:
Der Tag {cms_module module=FrontEndUsers form="logout"} stellt leider nicht nur die Option Abmelden zur Verfügung sondern auch die anderen Optionen. Natürlich kann man für eine Logout - Option auch den direkten Link nehmen, wundern tut's mich aber schon.
Was für "andere" Optionen?
Schonmal im Backend unter "Benutzer&Gruppen->FrontendUser Verwaltung" im Tab "Abmeldungs-Template" nachgeschaut?
Ich habe z.B. das Usermenü dort hineingeschrieben, somit kann ich mir die CustomContent-Abfrage im Template für das Usermenü sparen und bräuchte den Zwischenspeicher nur bei den User-Seiten deaktivieren.
Da mancheiner mit diesen ganzen Einstellungen nicht klar kommt oder mitunter vergisst, bei User-Seiten den Haken bei "Zwischenspeichern" im Tab "Optionen" rauszunehmen", habe ich jetzt erstmal gesagt, dass man das generell bei den Seitenvorgaben machen sollte. Ist natürlich kein Muss.
excalibur77
Forum Members
Forum Members
Posts: 65
Joined: Mon Jan 14, 2008 8:09 pm

Re: Kundenlogin und Custom Content

Post by excalibur77 »

NaN wrote: Was für "andere" Optionen?
Schonmal im Backend unter "Benutzer&Gruppen->FrontendUser Verwaltung" im Tab "Abmeldungs-Template" nachgeschaut?
Danke, hat sich damit erledigt!

Jedenfalls eine geniale Geschichte, wenn man sich erstmal mit dem Drumherum vertraut gemacht hat.

Nochmals danke für Deine Hinweise!
NaN

Re: Kundenlogin und Custom Content

Post by NaN »

Stimmt, das allein reicht nicht aus.
Die Frage ist: Von welchen benutzerspezifischen Inhalten reden wir hier?

Gehen wir mal davon aus, dass die Seite folgendermaßen aufgebaut ist:

1 Home (Inhaltstyp: Content; Template: "normales" Seitenlayout)

2 Impressum  (Inhaltstyp: Content; Template: "normales" Seitenlayout)

3 Kontakt  (Inhaltstyp: Content; Template: "normales" Seitenlayout)

4 Mitgliederbereich  (Inhaltstyp: SectionHeader; nicht im Menü sichtbar; nicht aktiv)

  4.1 Meine Seite (= die Userseite; Inhaltstyp: Content; Template: Meine Seite)

Mit dieser Methode braucht man nur eine einzige Seite für alle User anzulegen.
Der Inhalt der Seite 4.1 Meine Seite muss in diesem Fall dynamisch erzeugt werden.
Wenn man dort z.B. das FrontedUsers Modul folgendermaßen im Inhalt aufruft:

{cms_module module="frontendusers" form="viewprofile"}

Wird jedem User nur sein eigenes Profil angezeigt. (Anzupassen unter "Benutzer & Gruppen->FrontendUser Verwaltung" im Tab "View User Template")

Das Problem ist, dass man damit nur schwer einem einzelnen User bestimmte Inhalte anzeigen lassen kann.
Es sei denn man ordnet jeden Benutzer einer eigenen Benutzergruppe zu und erstellt für jede Benutzergruppe unterschiedliche Eigenschaften.
Da ist aber sehr viel Handarbeit nötig.
Ebenso bei Deiner Idee.
Bei Deinem Vorhaben müsstest dann für jeden Benutzer eine neue Seite anlegen.
Dieser Seite könntest Du als Menütext immer "Meine Seite" und als Seiten-Alias "member_[Benutzernamen]" geben.
Im MenüManager Template musst Du dann für jeden Inhalt prüfen, ob  das zugehörige Seiten-Alias mit "member_" beginnt.
Wenn ja, dann soll es nur angezeigt werden, wenn der Rest des Seiten-Alias mit dem des eingeloggten Benutzernamen übereinstimmt.

Da ich im Moment nicht weiß ob und wie man das alles mit Smarty-Syntax prüfen könnte, würde ich dazu einen benutzerdefinierten Tag verwenden. Im Backend unter "Erweiterungen->Benutzerdefinierte Tags" einen neuen Tag hinzufügen und folgenden Code einfügen:

Code: Select all


$show_item = true;

$member_name= '';
if(isset($params['member_name']) && $params['member_name']!='') {
    $member_name= strtolower(trim($params['member_name']));
}

$member_alias = '';
if(isset($params['member_alias']) && startswith($params['member_alias'], 'member_')) {
    $member_alias = strtolower(trim($params['member_alias']));

    if($member_alias!='member_'.$member_name)
       $show_item = false;
}

$smarty->assign('show_item',$show_item);

Diesen Code unter z.B. checkMemberAlias speichern.

Im Menü-Template steht irgendwo eine foreach-Schleife:

Code: Select all


...
{foreach from=$nodelist item=node}
...

Gleich darunter rufst Du den benutzerdefinierten Tag auf und prüfst, ob der Menüpunkt angezeigt werden soll:

Code: Select all


{checkMemberAlias member_alias=$node->alias member_name=$username}
{if $show_item}

Weiter unten im Template wird diese foreach-Schleife wieder geschlossen:

Code: Select all


...
{/foreach}
...

Davor musst Du die if-Schleife, die oben eingefügt wurde schließen:

Code: Select all


{/if}

Aber willst Du wirklich jedesmal, wenn sich ein Benutzer registriert von Hand eine neue Seite anlegen?
Ich weiß nicht wie groß Dein Projekt werden soll, aber bei meiner derzeigen Seite (die noch nichtmal ganz fertig ist) wären mir die 30 Benutzer bereits zu viel.
Last edited by NaN on Fri May 22, 2009 5:31 pm, edited 1 time in total.
NaN

Re: Kundenlogin und Custom Content

Post by NaN »

Man könnte übrigens auch mit Hilfe der Ereignisverwaltung und einem weiteren benutzerdefinierten Tag solche Seiten automatisch anlegen lassen.
NaN

Re: Kundenlogin und Custom Content

Post by NaN »

Hast Du im Template auch FrontendUsers und CustomContent aufgerufen?
Ist der Zwischenspeicher deaktiviert?
ATROXX
Forum Members
Forum Members
Posts: 20
Joined: Tue Jun 24, 2008 9:19 am

Re: Kundenlogin und Custom Content

Post by ATROXX »

Coole Idee für die Umsetzung.
Ich habe genau nach dem Selben Ding gesucht.
Mir ist dabei nur eine Sache negativ aufgefallen und bräuchte hierzu eine sinnvolle Lösung:

Wenn ich nun eine Seite mit dem alias "member_testuser"
und eine mit dem alias "member_testmember"
angelegt habe,

so bekommt der als "testuser" Angemeldete natürlich nur den Link "Meine Seite" mit seinem entsprechendem Verweis auf die Seite "...index.php?page=member_testuser" angezeigt.

Gibt er aber nun manuell "...index.php?page=member_testmember" ein, so landet er auf der Seite, die für "testmember" bestimmt ist.

Wie kann dies unterbunden werden?
NaN

Re: Kundenlogin und Custom Content

Post by NaN »

Auf die Schnelle gesagt: Indem du im Seitentemplate außer dem Loginstatus bei der Anzeige des Contents auch den Login-Namen überprüfst und mit dem Seitenalias vergleichst.
Also Du legst für die Member-Seite ein neues Template an und prüfst anstatt nur

Code: Select all


{if $customcontent_loggedin} 
   {content}
{/if}

genau wie beim Menüpunkt auch noch den Usernamen:

Code: Select all


{checkMemberAlias member_alias=$page_alias member_name=$username}
{if $customcontent_loggedin && $show_item} 
   {content}
{/if}

cyberman

Re: Kundenlogin und Custom Content

Post by cyberman »

Um den unberechtigen Zugreifer zu verwirren, könntest du in einem else-Block auf eine Pseudo-404er Seite verweisen ...
ATROXX
Forum Members
Forum Members
Posts: 20
Joined: Tue Jun 24, 2008 9:19 am

Re: Kundenlogin und Custom Content

Post by ATROXX »

Hey Danke Ihr beiden, sind beides coole Ideen.
Je mehr und je tiefere Einblicke ich in dieses CMS kriege, desto besser fängst an mir zu gefallen.

Grad mal noch eine Frage am Rande:
NaN wrote:
Man könnte übrigens auch mit Hilfe der Ereignisverwaltung und einem weiteren benutzerdefinierten Tag solche Seiten automatisch anlegen lassen.
Wie kann ich mir dieses vorstellen bzw. eventuell umsetzen, weil hört sich auch gut an.
Last edited by ATROXX on Wed Dec 10, 2008 11:25 am, edited 1 time in total.
NaN

Re: Kundenlogin und Custom Content

Post by NaN »

ATROXX wrote:
NaN wrote:
Man könnte übrigens auch mit Hilfe der Ereignisverwaltung und einem weiteren benutzerdefinierten Tag solche Seiten automatisch anlegen lassen.
Wie kann ich mir dieses vorstellen bzw. eventuell umsetzen, weil hört sich auch gut an.
Naja, war nur eine Idee. Hab da noch keinen konkreten Tipp zur Umsetzung.
Im Prinzip läuft das so: Du erstellst einen Benutzerdefinierten Tag, der die entsprechenden Einträge in die Datenbank selber macht (oder evtl. auf Funktionen der API zugreift) und sagst der Ereignisverwaltung, dass, wenn ein neuer Benutzer hinzugefügt wurde, dieser Tag ausgeführt werden soll.
Post Reply

Return to “Module und Tags”