Hasonló node-ok ajánlása egy node végén

Anonymous képe

Helló!

Hogy lehetne azt megoldani, hogy egy adott node-nál a tartalmi rész után meg legyen jelenítve találomra 5 db csatolt képe azon node-oknak, amik ugyanolyan taxonomy-címkékkel rendelkeznek, mint az aktuális node?
Pl katalógusoknál van ilyen megoldás, amikor hasonló termékeket ajánlanak. Vagy a video-megosztóknál is ilyen van.

Köszönet!

Hojtsy Gábor képe

aboros képe

nálam 780 ezer. vagy csak ilyen gyorsan szaporodik? :)

0
0

-
clear: both;

Anonymous képe

Köszönöm a segítséget! Megnéztem néhány linket, addig jutottam, hogy ki tudom íratni a node taxonomy term-jeit a node végén. Pedig vannak olyan kódok is, amik hasonló node-ok listáját ígérik, de nem működnek... Amúgy 5.2-es Drupalt használok.

0
0
aboros képe

nem tudom pontosan mit akarsz csinálni és biztosan ezer meg egy megoldás van, valószínűleg elegánsabb is előfordul, de nagy vonalakban:

- készítesz egy viewt, amit beállítasz, ahogy akarsz. típusát, mezőit, szűrőket, rendezés szempontjait, stb. argumentumként megadod neki, hogy 'taxonomy term name' vagy 'taxonomy term id' ahogy tetszik. (később persze ennek megfelelően kell majd használnod)
- a megfelelő tartalomtípus tpl.php filejában, a megfelelő helyen felépíted a viewt, átadva neki az argumentumot. ehhez használod a views_get_view($view_name) hurkot, hogy meghívd a viewt, ezután pedig a views_build_view($type, &$view, $args = array(), $use_pager = false, $limit = 0, $page = 0) hurokkal megjeleníted azt.

bővebben olvashatsz erről a módszerről itt: http://drupal.org/node/48816

rengeteg más megoldást is el tudok képzelni. ;)

0
0

-
clear: both;

Anonymous képe

Igen, de meg lehet oldani, hogy a view mindig az éppen megjelenített node-hoz tartozó kifejezések szerint szűrjön? Hogyan?

0
0
Paal képe

Van magyar leírás ilyenről. Ajánlott olvasmányok:

Magyar Drupal kézikönyv/Tippek és trükkök/Tartalomszervezési megoldások II. - Views és CCK modul

Amire szükséged van:

Ha a nézet az URL végén argumentumot kap (pl. www.honlapneve.hu/csapat/12), akkor kilistázza az adott csapatra – esetünkben a node/12 azonosítójú, csapat típusú tartalomra – node reference útján hivatkozó node-okat, azaz a csapat játékosait. Ezt a nézetet Viewfield modullal tudjuk beágyazni a csapat node-okba:

1. Egészítsük ki a Csapat CCK-s tartalomtípusunkat egy Viewfield mezővel.
2. Argumentumként adjuk át az aktuális node azonosítóját: %nid.
3. Ha ezek után felkeressük bármelyik Csapat típusú node-ot, ott látjuk az adott node-ra node reference útján hivatkozó játékosok listáját.

Érdemes azért a másik írást is elolvasni előtte: Tartalomszervezési megoldások I. - Taxonomy és Book modul

Ü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

Anonymous képe

A viewfield modult próbáltam egyszer, de nem barátkoztam meg vele...

Most így próbálkozok:
A nézetem végére megadtam argumentumként a "taxonomy: kifejezés azonosító"-t. Szűrőt talán nem is lesz szükségem használni.
A nézetem kezdőlapjának url-je így néz ki: www.honlap.hu/nezetneve, ebben vannak listázva a taxonomy kifejezések. Rámegyek az egyik kifejezés linkjére, ekkor jutok a www.honlap.hu/nezetneve/26 oldalra, ahol az ezen kifejezéshez tartozó node-ok vannak, képpel, ahogy megadtam. Na, pont ezekből az oldalakból kellene mindig azt berakni a node végére, amilyen kifejezést a node-hoz kapcsoltam.

Sikerült beágyaznom a nézetemet a node-ba az aboros által közölt kódokkal:

$view = views_get_view("nezetneve");
print views_build_view($type, &$view, $args = array(), $use_pager = false, $limit = 0, $page = 0);

Ez eddig a nézet "kezdőlapját" adja.
Mit kellene beírni a kódba, hogy azt adja, amit szeretnék?

(Igaz, ez még mindig nem a legjobb megoldás lesz, mert ált. több kifejezés is tartozik egy node-hoz, az igazi az lenne, ha ezek közül mind listázna a view. De kezdetnek ez is bőven jó lenne.)

0
0
Anonymous képe

Na, találtam egy elég jó megoldást:

<?php
$terms = taxonomy_node_get_terms($node->nid);
foreach ($terms as $key => $tobj) { // $key a megjelenített node TID-je
$termid = $tobj->tid;
}
 
