Wie kann ich neue Bedingungen zu vorhandenen Bedingungen hinzufügen, die bestimmen, ob ein Menüelement sichtbar ist? Diese Bedingungen sollten nicht auf Berechtigungseinstellungen beschränkt sein.
Beispiel für einen Anwendungsfall (nicht unbedingt der Grund für diese Frage): Angenommen, ich habe einen Inhaltstyp, für den Benutzer nur einen Knoten erstellen dürfen. Ich habe einen Menüpunkt zum Hinzufügen dieser Art von Inhalten. Wenn der Benutzer jedoch bereits einen Knoten dieses Inhaltstyps erstellt hat, möchte ich den Menüeintrag ausblenden. Mein erster Gedanke ist, eine Abfrage auszuführen, um die Existenz eines Knotens zu überprüfen, der vom aktuellen Benutzer erstellt wurde und der einen bestimmten Inhaltstyp aufweist. Falls vorhanden, verbergen Sie den Menüpunkt.
Ich würde denken, diese Art von Funktionalität sollte dort eingehen hook_menu_alter()
und die erforderliche Logik hinzufügen. Ich bin mir jedoch nicht sicher, wie ich das tun soll, ohne die vorhandenen Prüfungen zu umgehen, z. B. zu prüfen, ob der Benutzer Berechtigungen zum Erstellen dieser Art von Inhalten hat. Müsste ich diese Logik in meinen eigenen Zustand einbeziehen? Oder kann ich die vorhandene Zugriffslogik erweitern, ohne sie zu überschreiben?
Bearbeiten: Einige Leute scheinen sich darauf zu konzentrieren, zu antworten, "Wie beschränke ich einen Benutzer auf das Erstellen eines Knotens eines Inhaltstyps". Das ist hier nicht die Frage. Die Frage ist, wie ich einem Menüelement benutzerdefinierte Zugriffsbedingungen hinzufüge.
In Reaktion auf die obigen Kommentare würde die Lösung in D7 lauten:
quelle
Sie suchen nach dem Chain Menu Access API- Modul.
Es gibt mindestens ein Beispiel für die Verwendung von Drupal Stack Exchange.
quelle
Eine Möglichkeit wäre, eine neue Rolle zu erstellen, die über die Berechtigung zum Erstellen von Inhalten für Ihren Inhaltstyp verfügt. Nachdem ein Benutzer einen Knoten dieses Typs erstellt hat, entfernen Sie diese Rolle und er kann keine weiteren erstellen.
quelle
Vielleicht sollten Sie das Node Limit- Modul ausprobieren .
Von der Projektseite:
quelle