[gelöst] Backreference in PHP auflisten (Child Nodes)
am 18.04.2010 - 17:01 Uhr in
Hallo, jetzt habe ich mal ein kleines Problem...
Habe u.a. folgendes mit dem Node Relationships Modul abgebildet:
- Inhaltstyp Häuser
- Inhaltstyp Haus-Bewohner
1 Haus kann x Bewohner haben.
In Drupal funktioniert alles perfekt, soweit keine Sache. Auch mit Views komme ich zurande, also auch da alles OK.
In einem eigenen Modul habe ich nun Node-ID des Hauses und möchte nun alle Node-IDs der Bewohner dazu. Ich suche also eine PHP-Function die etwa
das tut:
Input: Node-ID des Hauses
Output: Array mit allen Node-IDs der Bewohner, deren Nodes auf die Input-Node-ID referenzieren, die also in diesem Haus wohnen.
Ich habe versucht, in $node nachzusehen, ob vielleicht die Child-Sammlung bereits dort drin ist, es scheint aber nicht so, die Childs sind offenbar bereits gerendert...
Bin dankbar für jede Idee :-)
- Anmelden oder Registrieren um Kommentare zu schreiben
Schonmal im Modul
am 18.04.2010 - 17:18 Uhr
Schonmal im Modul nachgeschaut, ob die gewünschte Funktion dort nicht bereits vorhanden ist? Irgendwie muss das Modul sich das schließlich auch selbst zusammenreimen..
Suchmaschinenoptimierung (SEO) & Drupal
Ja, das hab ich versucht.
am 19.04.2010 - 13:14 Uhr
Ja, das hab ich versucht. Obwohl das Modul recht aufgeräumt ist, habe ich Mühe, die passende Stelle zu finden. Ich werde mich aber nochmals dahinterklemmen.
In der Zwischenzeit wäre ich schon froh um Feedback, wenn jemand diese Fragestellung schon gelöst hat. Danke.
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
Das sieht doch stark nach
am 19.04.2010 - 13:36 Uhr
Das sieht doch stark nach einer zu erstellenden SQL-Abfrage aus. Wenn es in Views geht, hast Du doch schon mal einen Ausgangspunkt, indem Du die Views Abfrage nimmst. Die läßt sich evtl auch noch vereinfachen. Dann mit db_query und db_fetch_array oder db_fetch_object die Ergebnisse in einer Schleife (foreach) auslesen. Danach solltest Du Deine zugehörigen Bewohner ermittelt haben.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Danke für den Hinweis.
am 19.04.2010 - 14:12 Uhr
Ja, genau ich suche nach dem richtigen SQL. Die von Nodereference vorgefertigten Views zeigen keine nutzbringenden SQLs an. Ich müsste nun wahrscheinlich eine View bauen und hoffen, dass die mir mehr zeigt
OK, das wäre wirklich noch ein Ansatz.
In der Zwischenzeit habe ich herausgefunden, dass ich wohl nicht im Node Relationships Modul, sondern im Node Reference Modul innerhalb CCK suchen muss.
EDIT:
Der Tip mit dem Erstellen einer View war goldrichtig - das muss ich mir für die Zukunft merken :-)
(...da hätt ich auch selbst draufkommen können...^^)
Danke!
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
schön das es mit views geht :-)
am 18.08.2010 - 13:17 Uhr
Wenn es in Views geht, hast Du doch schon mal einen Ausgangspunkt, indem Du die Views Abfrage nimmst.
Hi!
Ich bin Elvis und neu hier im Forum. Ich schlage mich seit Tagen mit Views herum und versuche exakt so etwas so konstruieren. Ich habe schon einen Haufen Tutorials usw. gelesen und Casts angeschaut, aber ich komme nicht zum gewünschten Ergebnis.
Ich möchte ganz einfach (wahrs. mit einer View) eine Liste aller Child-Nodes des aktuellen Nodes auf der Seite angezeigt bekommen (mit Block oder Node Content würde ich beides zurecht kommen, also die Darstellung dann im Node). Ich bekomme nicht gebacken, wo ich genau die Einschränkung machen muss, das nur Child-Nodes angezeigt werden.
Bitte gebt mir doch einen Tipp, wie ich das hinbekomme und was ihr noch an Informationen von mir braucht!
Vielen Dank!
In einer View über Nodes
am 18.08.2010 - 13:39 Uhr
In einer View über Nodes (Beiträge) musst Du
1. Filter über die beiden betroffenen Inhaltstypen (Header und Child) setzen
2. Die richtige Beziehung auswählen
3. Ein Argument für den gewünschten Header-Node angeben und danach filtern
4. Die Felder der Child-Nodes auswählen
Wenn man dann die Vorschau macht, dann kann man wunderbar den SQL angucken.
Ich hoffe, das hilft weiter.
NB: Das Nodereference-Modul liefert bereits 2 vorgefertigte Views mit für die Anzeige der Childs im Header, bzw. den Header in Childs
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
hmmm - verstehe ich nicht
am 18.08.2010 - 13:52 Uhr
Ohweh :-) Jetzt dachte ich nach dem Anschauen vom Cast: http://mustardseedmedia.com/podcast/episode37 ich hätte es fast!
Da mir ja im Grunde nur noch eins fehlt, nämlich die Parent ID als Argument auszuwählen.
Dann müsste für meine Anzeige gelten ID des gerade aufgerufenen Nodes = Parent ID der Nodes in der Liste... nur das bekomme ich nicht rein.
Und deiner Beschreibung nach, verstehe ich leider wieder nur Bahnhof :-(
In einer View über Nodes (Beiträge) musst Du
1. Filter über die beiden betroffenen Inhaltstypen (Header und Child) setzen
Bei meinem Filtermöglichkeiten gibts kein Header und kein Child? Oder verstehe ich was falsch?
2. Die richtige Beziehung auswählen
Hier gibts bei mir unter "Node Relativity" nur die Möglichkeit "Parent Node ID"
3. Ein Argument für den gewünschten Header-Node angeben und danach filtern
4. Die Felder der Child-Nodes auswählen
Wenn man dann die Vorschau macht, dann kann man wunderbar den SQL angucken.
Ich hoffe, das hilft weiter.
NB: Das Nodereference-Modul liefert bereits 2 vorgefertigte Views mit für die Anzeige der Childs im Header, bzw. den Header in Childs
Das Nodereference Modul liefert mir leider gar keine Views zur Anzeige der Childs :-( Was einigermaßen in die Richtung geht ist die View "backlinks", aber die macht ja genau das Gegenteil. Zeigt mir ja Parents an und nicht Childs....
Oh, du hast ein englisches
am 18.08.2010 - 14:19 Uhr
Oh, du hast ein englisches Drupal, ich habe es auf Deutsch - macht die Beschreibung nicht einfacher...
Eigentlich sprechen wir hier von 2 Dingen...
1. Wie zeige ich die Child-Nodes eines Nodes in seiner Node-Ansicht an
2. Wie erstelle ich selber eine View über Parent-Child-Nodes.
Zu 1:
Das Modul Nodereference bietet alles bereits fixfertig an. Da sind in den Ansichten zwei vorgefertigte Views, nämlich noderelationships_backref
und noderelationships_noderef (die kann man erweitern, damit das ganze schön aussieht, aber für den Augenblick reichts so).
Ich kann Dir das nur mit meinem Beispiel mal erklären.Da ist also ein Inhaltstyp Haus (parent) und ein Inhaltstyp Bewohner (child). Die beiden sind über die Nodereference 1:x verknüpft.
Dann gehe zum Inhaltstyp Haus, da gibts oben ein Register "Beziehungen" und dort "Back reference Settings".
Dort ist dann (wahrscheinlich unter deaktiviert) die backreferenceView zu sehen: die schiebst du hoch nach Tab oder Page. Damit wird in der Nodeansicht die View entweder als separates Tab oder als Tabelle innerhalb der Node-Ansicht eingeblendet.
Im Inhaltstyp Bewohner wird der parent automatisch eingeblendet. Auch da gibts weitere Optionen, musst Du mal angucken.
Views selbst wird in diesem Fall also nur zum "schönen" der bereits vorhanden Views gebraucht!
Zu 2.
Brauchst Du mit Punkt 1 eigentlich gar nicht mehr. Aber wie gesagt, in View erhalte ich unter "Beziehungen" wirklich nur die Felder, die für eine Beziehung Sinn machen, das heisst jene, die auf einen Parent verweisen. Bei Dir ist das schon das gefundene Feld, denke ich.
Bei Filtermöglichkeiten Header/Child) meinte ich natürlich, dass Views in meinem Beispiel nur Nodes aus den Inhaltstypen Haus und Bewohner selektieren soll, andere machen ja keinen Sinn.
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
also...
am 18.08.2010 - 14:30 Uhr
Also ich denke ich will einfach Nummer 1 erreichen.
Ich rufe node/X auf und auf hier bekomme ich neben seinem Text usw. drunter eine Liste seiner Childs...
Und obwohl ich das Modul "Node Reference" installiert habe, bekomme ich in meinen Views NICHT deine beschriebenen Views(noderelationships_backref
und noderelationships_noderef). Ich bekomm lediglich in meinen Blocks folgende neue Einträge:
Das letzte wäre ja Prima. Genau das was ich bruache, aber die scheinen alle nicht zu funktionieren. Jedenfalls zeigen sie nichts an :-(
Eine weiter Vermutung ist, ich müsste die Parent-Child-Beziehung noch irgendwo ein zweites Mal nachpflegen, dass sie hier im Node Reference auch Wirkung zeigt?
Ich habe die Parent der jeweiligen Nodes lediglich beim erstellen ausgewählt, reicht das?
Hab was herausgefunden
am 18.08.2010 - 14:57 Uhr
Hallo!
Ich habe wieder was tolles heraus gefunden. Das Modul "Node Hierarchy" mit einer View "nodehierarchy_children_list" scheint mir meinen Wunsch zu erfüllen.
Nur leider ist die Ausgabe leer. Was kein Wunder ist bei der SQL (hier mit Beispiel NODE 7):
SELECT node.nid AS nid,
node.title AS node_title,
nodehierarchy.order_by AS nodehierarchy_order_by
FROM node node
LEFT JOIN nodehierarchy nodehierarchy ON node.nid = nodehierarchy.nid
WHERE (node.status <> 0) AND (nodehierarchy.parent = 7)
ORDER BY nodehierarchy_order_by ASC
vor allem, da ich in PHPMyadmin in der Tabelle gesehen habe, das dort alle "parent"-Felder = 0 sind? Wie kommts und wie kann ich das nachträglich ändern ohne in der Tabelle zum zu pfuschen?
Grüße
Wir reden glaub nicht vom
am 18.08.2010 - 15:16 Uhr
Wir reden glaub nicht vom selben Modul...
Ich habe neben Node Reference noch Node Relationships, wie im Eröffnungsthread bereits geschrieben...Das Modul funktioniert absolut perfekt, es "kann" sogar wunderbar ein ER-Diagramm darstellen.
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch