Sie sind auf Seite 1von 2

Node-Reference + Views + Rules + Rules-Views Hat man ein grobes Verstndnis von relationalen Datenbanken, ist das im Folgenden

beschriebene eigentlich relativ simpel und war trotzdem nicht ganz so leicht wie es auf den ersten Blick scheint. Aber zum Anfang, wofr ich etwas ausholen muss. Ich habe eine Seite mit relativ vielen Contenttypes. Nutzer der Seite legen in e inem Formular, dass mehrere Schritte umfasst, vier Nodes mit jeweils unterschied lichen Contenttypes an, die schlielich in einem Supertype zusammengefasst werden. Dies geschieht einfach mit vier Node-References, die die vier Nodes referenzier en. Hinzu kommt, dass die nicht immer die selben Contenttypes kombiniert werden, son dern der Nutzer im ersten Schritt Infos eingibt, anhand derer entschieden wird, welche Formulare in den nchsten Schritten angezeigt werden. Dabei entspricht jede r Schritt dem Formular eines Contenttypes. So wandern also Supernodes in die Datenbank, die jeweils ein Paket aus vier Node s referenzieren, die sich im Typ aber unterscheiden. Jetzt stand ich vor dem Problem dass die Infos nicht nur in der Datenbank liegen sollen, sondern natrlich auch genutzt werden sollen. In diesem speziellen Fall, sollen die Daten maschinell weiter verarbeitet werden. Die Daten sollen in Rohfo rm per Mail automatisch von Drupal nach ihrer Erstellung bermittelt werden. Wo si e dann wahrscheinlich hndisch aus der Mail kopiert und in das nchste Programm gewo rfen werden (Dieses Vorgehen ist nicht meine Entscheidung und erstmal als gottge geben hinzunehmen.). Der grundstzliche Lsungsweg war mir gleich zu Beginn klar. Wenn immer es mehr oder minder komplizierte Daten zu verknpfen und aus der Datenbank zu holen gilt, nimm t man unter Drupal Views. Das einfach gesprochen nicht viel mehr tut, als ein GU I zu bieten, in dem man sich seine Queries zusammenklicken kann. Als weiteren Baustein gibt es Rules, mit dem sich leicht Regeln erstellen lassen , die bestimmte Dinge automatisch ausfhren, wenn bestimmte Ereignisse eintreten. So lassen sich unter anderem auch Mails verschicken. Die Regel in meinem Fall la utete grob wie folgt: Wenn ein neuer Inhalt gespeichert wurde, der vom Typ Superty p ist, dann schick eine Mail mit dem Inhalt ??? an die Adresse . Jetzt stellte sich nur noch die Frage, wie ich den Inhalt von Views an Rules ber geben bekomme, aber auch dafr hat ein schlauer Entwickler zumindest fr Drupal 6 ei n Modul geschrieben, das zwar die Version 1.0 noch nicht erreicht hat, aber sein en Zweck erfllt. An diesem Punkt, dachte ich ich htte das Problem eigentlich gelst, aber hier fngt d er Spa erst an und hier schliet sich auch der Kreis zum Anfang. Wenn man ein wenig Peil von Datenbanken hat, ist das Vorgehen relativ simpel. Durch die Relationen von der Supernode holt man sich die jeweiligen Datenstze der Subnodes und muss n ur noch deren Felder ausgeben. An dieser Stelle liegt der Hund dann auch gleich an zwei Stellen im Pfeffer. Zum einen ist es nicht eben offensichtlich wie man Views dazu bewegt die Felder in Plain Text auszugeben, ohne HTML. Zum anderen muss man erstmal drauf kommen, wie man die Referenzierten Nodes berhaupt aus Views herausbekommt. Und eigentlich hng t beides zusammen. Ich fange mal mit letzterem an. Grundstzlich hat man in Views, sofern man sich gr undstzlich dafr entschieden hat, dass der View sich um Nodes dreht, die Mglichkeit entweder Fields oder Nodes darzustellen (Row Style). Da man eigentlich ja die Fe lder in Plain Text haben mchte, neigt man hier dazu Fields zu whlen. Dies ist weni

g zielfhrend, da ich z.B. in meinem Fall zwar nur vier Nodes referenziert hatte, die aber wechselnde Contenttypes und damit insgesamt sehr viele Felder hatten. D as ntige Query, um so das gewnschte Ergebnis zu erhalten htte jeden Rahmen gespreng t und ab - ich glaube - 61 Queries sagt Views ohnehin beschied und fragt, ob man noch alle Tassen im Schrank hat. Also fllt die Wahl auf den Row Style Nodes. Damit kommt man der Sache schon nher. In den Settings dieses Row Styles kann man jetzt einen bestimmten Buildmode auswhle n. Betrachtet man jetzt die Konfiguration der Displays der jeweiligen Contenttypes, kann man dort fr die verschiedenen Buildmodes (Full Node, Teaser, RSS, ) angeben, wie die Referenzen dargestellt werden sollen (Full Node, Title, Title (Link), ). Whlt man hier Full Node so hat man zumindest alle gesuchten Informationen auf dem Schirm und fhlt sich dem Ziel schon sehr nahe - schon wieder. Jetzt gilt es nr no ch das lstige HTML los zu werden und gut, aber hier hab ich mir fast die Zhne ausg ebissen und auch zwei Anfragen an drupal.stackexchange.net haben leider nicht ge holfen. Geholfen hat in diesem Fall simples Node-Theming. Ich whle einen Buildmode der No de, den ich nicht brauche (z.B. Teaser). Diesen Buildmode kann in der node-conten ttype.tpl.php abfragen, bekomme aus der $node-Variablen dann die NodeIDs der refe renzierten Subnodes. Deren Inhalte knnen mit node_load($nid) geladen und dann nac h Belieben ausgegeben werden. Mit den Rules-Views Modul lassen sich dann Argumente von Rules an Views bergeben und ein bestimmter View in eine Variable rendern. Man bergibt als Argument also d ie NodeID des frisch gespeicherten Supertypes. Daraufhin rendert Views den zugehr igen View, dem das HTML leider nicht vllig auszutreiben ist. Dies lsst sich aber m it der Aktivieren des Moduls php Filter beheben. Damit kann man die Ausgabe noch d urch PHP anpassen (strip_tags(), trimm(), ) und die Ausgabe so bereinigen. Fertig ist die Reintextmail. tl;dr Ein unschnes Problem ist noch, dass man so einen Buildmode verbraucht, den man ev tl. braucht. Das liee sich sicher mit einem selbstgeschriebenen Modul lsen, dass e inen weiteren hinzufgt, geht aber bereits jetzt (zumindest theoretisch) mit Displ ay Suite und Node Displays. Node Displays fgt beliebig Build modes hinzu, die bei mir aber dazu gefhrt haben, Views sich beim Rendern tot luft und je nach Zeitbeschrnkung durch den Server abbr icht. Wenn ich Zeit habe, versuche ich das mal mit einer frischen Installation z u reproduzieren und reiche dann mal eine Issue ein (ob bei Views, Display Suite oder Node Displays wird sich dann zeigen).