Sziasztok!
Kicsit másként közelítek az itt vázolt problémához (ez kb. már az 5. verzió). Röviden vázolva, a nézet egy bírálóhoz rendelt dolgozatokat mutatja a be a bírálók számára (egy dolgozatot ketten bírálhatnak). A bírálók egy user reference mezőben vannak meghatározva, így a nézetben egy argumentummal listázom azokat a dolgozatokat, ahol ez a mező az aktuális user.
Annak függvényében, hogy egy dolgozatot a két bíráló melyike bírálta, más-más szöveget kell kiírni, pl. "bírálandó", "én már bíráltam", amit egy custom field-be írt PHP-kóddal teszem meg, az alábbi eseteket kezelve:
- egyikünk se bírálta: vagyis nincs kapcsolódó bírálat-tartalom - rendben meg is jelenik, hogy "bírálandó".
- én már bíráltam, a másik nem:: vagyis a kapcsolódó bírálat-tartalom szerzője az aktuális user - ez is rendben van, kiírja, hogy "már bíráltam".
- a másik bíráló bírálta, én még nem: vagyis a kapcsolódó bírálat-tartalom szerzője nem az aktuális user - ez is rendben van, kiírja, hogy "bírálandó".
- mindketten bíráltuk: Ezzel van a probléma, mivel van kapcsolódó bírálat (kettő is), ezért egyrészt kiírja az én bírálatom kapcsán, hogy "már bíráltam", a másik bíráló kapcsán pedig, hogy "bírálandó".
A kérdésem tehát az lenne, hogy el lehet-e érni a nézet egyik sorából (a $data egyik példányából) valahogy a másikat? Olyan feltétel kellene definiálni vagy a nézet szűrőjében vagy pedig a custom field PHP-jában, hogy "ha az adott dolgozathoz két bírálat tartozik, akkor..."
Mit szólnál a Flag modulhoz?
Próbáltam értelmezni a feladatot és arra jutottam, hogy a Flag modul hasznos segítség lehet. X bíráló megjelöli a dolgozatot, amikor elbírálta és ugyanezt teszi Y bíráló is. (Adott fleget csak adott júzer alkalmazhat - jogosultságok). Sok bírálópáros esetén körülményes, akkor már érdemes egy modult írni.
Flag-re remekül lehet szűrni Views-ban. Amennyiben a dolgozat kap két taxonómia kifejezést a bírálók neveivel, akkor arra is szűrhetsz, hogy adott bírálóra mely dolgozatok várnak még. A Flag és a Rules még több lehetőséget nyújt, például amennyiben X bíráló elkészíti a bírálatot adott dolgozatról Node Reference segítségével automatikusan rákerül adott bíráló "bíráltam" Flag-je a dolgozatra, miután sikerül a Rules-t rábírni erre a szívességre :)
Maga a Flag modul oldala is ajánlja, talán nem baj, ha itt is megjelenik. Kitűnő oktatóanyag a modulról itt http://dev.nodeone.se/node/802
Más irányból közelítem meg a feladatot és valószínűleg nem is ismerek minden körülményt, ezért elnézést, ha feleslegesen fárasztottalak egy esetleg nem megfelelő javaslattal.
köszönöm
Köszönöm az ötletet, ez tényleg gyökeresen új nézőpont. (Ezért is kedvelem a fórumokat :))
Első látásra ígéretesnek tűnik a flag modul, nekifogok átolvasni/meghallgatni. Így elsőre (minden különösebb ismeret nélkül) jó megoldásnak látszik az automatizált megjelölés, felteszem a nézetben kezelhetők az olyan jellemzők, mint az "aktuális user által megjelölt" vagy a "megjelölések száma".
részben sikerült
Részben segített a Flag modul, tehát köszi még egyszer.
Arra jutottam, hogy a dolgozathoz kapcsolódó bírálat készítésekor a dolgozat automatikusan kapott egy-egy flag-et- Így már meg lehet számolni (flag counter), hogy egy dolgozathoz hány bírálat készült, tehát lehet kezelni a nyitó hozzászólásban leírt problémát. A megoldás nem a legszebb, mert ha mindkét bíráló bírál, akkor a nézet továbbra is két sort ad vissza, de a másik bíráló sorához így legalább ki lehet írni, hogy "másik bíráló sora".
Elviekben megoldaná ezt a gondot a következő szűrő: a "tartalomhoz nincs flag VAGY az aktuális felhasználó jelölte flag-gel a tartalmat". Mindkettőhöz készítettem egy-egy kapcsolatot (Flags: review counter ill. Flags: review by current user), majd ezeken keresztül adtam hozzá a szűrőt:
Ehhez viszont még kéne egy olyan feltétel szintén VAGY-gyal kapcsolva, hogy "az aktuális felhasználó nem jelölte ÉS nem az aktuális felhasználó jelölte". Viszont az a baj, hogy úgy látom, utóbbit nem lehet beállítani, mivel a kapcsolatoknál csak két lehetőség van: aktuális felhasználó jelölte vagy bármilyen felhasználó jelölte.