$view = views_get_view("nezetneve");
print views_build_view('embed', &$view, $args = array ($args[1]=$termid), $use_pager = false, $limit = 5, $page = 0);
?>

Ez arra az esetre jól működik, amit leírtam előbb.
Azt meg tudja valaki mondani, hogy lehet megadni a view táblázat nézetének a paramétereit (hány sor x hány oszlop), vagy azt elérni, hogy a lista nézet vízszintesen egymás mellé listázza az elemeket? Próbáltam azzal, hogy a css-ben adtam az oldalhoz tartózó smink class-ának float:left tulajdonságot, de ez nem szép megoldás, mert minden listát így kezel az oldalon, szétcsúszik minden.
Köszi ha tudtok valamit!

0
0
aboros képe

ha a foreach -be teszed a nézet felépítését, akkor az összes kategóriára meglesz a nézeted.

$terms = taxonomy_node_get_terms($node->nid);
$view = views_get_view("nezetneve");
foreach ($terms as $key => $tobj) {
$args = array($tobj->tid);
print views_build_view('embed', $view, $args, false, 5, 0);
}
0
0

-
clear: both;

Anonymous képe

Köszi! Működik, de ahány kifejezés, annyiszor öt node-ot sorol fel.
Ennél a tartalomtípusomnál csak egy szótár volt, de ha több szótár is van, akkor hogy lehet elérni, hogy csak egy adott szótárat figyeljen a kód, aszerint listázzon? Én azt csináltam, hogy megadtam az előző kódomnál $args-nak ezt: $args = array ($args[1]=6, $args[2]=$termid). Itt már egy másik view-t hívok meg, ahol az első argumentumnak a szótár-azonosítót, másodiknak a kifejezés-azonosítót adtam meg.
Ez egy telefon-leírásos oldalnál kellene, ahol van "gyártó", "forma"(kihajthatós, csúsztatós...), és "jellemzők" szótár. Jellemzőknél 7 kifejezés: GPS, kamera, touchscreen stb. Csak a "jellemzők" szótárat kellene figyelnie a kódnak.
Először azt hittem jó, mert vegyesen kiadott a Nokiáknál a leírás végén vegyesen mindenféle telót. De a Samsungoknál csak Samsungokat mutat!
Továbbá az is bibi, hogy néha egy telefont többször is megjelenített egy listában. Ezt hogy kell kivédeni?
Valamint megfigyeltem, hogy azoknál a leírásoknál, ahol egy kifejezést se tettem a node-hoz a jellemzők szótárból, ugyanúgy mutatott 5 javasolt node-ot.

0
0
aboros képe

többet is kérdeztél. :) egy részükre magadtól is rájössz szerintem. ;)

ha adott nodehoz rendelet kifejezéseket szeretnéd megkapni, amik egy konkrét szótárból származnak, akkor használd a taxonomy_node_get_terms_by_vocabulary -t.

"ahol egy kifejezést se tettem a node-hoz a jellemzők szótárból, ugyanúgy mutatott 5 javasolt node-ot." ez azért van, mert úgy állítottad be a nézetet, hogy ha nem kap argumentumot vagy olyat kap, ami nem ad eredményt, akkor mutasson minden értéket.

0
0

-
clear: both;

aboros képe

ha csak egy konkrét szótár termjei kellenek, akkor használd a taxonomy_node_get_terms_by_vocabulary hookot.

ahol egy kifejezés sincs a node -hoz rendelve, ott azért mutat ennek ellenére öt node -ot, mert az argumentumnál azt adtad meg, hogy ha nincs eredmény, akkor 'display all values'. vagy valami ilyesmi.

(most nem egészen világos megint, hogy mit akarsz. ez a 'snippet' azt fogja neked csinálni, hogy a node minden taxonomy termjéből kivesz még öt node -ot és azokat megmutatja. nem figyeli, hogy egy node szeretpelt e már egyszer.)

0
0

-
clear: both;

aboros képe

dupla lett. fene a tabbed browsingba. :)

0
0

-
clear: both;

Anonymous képe

Na ezzel egyből jó lett, köszi!
Azzal a szerencsétlen hiaüzivel (lásd lent) mit kéne tennem hogy eltűnjön?

0
0
Anonymous képe

Ja, igaz, van az oldal tetején egy hibaüzi:

"Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of views_build_view(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. in /home/homepage/public_html/themes/sajatsmink/node-masolat.tpl.php on line 29"

Hogy tüntessem ezt el? Beírtam a views_build_view()-ba egy ilyet:
$allow_call_time_pass_reference = true,
de nem segített.

0
0
aboros képe

arra panaszkodik, hogy 'call-time-pass-by-reference' (ne kérdezd:) módszerrel vagy ilyesmi próbálkozik a views_build_view deklarálása, ez pedig nem engedélyezett. ha akarod, engedélyezheted az ini fileban. gondolom a php.ini -re gondol. nemtom. dobd el a hibaüzenet levélben a szolgáltatódnak.

0
0

-
clear: both;