node-ok legyüjtése azonos cck_field tartalom alapján

Paal képe

Sziasztok!

Egy termékbemutató oldalon az azonos típusú, de pl. különböző színű termékeket külön-külön node-onként kell felvenni. Egy adott termék megjelenítésekor a termék teljes nézete alatt meg kell jeleníteni a hasonló (csak más színű) termékek előnézeti képeit, linkkel a node-jukra.

Létrehoztam neki egy új tartalom típust, amely a következő mezőkkel bír:

  • Kategória kód (field_category_id)
  • Színkód (field_color_id)
  • Termék kód (field_product_id)
  • Termék kép (field_product_image)
  • Kapcsolódó termékek (field_same_product) > View field

A termék kódot a kategória kód és a színkód alkotja, pl.:

Fehér póló

  • Kategória kód: 02-328
  • Színkód: 9001
  • Termék kód: 02-328-9001

Fekete póló

  • Kategória kód: 02-328
  • Színkód: 2001
  • Termék kód: 02-328-2001

Készítettem egy views-t, ami imagecahce segítségével előállítja a megfelelő méretű kis képet, linkkel a képhez tartozó node-ra, valamint a bonus:grid_view-val megjelenítem ezeket a kis képeket.

Ezt a nézetet a viewfield (vagy insert_views) modullal be is tudom rakni a termékhez, csak éppen azt nem tudom, hogyan kellene a nézetet paramétereznem?

Vagyis nekem a nézetben azokat a termékeket kellene legyűjtenem, amiknek a kategória kódja u.az.

Nagyon köszi!

Üdv, Pali

Pasqualle képe

ez ugye Drupal 5?

views 2vel ez siman mukodik. nem igazan akarom megtanulni, hogyan van ez az 1essel..
talan valaki mas jartas benne..

0
0
Paal képe

Views2-vel hogy van? Minden bizonnyal az 1.6-ban is hasonlóan kell.

Szerintem csak nem látom a fától az erdőt. Eddig mindig csak node-referenciával (%nid) paraméterezett lekérdezéseket használtam.

Köszi, Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

Pasqualle képe

Add arguments
Content: Text: category_id (field_category_id)

es kesz..

ez kerul az sqlbe ha 02-328 argumentummal hivom le a viewt

 LEFT JOIN content_type_valami node_data_field_category_id ON node.vid = node_data_field_category_id.vid
 WHERE node_data_field_category_id.field_category_id_value = '02-328'
0
0
Paal képe

Üdv,

Pont így csináltam, de nem jelent meg semmi. Kipróbáltam az insert_view modullal berakni, így legalább már megjelenik valami.
Most egy adott node field_category_id értéke még egy másik node-ban szerepel, vagyis 2 találatot kellene visszaadnia. De ez visszaadja az összes eddig felvitt node-ot! Valahogy meg kell neki adni, hogy csak az adott node-hoz tartozó field_category_id-kra gyűjtsön le...

Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

Pasqualle képe

megadtad az argumentumot?
valahogy igy kell D5 insert_view-al

[view:view_neve==02-328]

0
0
Paal képe

Így már teljesen jól működik, köszi!

De még mindig van kérdésem. :)

Ezt nem lehet változóból venni? Node_reference használatakor ha pl. a %nid paramétert beállítom default értéknek, akkor node felvitelekor hozzá sem kellett nyúlni.

Próbáltam megadni a viewfieldnek a [field_category_id-formatted] paramétert, vagy az insert_view-nak [view:same_product=0=field_category_id-formatted] vagy
[view:same_product=0=%field_category_id-formatted] paramétert, de nem működik.

Köszi, Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

Pasqualle képe

nos en ugy latom az insert_view nem kezel valtozokat,
a viewfieldnel is csak %nid, %author es %viewer valtozokat lehet hasznalni mint argumentum.
meg gondolkoztam, hogy talan a panels modullal megoldhato lenne de ott sem talaltam megoldast, ugyhogy irni kell egy kis kodot.

ez egy pelda ami a node cck_fieldjet hasznalja a megjelenitett a view argumentumakent:

if (!( arg(0) == 'node' && is_numeric(arg(1)) )) {
  return;
}
 
$node = node_load(arg(1));
 
$category = $node->field_category[0]['value'];
print t('Products in category @category', array('@category' => $category));
 
$view_name = 'viewneve';
$limit = 0; // number of returns
$view_args = array($category);
$view = views_get_view($view_name);
print views_build_view('embed', $view, $view_args, FALSE, $limit);

ezt a kodot belerakod egy blokkba, es igy barhol megjelenitheted az oldalon..

0
0
Paal képe

<?php
if (!( arg(0) == 'node' && is_numeric(arg(1)) )) {
  return;
}
 
$node = node_load(arg(1));
 
$category = $node->field_category_id[0]['value'];
print t('Products in category @category', array('@category' => $category));
 
