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:
Davor musst Du die if-Schleife, die oben eingefügt wurde schließen:
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.