Nodereference + View mit Filter current User oder Admin
am 23.08.2009 - 11:34 Uhr in
Hi @all,
ich habe folgende Problematik. Ich habe zwei Inhaltstypen:
- Inhaltstyp: Beitrag
- Inhaltstyp: Beitragsfach
- Feld: nodereference auf Beitrag per View
Mein View:
- Beziehungen: Beitragsversion: Benutzer
- Felder: Beitragsversion: Titel
- Filter:
- Nodetyp = Beitragsfach
- Node: Veröffentlicht oder Verwalter
- Benutzer: Aktuell
Wenn ich jetzt einen Beitrag als User erstelle, zeigt er mir im Nodereferenz Feld nur meine Beitragsfach Inhalte an. Das ist auch genau das was ich möchte. Aber! Sobald ein Moderator / Admin einen Beitrag bearbeitet, sieht er nur noch seine eigenen Beitragsfächer und nicht die vom User (was ja logisch ist aufgrund des Views) Beim Speichern des Beitrages wird dadurch natürlich die Zuordnung zum Beitragsfach überschrieben.
Wie kann ich erreichen, das der Moderator alle Beitragsfächer sieht ? Würde mich über Ideen freuen.
Vielen Dank im voraus.
Gruß Dennis
- Anmelden oder Registrieren um Kommentare zu schreiben
Lösung für mein Problem
am 24.08.2009 - 09:39 Uhr
Hi @all,
mittlerweile habe ich eine Lösung für mein Problem gefunden. Ich habe mein View mittlerweile dahin gehen geändert, das ich keinen Filter "Benutzer: aktiv" mehr einsetzen, sondern den Benutzer (UID) über ein Argument zu übergeben. Genau hier gibt es zwei Wege weiter zu verfahren.
Weg 1) - eval()
Beim Argument gibt es ja die Möglichkeit einen Standartwert als PHP Code erzeugen zu lassen wenn kein Argument übergeben wird. Diesen Weg wollte ich nicht gehen da mir mal im Chat vor längerer Zeit gesagt wurde eval() kostet zum einen Zeit zum anderen kann es bei falscher Benutzung ein Sicherheitsrisiko sein. Deshalb wollte ich diesen Weg irgendwie umgehen.
Weg 2) - hook_views_pre_view (&$view, &$display_id, &$args)
Der Programmatische Weg und wohl hoffentlich auch der bessere Weg. Ich habe mir ein Modul erzeugt welches beim Aufruf des Views überprüft ob es mein Nodereference View ist
<?php
if ($view->name == 'users_beitragsfaecher_ref')
?>
Anschliessend überprüfe ich ob wir eine Node neu erzeugen oder Editieren in dem ich den aktuelle Pfad auseinander nehme:
<?php
$nid = 0;
$path = explode('/', $_GET['q']);
if(sizeof($path) == 3 && $path[0] == 'node' && is_numeric($path[1]) && $path[2] == 'edit' ) {
$nid = $path[1];
}
?>
Jetzt kann ich die UID an das View übergeben:
<?php
if ($nid) {
// Node Edit
} else {
// neue Node, wir können den aktuellen User übergeben...
global $user;
$uid = $user->uid;
}
// setzen des arguments im view...
$view->set_arguments(array($uid));
?>
Ich hoffe ich konnte als neuer etwas dazu beitragen für jemanden der ein ähnliches Problem hat.
Gruß Dennis