$view_name = 'same_product';
$limit = 0; // number of returns
$view_args = array($field_category_id);
$view = views_get_view($view_name);
print views_build_view('embed', $view, $view_args, FALSE, $limit);
?>

A fentire módosítottam, de most újból az összes eddig felvitt terméket legyűjti, mintha nem szűrne az aktuális field_category_id értékére. Ja, a field_category_id az sima Text beviteli mező, mert nem 100%, hogy csak számok lesznek benne. Ez gond? ... && is_numeric(arg(1)) ....

Köszi, Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

Pasqualle képe

a text mezo nem gond. az arg(1) ben a node id van.
a kategoriat kiirja jol? Products in category 02-328?

0
0
Pasqualle képe

$view_args = array($category);

ezt a sort ne modositsd
0
0
Illyés Edit képe

<?php
$nid = arg(1);
$parent_node = node_load($nid);
$category = $parent_node->field_category_id[0]['value'];
?>
[view:view_neve==<?php print $category; ?>]

A szűrők sorrendjénél fontos, hogy előbb legyen a PHP és utána az Insert View.

0
0
Paal képe

Ez tipikus "nem látom a fától az erdőt" eset volt. Így utólag pedig mennyire egyszerű(nek tűnik).

Nagyon köszönöm!

Üdv, Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

Paal képe

Hogyanan tudok a taxonomy ID-re hivatkozni?

taxonomy
 
Array
(
    [41] => stdClass Object
        (
            [tid] => 41
            [vid] => 2
            [name] => Férfi
            [description] => 
            [weight] => 1
        )
 
)

Ugyanis az azonos típushoz tartozó cikkek kellene így lekérdeznem, de nem tudom, hogy nyerhető ki a tid.

Nagyon köszönöm!

Üdv, Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

Illyés Edit képe

$tombneve[41]->tid, vagy begyűjtöd a tömb kulcsait: array_keys($tombneve), ekkor megkapod a tid-eket egy tömbben, vagy... sokféleképpen lehet, attól függ, hogyan/mivel kérdezed le a taxonomy-t.

0
0
Paal képe

$tombneve[41]->tid

Nekem pontosan a 41-re lenne szükségem. De ezt honnan tudom meg? Ha pedig benne van az összes egy tömbben, akkor onnan hogyan tudom meg, hogy melyik az aktuális node-hoz tartozó?

Nagyon köszi!

Üdv, Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

Illyés Edit képe

Paal képe

Az utókor számára:

1.

<?php
if (!( arg(0) == 'node' && is_numeric(arg(1)) )) {
  return;
}
 
$node = node_load(arg(1));
 
$category = $node->field_category_id[0]['value'];
print t('Products in category @category', array('@category' => $category));
 
$view_name = 'same_product';
$limit = 0; // number of returns
$view_args = array($category);
$view = views_get_view($view_name);
print views_build_view('embed', $view, $view_args, FALSE, $limit);
?>

2.

<?php
$nid = arg(1);
$parent_node = node_load($nid);
$category = $parent_node->field_category_id[0]['value'];
?>
[view:same_product==<?php print $category; ?>]

Ennél a megoldásnál engedélyezni kell az insert_view funkciót a "PHP code" beviteli formánál. A szűrők sorrendjénél fontos, hogy előbb legyen a PHP és utána az Insert View.

Nagyon köszönöm!
Csütörtökön a sört én fizetem nektek, ha jöttök!

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

Paal képe

Üdv,

Előjött az első hiba, ami igazából nem hiba, csak rosszul lett tervezve?
Elvileg minden terméknek egyedi cikkszáma van (én így tudtam).

Erre felvitelkor találkozok olyan termékkel, ami több kategóriában is megtalálható, de u.azzal a cikkszámmal :(

Termék: mintás póló
Kategória1: kézilabda (tid=62)
Kategória2: foci (tid=80)
Kategória3: kosárlabda (tid=21)

Mivel a meghívott views (same_product) paraméterének csak a field_category_id van megadva (ez nem egyenlő a taxonom-ID-val! csak a neve hasonló), ezért az összes kategóriában szereplő "mintás pólót" lehozza a színeknél.

Ha jól gondolom, a same_product meghívásnak még egy paramétert kellene adni, ami a taxonomy term-ID lenne. Így csak az azonos term-ID-be tartozókat gyűjtené le, és nem duplázná, triplázná, stb. az eredményt.

Így már csak 2 kérdés maradt:

  1. Hogyan kérdezem le az adott node $tid-jét (csak egy van neki)?
  2. Hogyan bővítsem a views-t, hogy figyelembe vegye a term-ID -t is?
  3. Illetve még egy, az insert_view függvény további paraméterezése?

Nagyon köszönöm!

Üdv, Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

Paal képe

Ez alapján sikerült lekérdeznem a term-ID-t, majd azzal kiegészítve a views paraméterét, szűkítenem a lekérdezést.

http://drupal.hu/node/3173#comment-11606

Üdv, Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan