Blocksichtbarkeit in Abhängigkeit von Taxonomievariable (neuer Versuch)
Eingetragen von draeck (93)
am 17.11.2008 - 20:35 Uhr in
am 17.11.2008 - 20:35 Uhr in
Hallo,
ich versuche nochmal, mein problem zu erläutern.
1. Ich habe Taxonomie
2. Ich habe einen Block
3. Dieser Block soll nur angezeigt werden, wenn in $node->taxonomy bei vid der Wert 3 (z.B) drin steht
Nun habe ich den Block gebaut und bei Anzeigeoptionen gewählt
x nur anzeigen, wenn der folgende Code TRUE zurückgibt
der "folgende Code" sieht so aus.... nun ja, erster Versuch.... sorry! :-)
foreach($node->taxonomy as $el1) {
if($el1->vid == '3'){
return TRUE;
}
else return FALSE;
}
Warum geht das nicht!? Heul?
Ich dachte (naja...), dass die foreach Schleife mir die einzelnen Taxonymyarrayobjekte liefert und dann eben kann ich von denen vid testen.....
Hilfe möglich?
Danke und Gruß
Dirk
- Anmelden oder Registrieren um Kommentare zu schreiben
Was ist vid und tid
am 18.11.2008 - 00:26 Uhr
Du bringst da Einiges durcheinander.
Ein Term hat eine tid - die Term ID
Ein Vocabulary hat eine vid - die Vocabulary ID
Lasse dir mit
<?php
print '<pre>';
print_r($node->taxonomy);
print '</pre>';
?>
anzeigen. Danach weisst Du etwas genauer was in der foreach Schleife passieren muss um zu einem gewuenschten TRUE zu kommen.
$node->taxonomy
Um zu Ergebnis zu kommen sollte folgendes funktionieren:
<?php
if (count($node->taxonomy) > 0) {
foreach ($node->taxonomy as $tid => $term) {
if ($node->taxonomy[$tid]->vid == 3) {
return TRUE;
}
}
}
return FALSE;
?>
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
ok, eine dummy-nachfrage
am 18.11.2008 - 19:32 Uhr
Hallo Quiptime,
danke erstmal.
Was soll => $term bezwecken?
Warum gibt $node->taxonomy nur ne Zahl zurück und nicht das ganze Objekt (nennen wirs mal taxonomy[n])?
Deine Schleife geht im Übrigen leider nicht.
Der Block ist nun immer weg und kommt niemals zum Vorschein....
...bitte um Erhellung
Danke
Dirk
--++--
draeck
++--++
Hast Du print_r($node) und print_r($node->taxonomy) gemacht?
am 18.11.2008 - 19:50 Uhr
Warum gibt $node->taxonomy nur ne Zahl zurück und nicht das ganze Objekt
Ganz einfach: Weil das Nodeobject so aufgebaut ist.
(In spaeteren Versionen von Drupal, D7, wird mit grosser Wahrscheinlichkeit das Nodeobject etwas anders aufgebaut sein. Das ist der Grund sich mit print_r($node) das Nodeobject anzusehen wenn man seine typische Struktur in der jeweiligen Drupalversion nicht kennt.)
Das habe ich im Zusammenhang mit meinem Post gemacht. Deswegen weiss ich das der Code funktioniert.
Das Nodeobject
Die Sache ist allerdings die, das an der Stelle an der man $node->taxonomy verwendet das Nodeobject auch verfuegbar sein muss. Im Block-Kontext ist dies nicht der Fall. Also muss man das Nodeobject erst laden um $node->taxonomy verwenden zu koennen. Das geht beispielsweise dann wenn eine Node angezeigt wird ueber die URL.
Typischer Weise hat bei einer Nodeanzeige die URL die Form /node/x. X ist die Node ID. Mit ihr kann man das Nodeobject laden:
<?php
if (arg(0) == 'node' && is_numeric(arg(1)))
$node = node_load(arg(1));
}
?>
Insgesamt wuerde der Code zur Steuereung der Blockanzeige bei Anzeige einer Node so aussehen:
<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
if (count($node->taxonomy) > 0) {
foreach ($node->taxonomy as $tid => $term) {
if ($node->taxonomy[$tid]->vid == 3) {
return TRUE;
}
}
}
return FALSE;
}
?>
Die Abfrage nach der URL mit
if (arg(0) == 'node' && is_numeric(arg(1)))
verhindert zum Einen das es Fehler gibt wenn keine Node angezeigt wird und stellt zum Anderen sicher das Der Funktionscode nur ausgefuehrt wird wenn eine Node angezeigt wird.Die Blocksichtbarkeitsteuerung wuerde mit meinem Code also nur bei der Anzeige einzelner Nodes funktionieren.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
nochmal
am 18.11.2008 - 19:57 Uhr
Also: ich habe meinen ursprünglichen Weg mal getestet in der node.tpl testweise
<?php
foreach($node->taxonomy as $el) {
if($el->vid==3)print '1';
else print'0';
}
?>
Das arbeitet genau so wie es soll. Es gibt beim vocabulary 3 eine 1 zurück, bei allen anderen eine 0.
Warum soll das also nicht funktionieren, wenn ich anstelle der printbefehle return TRUE setze?
--++--
draeck
++--++
hey super
am 18.11.2008 - 20:00 Uhr
uups
da haben sich deine antwort und mein nachsatz überschnitten....
ok, ich guck mal und melde mich wieder, falls ich es nicht hinkriege...
danke und gruß
dirk
--++--
draeck
++--++
mh
am 18.11.2008 - 20:13 Uhr
DEine Erklärungen sind bestens! Danke.
Nur funktioniert der Code nicht.
Der Block wird nie angezeigt..... mal sehen... jedenfalls war die Sache mit dem Node-Laden sehr hilfreich.
Zwei Bemerkungen weiter oben hatte ich ja meine Version nochmal getestet, die ging auch (im node selbst natürlich).
Irgendwie habe ich das Gefühl, das im Argument Handling Code immer False rauskommt!?
...
--++--
draeck
++--++
Modul "Relevant Content"
am 21.11.2008 - 23:30 Uhr
Hallo Dirk,
hast du dir schon mal das Modul Relevant Content angeschaut (http://drupalmodules.com/module/relevant-content)? Das scheint mir die gewünschte Funktion zu bieten.
Viel Erfolg!
Frank
Gruß
Frank
Bitte Erledigtes im Betreff des ersten Postings als [gelöst] markieren. Danke!