Kapcsolódó node-ok panelen

pseb képe

Üdv mindenkinek!
Adott egy panel, melyen van egy node és egy nézet. Szeretném, ha a nézet szűrőként használhatná a panelon épp megjelenő node egyik adott cck mezőjét, ily módon kapcsolódó node-okat sorolna fel. (5. drupal)

Drupal verzió: 
pseb képe

Paraméternek a kérdéses CCK mezőnek a nevét (aminek az adatbázisban most content_field_style.field_style_value felel meg) beállítottam, majd az Argument Handling Code részben

$nid = arg(1); //az arg(1) megadja az aktuális oldal a node id-jét
$style = db_result(db_query("SELECT field_style_value FROM content_field_style WHERE nid = '%d'",$nid)); //megkapom az aktuális node style értékét
$args[0] = $style; ez lesz az első (és most egyetlen) paraméter
return $args;
0
0
csg képe

Lehet, hogy ez így működik, de ha kódot osztasz meg másokkal, akkor mindig figyelj arra, hogy semmilyen hiba ne legyen benne.

1. A táblaneveket Drupalban mindig kapcsos zárójelbe tesszük. Mint bizonyára tudod, telepítéskor megadhatunk tábla előtagot arra az esetre, ha nem csak a Drupal táblái lennének az adatbázisunkban, és a kapcsos zárójel használatával a Drupal automatikusan beteszi a tábla előtagot a lekérdezésbe. Ez a példa így nem működik olyanoknál, akik beállítottak tábla előtagot.

2. A nid az nem szöveg típusú, ezért nem kell aposztróf a %d köré.

3. A Drupal kódolási szabványa szerint a függvények paraméterei közé a vesszőn kívül szóköz is kell, nálad a $nid elől lemaradt.

4. Az utolsó komment előtt nincs //

Remélem, hogy nem veszed ezt kötözködésnek. Csak oda akarok kilyukadni, hogy többnyire azért írunk be ide kódrészleteket, hogy másoknak példát mutassunk, úgyhogy figyeljünk oda a részletekre is.

0
0

--
Csonka Gergely
http://cheppers.com

pp képe

Én inkább ezt a kódot tenném be, mivel így megspórolsz egy teljesen felesleges adatbázis lekérést.

$node = node_load(arg(1));
$args[0] = $node->field_style //ezt nem tudom, ezt meg kell nézni, hogy pontosan mi lesz, de ezt theme_developerrel pl. könnyedén kideríthető
return $args; // ez biztos kell ide?

valamint feljavítanám egy icipicit:

if (arg(0) == 'node' and is_numeric(arg(1))) {
  $node = node_load(arg(1));
  $args[0] = $node->field_style //ezt nem tudom, ezt meg kell nézni, hogy pontosan mi lesz, de ezt theme_developerrel pl. könnyedén kideríthető
  return $args;
}

pp

0
0
pseb képe

a segítséget. A vége ez lett:

if (arg(0) == 'node' and is_numeric(arg(1))) {
 $node = node_load(arg(1));
 $args[0] = $node -> field_style[0][value]; 
}

A return sor nélkül valóban megy, de a < ?php ? >-t ide (Argument Handling Code) nem kell/szabad kitenni, ha valaki használni akarja.
Tehát most már felsorolódik további akárhány node, aminek a "style" cck mezője megegyezik. Most ha a felhasználó elkezd kattingatni itt, mindig csak ebben a körben marad. Ahhoz, hogy kitörhessen, kellene legalább egy másik CCK mező, amivel VAGY kapcsolatban áll a nézet. Tehát pl. egy piros bicikli alatt nem csak a piros járművek, hanem a mindenféle színű kerékpárok is megjelennének.
2 argumentum egy nézetben VAGY kapcsolattal megjeleníthető? Vagy hagyjam a fenébe, és csináljak 2 nézetet? Az egyikben a pirosak, a másikban a biciklik? Jobb lenne keverve.
0
0