View-Ausgabe mit eigenem PHP-Code weiter einschränken
am 20.01.2010 - 18:22 Uhr in
Es gibt schon ein Modul dafür (viewsphpfilter), leider gibt es für dieses Modul keine Doku und man weiß nicht, wie man es anwendet.
Ich bräuchte bei einem View, der 2 Content Types ausgibt, eine zusätzliche Filterung in der Art, dass jeweils 2 Felder eines Content-Typs miteinander verknüpft abgefragt werden (ein Feld allein entscheide nicht, nur wenn beide Felder zusammen bestimmte Werte haben, abfragbar z.Bsp. mit IF-Abfragen, dann soll gefiltert/nicht gefiltert werden).
Und sobald bei einem der 2 Content Types diese Bedingung erfüllt ist (die Verknüpfung der 2 CCK-Felder), dann darf der Node im View ausgegeben werden.
Mit Views alleine geht das wohl nicht, zusätzlicher PHP-Code könnte das filtern, aber wie und wo eingeben, wenn doch viewsphpfilter mangels Doku nicht anwendbar ist?
Danke.
- Anmelden oder Registrieren um Kommentare zu schreiben
viewsphpfilter ist die Lösung
am 25.01.2010 - 19:54 Uhr
Hallo,
wenn du den viewsphpfilter installiert hast, kannst bei den views Einstellungen unter Filter die option Node: Node ID PHP handler auswählen.
Dort kannst du in der Textbox dein phpCode eingeben der als Rückgabewert die node ids zurückgibt, die angezeigt werden sollen. Bei mehreren nodes gibst du sie in einem array zurück.
Mfg Tareq
Zitat: leider gibt es für
am 25.01.2010 - 20:05 Uhr
leider gibt es für dieses Modul keine Doku und man weiß nicht, wie man es anwendet.
Hm, ich bin mir nicht sicher
am 25.01.2010 - 20:08 Uhr
Hm, ich bin mir nicht sicher ob ich dich richtig verstehe.
Mit Views kann ich doch Werte aus CCK-Felder unterschiedlicher Inhaltstypen filtern.
Und Views macht daraus eine AND Abfrage.
Geht das bei dir so nicht?
vg
--
md - DrupalCenter.de
mdwp*
Der 1. Inhaltstyp kann nicht das Bild des 2.Inhaltstyp enthalten
am 25.01.2010 - 20:19 Uhr
Ein einfaches AND geht hier leider nicht.
Ich habe 2 Inhaltstypen, jeder Inhaltstype hat jeweils ein CCK-Feld imagefield (das ist ein echtes hochgeladenes Bild).
Nun habe ich eine einfache Ansicht:
- Alle Nodes beider Inhaltstypen anzeigen. Problemlos machbar.
Dann habe ich noch diese Ansichten:
- Alle Nodes vom 1. Inhaltstyp anzeigen, die ein Bild enthalten, also imagefield Feld gesetzt ist.
und eine andere Ansicht:
- Alle Nodes vom 2. Inhaltstyp anzeigen, die ein Bild enthalten, also imagefield Feld gesetzt ist.
problemlos machbar.
Aber eigentlich brauche ich NUR diese Ansicht hier:
- Alle Nodes vom 1. und 2. Inhaltstyp anzeigen, wo ein Bild enthalten ist, also imagefield Feld gesetzt ist.
Und genau hier ist das AND, das Du angesprochen hast, ein Problem: Das AND macht nämlich folgendes daraus: Jetzt muss wegen dem "blöden" AND sowohl ein Feld field_nodetpye1_bild[0] als auch ein Feld field_nodetype2_bild[0] einen Wert haben, also ein Bild hochgeladen haben.
Und das ist unmöglich! Da der eine Inhaltstyp niemals das Bild des anderen Inhaltstypen enthalten kann.
Hier ist Views einfach zu wenig flexibel.
Gibt es noch einen Lösungsansatz? Danke.
Das kannst Du über eine
am 25.01.2010 - 20:43 Uhr
Das kannst Du über eine preprocess Funktion in template.php Deines Themes regeln (siehe hier).
Beste Grüße
Werner
views preprocessing
am 25.01.2010 - 21:05 Uhr
Ja, danke, da steht nur allgemein, wie man Views in preprocess-Funktionen anspricht, aber nicht wie man z. Bsp. dann den Filter eines Views verändert mit ganz eigenem PHP-Code.
In dieser
am 25.01.2010 - 21:28 Uhr
In dieser Preprocess-Funktion bekommst Du einen rows-Array geliefert. Das sind die Zeilen, die Views ausgeben möchte. Die mußt Du dann überprüfen und gegebenenfalls streichen (unset). Das ist alles. Es stehen dort natürlich nur die Felder, die Du im View angezogen hast. Also mußt Du alle Felder, die Du zur Prüfung brauchst, auch aufführen (evtl ohne Ausgabe).
Beste Grüße
Werner
Wenn es nur am AND liegt,
am 25.01.2010 - 22:05 Uhr
Wenn es nur am AND liegt, nimm doch das Modul http://drupal.org/project/views_or
vg
--
md - DrupalCenter.de
mdwp*
viewsphpfilter ist doch die Lösung
am 25.01.2010 - 23:30 Uhr
Aber eigentlich brauche ich NUR diese Ansicht hier:
- Alle Nodes vom 1. und 2. Inhaltstyp anzeigen, wo ein Bild enthalten ist, also imagefield Feld gesetzt ist.
Hallo Drupal Fan,
wenn ich dein Problem richtig verstehe, ist dafür ist der viewsphpfilter die beste Lösung. Bei views fügst du als Filter nur den Node: Node ID PHP handler zu. Im darauf folgenden Formular wählst du als Handler PHP Code aus. In der Textbox kannst du jetzt x beliebigen PHP Code eingeben. In deinem Fall also Irgendetwas in der Art:
$query1 = "SELECT nid FROM content_type_inhaltstyp1 WHERE field_nodetpye1_bild_value = der Wert den er haben soll"
$query2 = "SELECT nid FROM content_type_inhaltstyp2 WHERE field_nodetpye2_bild_value = der Wert den er haben soll"
$handle = db_query($query);
$nlist = array();
while ($result = db_fetch_array($handle))
$nlist[] = $result['nid'];
$handle2 = db_query($query2);
while ($result2 = db_fetch_array($handle2))
$nlist[] = $result2['nid'];
if($nlist[0]=="")
return 0;
else
return $nlist;
Damit kriegt da view doch alle nids vom Inhaltstyp1 und Inhaltstyp2 die ein bild haben.
So hätte ich das jetzt gemacht.
Aber vielleicht verstehe ich das Problem auch nicht richtig :(
Mfg Tareq