Per-User Untersektionen mit D7
am 06.01.2014 - 14:04 Uhr in
Hallo,
ich möchte im Rahmen meines aktuellen Projektes gerne ein Szenario realisieren, in dem jeder Benutzer einer bestimmten Rolle eine eigene Untersektion auf der Seite bekommt. Dazu soll auch eine eigenständige Menüstruktur gehören.
Das Hauptmenü möchte ich so strukturieren:
Home
Mitarbeiter
-> Name des Mitarbeiters (Link auf die Startseite des Mitarbeiters)
Nun soll auf dieser Startseite irgendwo anders auf der Seite ein zweites Menü mit Inhalten und Struktur angezeigt werden, welche der User angelegt hat.
Eigentlich ein ganz einfaches Ding, aber ich möchte gern, dass der User nur Zugriff auf diese spezielle Sektion der Seite hat, also beim Anlegen der Seite nur sein eigenes Menü wählen darf.
Ich habe schon mit Workbench Access herumtüftelt, aber das bringt mich leider nicht zum Ziel, weil ich hier als Section nicht ein Menü-Item auswählen kann.
Ich dachte nun, man könnte vielleicht mit Rules beim Erstellen des User-Accounts die Startpage des Benutzers anlegen, aber wie weiter? Wie bekomme ich den User dazu, nur unter diesem Menu item neue Items anlegen zu dürfen? Und noch mehr: Wie bekomme ich das Hauptmenü dazu, diese Unterpunkte nicht anzuzeigen? Es soll ja in einer anderen Region angezeigt werden und mit Menu Blocks klappt das auch, aber eben nur auf einer per-level Ebene und nicht speziell für den Menüpunkt "Mitarbeiter".
Ich hoffe, Ihr konntet mir folgen und ich denke nur zu kompliziert ... ganz schön verwirrend so ein einfaches Anliegen. Auf jeden Fall danke ich Euch für jeden Stubser in die richtige Richtung ... wobei es bei Drupal ja meist auch schon mit dem Link zu einem Modul getan sein kann ;-)
- Anmelden oder Registrieren um Kommentare zu schreiben
Menü ist ein weitgesteckter
am 06.01.2014 - 14:17 Uhr
Menü ist ein weitgesteckter Begriff. Ein Menü ist einfach eine "unordered list" von Links. Menüs sind bei Drupal darüber hinaus nicht von einander abhängig. Du kannst also beliebig viele Menüs auf eine Seite stellen.
Es gibt in Drupal das Modul [do:menu_admin_per_menu], aber das greift nur bei Rollen. Das wird Dir vermutlich nicht reichen.
Dann baue doch ein Menü mittels Views. Definiere einen Datentyp, den ein User selbst anlegen und verändern darf. Der beinhaltet ein Link-Feld und aus diesen Daten des Users baust Du eine HTML-Liste mittels Views, die Du auf der Seite (als Block) anzeigst. Beim Block gibt es nur noch das Problem, daß Du dort Context-Filter nur über einen Trick zur Verfügung hast, nämlich über die Einstellung bei "was tun, wenn das Argument nicht in der URL ist", denn das ist beim Block der Fall. Dann heißt es Vorgabewert bereit stellen und dort hast Du ein paar Möglichkeiten, bis hin zu ermitteln des Wertes per PHP-Code.
Beste Grüße
Werner
Hallo Werner, danke für Deine
am 06.01.2014 - 14:31 Uhr
Hallo Werner,
danke für Deine Antwort. Wenn ich Dich nun richtig verstanden habe, meinst Du, dass ich ab dem User-Level (so nenne ich jetzt einfach mal die Menüebene ab Mitarbeiter->Name->...) gar nicht mehr mit dem Menüsystem arbeiten sollte, sondern per Views den relationalen Kontext eines Untermenüs abbilden sollte. Das kam mir auch schon in den Sinn, aber damit würde ich mir vermutlich auch einige Probleme bereiten, da ich ja nicht mehr im Rahmen des Menü-Systems arbeite. Breadcrumbs sind hier das erste Problem, was mir einfällt.
Natürlich, über Context könnte man die Brotkrumen wieder zurückholen, aber man müsste nun bei jedem einzelnen solcher Probleme irgendwelche händischen Lösungen finden und davor scheue ich mich aufgrund der Komplexität der Seite etwas.
menu_admin_per_menu kommt meinen Vorstellungen schon sehr nahe, aber wie Du selbst schon richtig vermutest, ist es eben leider nur per Rolle. Was mir fehlt, ist eine Funktionalität, den Benutzer beim Anlegen von Inhalten derart einzuschränken, dass nur ein bestimmter Menüpunkt als Wurzel gewählt werden darf.
Gibt es etwas derartiges bereits? Ich bin ansonsten ja wirklich schon geneigt, hier selbst etwas zu schreiben.
Du darfst den User nicht an
am 06.01.2014 - 14:45 Uhr
Du darfst den User nicht an eines "Deiner" Menüs lassen. Das ist mit den normalen Zugriffskontrollen nicht sauber abzuschotten. Wenn Du mit der Anzahl der Menüs ins Schleudern kommst und es über Rollen nicht mehr zu regeln ist, geht es eben nicht über das Menüsystem.
Mit Custon Breadcrums kannst Du Dir evtl helfen oder Du baust Dir auch die Breadcrumb-Leiste per Views. Breadcrums sind nicht anderes als eine spezielle Form einer UL. Du mußt dann nur in der page.tpl.php dafür sorgen, daß auf Seiten, die eine spezielle Pfad-Struktur haben nicht die "normalen" Breadcrumbs ausgegeben werden, sondern Deine speziellen. Das ließe sich in der Funktion preprocess_page in der template.php Deines Themes vorbereiten. Dort stellst Du dass eine Variable bereit, die bereits die aufbereiteten Breadcrumbs beinhaltet.
Beste Grüße
Werner