View filtern über "leere node reference" (nach dem Löschen des referenzierten nodes...)
am 13.04.2011 - 14:15 Uhr in
Hallo!
Habe folgendes Problem mit Views, bzw. der Arbeit mit 2 Content Types, die mit CCK Feldern "node reference" (oder Beitragsreferenz) arbeiten.
Beim Anlegen ist alles ok - in den Content Types (sagen wir mal A und B), ist jeweils ein Pflichtfeld mit Referenz auf einen node des Content Type C. Ich lege also einen node von A an und wähle beim Erstellen die Referenz vom Typ C... Alle A und B-Typen kann ich dann über diese Referenz (Argument) mit C in Verbindung bringen und z.B. mit Panels schön an den node von Typ C hängen.
So weit so gut.
Wenn ich jetzt aber den node C lösche, komme ich über diesen Bezug schon mal nicht mehr an die ursprünglich verknüpften A und B ran - daher wollte ich einen View bauen, der mir "alle Elemente vom Typ A und B zeigt, die keine gültige Referenz mehr haben". Jetzt hätte ich den Filter gesetzt auf "node reference=NULL"... aber das funktioniert nicht, da in der DB immer noch die nid des ursprünglichen nodes steht (obwohl dieser schon nicht mehr da ist!).
Wenn ich mir dagegen das Feld node reference anzeigen lasse, ist es sehr wohl leer, da natürlich nichts mehr unter der nid gefunden wird... da funktioniert sogar das Ersetzen für "Leerer Text"...
Die eigentliche Frage also:
Gibt es in Views einen anderen Filter, mit dem ich auf eine GÜLTIGE=vorhandene node reference prüfen kann?
Oder muß ich mit Rules was bauen, was die gerade gelöschte nid aus den Content Elementen entfernt, die diese nid referenziert haben...?
- Anmelden oder Registrieren um Kommentare zu schreiben
Hallo, es gibt das Modul
am 14.04.2011 - 08:57 Uhr
Hallo,
es gibt das Modul http://drupal.org/project/cnr, dass dafür da ist bei referenzierte Nodes Aktualisierungen auf beiden Nodes (und damit auch Löschungen) selbstständig durchzuführen. Das könnte dir möglicherweise dein Problem lösen.
Drupal maßgeschneidert.
Hmmm. Nicht ganz das richtige...
am 15.04.2011 - 11:54 Uhr
ich habe cnr mal installiert und rumgetestet... es macht aber (bisher) noch nicht so richtig das, was ich brauche.
cnr scheint primär dazu zu dienen, nodes, die sich gegenseitig (!) referenzieren jeweils zu aktualisieren. Sagt auch der Name schon so weit.
Mein Problem liegt ja gar nicht in dieser Aktualisierung in zwei Richtungen, sondern lediglich in einer.
Node A ist der "führende" node
Node B (existiert n-mal und) referenziert einen Node A (Pflichtfeld!)
Jetzt lösche ich den referenzierten Node A... damit stehen alle Nodes B plötzlich ohne die notwendige Referenz da...
Stellt mich vor die Probleme:
- Ich kann sie noch nicht mal Bearbeiten>Löschen, ohne nicht eine neue Referenz auszuwählen... und da die Referenzauswahl sehr restriktiv ist, kann es sein, daß mir als user keine(!) neue Referenz zur Auswahl steht!
- Da ich die Nodes B über einen View "zugänglich" mache, der nur über den Node A angezeigt/gesteuert wird, sind die Nodes B für mich als user noch nicht einmal mehr über die Seite greifbar
- In den Nodes B bleibt im Feld für die Referenz auch nach dem Löschen von A immer noch die nid des ursprünglich referenzierten Nodes stehen...
Und eigentlich möchte ich nur folgendes:
Ich lösche Node A und in allen Nodes B, die diesen A referenziert haben, wird das DB-Feld auf NULL gesetzt.
Denn danach könnte ich in einem eigenen View filtern und der User an geeigneter Stelle eine Tabelle präsentieren "...folgende deiner Nodes B haben keine Referenz mehr..." hinter diese Einträge setze ich dann den "Beitrag löschen" Link und schwupp kann ich die nutzlosen Nodes B entsorgen, ohne mich mit dem Pflichtfeld der Referenz rumzuschlagen.
Irgendjemand eine Idee?
Oder gibt es irgendeine Lösung mit jedem Cron über die DB zu gehen und die nicht mehr gültigen nid zu löschen?