Tartalomszervezési megoldások II. - Views és CCK modul

Anonymous képe

Negyedik megoldás: Views

Tételezzük fel, hogy egyesületünk honlapján a csapatnevek mellet nem 2 hanem 4 további kategóriát szeretnénk bevezetni: Fiúk, Lányok, Hazai játékosok, Vendégjátékosok. Ez a – rendkívülinek nem nevezhető – helyzet azt eredményezi, hogy webhelyünk szerkezete, és ezzel párhuzamosan a menürendszer kényelmetlenné és a kategóriák közötti átfedésektől függően nehezen áttekinthetővé vált:

  • Piros csapat
  • Piros fiúk
  • Piros vendégjátékosok
  • Piros vendégjátékos fiúk
  • Fiúk
  • Hazai játékos fiúk
  • ...stb.

Ha például azt szeretnénk, hogy a hazai játékosoknak és a vendégjátékosoknak a csapatok mintájára külön oldaluk legyen (ne csak egy-egy lista), akkor ezeknek külön könyvet kell nyitnunk; és mivel egy oldalt (könyvlapot) csak egy könyvbe tudunk beilleszteni, a játékosok oldalait kétszer kell felvinnünk a honlapra. Hasonló problémát okoz az a korlátozás, hogy egy node-hoz csak egy útvonal álnevet rendelhetünk, ezért pl. egy Piros csapatban játszó vendégjátékos fiú oldalán vagy a Piros fiúk, vagy a Vendégjátékosok segédmenüpontot fogjuk tudni megjeleníteni (hacsak nem használunk többszörösen összetett útvonal álneveket, amivel éppen az álnév lényegét – egyszerűen megjegyezhető internetcím – veszítjük el). Ezen a ponton már a Drupal alapcsomag korlátait feszegetjük, és éppen ideje kiegészítők után néznünk: ismerkedjünk meg a Views modullal.

A Views a Drupal rendszer által készített listák felülírására, valamint új listák létrehozására használható. A felülírás azt jelenti, hogy egy adott webcímen, pl. a www.valami.hu/taxonomy/term/1 alatt nem a szokásos kategória-listát látjuk, hanem egy általunk megadott szempontok szerint módosított felsorolást. Lássuk, milyen módosításokat tesz lehetővé a Views:

  • Lista megjelenítése nem csak önálló oldalon, hanem blokkban is
  • Hozzáférés korlátozása felhasználói csoportok szerint
  • Oldalaknak, blokkoknak egyéni cím
  • Oldalaknak, blokkoknak egyéni fejléc és lábléc
  • Listázott elemek megjelenítési módjának meghatározása (teljes node, bevezető, táblázat, felsorolás)
  • Listában szereplő node-ok számának meghatározása
  • Listában szereplő mezők meghatározása (pl. cím, beküldési idő, szerző neve, stb.)
  • Lista szűkítése kategóriák, tartalomtípusok, közzétételi beállítások szerint
  • Lista rendezése növekvő vagy csökkenő sorrendbe
  • ... stb.

A fenti felsorolás nem teljes, de talán érzékelteti a modul sokoldalúságát. Számunkra most a legérdekesebb az a lehetőség, hogy a listázó oldalakhoz egyéni fejlécet készíthetünk. Eredeti problémánk az volt, hogy nem tudtuk a kategória listázó oldalak tetejére beszúrni a csapatok elérhetőségét és egyéb információit – ezt a feladatot szépen megoldhatjuk a listázó oldal felülírásával. Készítsük el tehát a kategóriákat és vigyük fel a játékosok oldalait:

  • Piros csapat (taxonomy/term/1)
    • Játékos-1 (node/1)
    • Játékos-2 (node/2)
    • Játékos-3 (node/3)
    • stb.
  • Kék csapat (taxonomy/term/2)
    • Játékos-4 (node/4)
    • Játékos-5 (node/5)
    • stb.

Ezután az admin/build/views/add oldalon készítsük el a nézeteket, amelyekkel felülírjuk a taxonomy/term/x oldalakat:

  • Name (név): piroscsapat
  • Access (hozzáférés): mivel mindenki számára elérhetővé kívánjuk tenni az oldalt, ne jelöljük be egyik csoportot sem
  • Description (leírás): Piros csapat oldala (ezt a szöveget csak az adminisztrátor látja)
  • Page (oldal)
    • Provide page view (oldal készítése): kipipálva
    • URL (webcím): taxonomy/term/1
    • View type (nézet típusa): Teaser List (bevezetők)
    • Title (az oldal látható címe): Piros csapat
    • Use Pager (lapozó használata): kipipálva
    • Breadcrumb trail should not include "Home" (A morzsa ne tartalmazza a 'Nyitólap' linket): hagyjuk üresen
    • Nodes per Page (node-ok száma): 10
    • Header (fejléc): ide illeszthetjük be a Piros csapatra vonatkozó információkat; ha HTML vagy PHP kódot használunk, ne felejtsük el átállítani a beviteli módot
  • Filters (szűrők):
    • Node: Published -> Equals: Yes (csak a közzétett oldalak szerepeljenek a listán)
    • Taxonomy: Terms for Csapatok -> Is One Of: Piros csapat (csak a 'Piros csapat' kategóriába sorolt cikkek szerepeljenek a listán); Option: 10 (ha szeretnénk, hogy a 'Piros csapat' kategória alá besorolt esetleges alkategóriák tartalmát is listázza)
  • Sort Criteria (sorrendezési szabályok):
    • Node: Sticky -> Order: Descending ('kiemelt' cikkek az oldal tetejére, csökkenő időrendi sorrendben)
    • Node: Created Time -> Order: Descending (többi cikk csökkenő időrendi sorrendben)
  • Látogassunk el a www.valami.hu/taxonomy/term/1 oldalra: a korábbi egyszerű listázó oldal helyett most a fejléccel kiegészített, teljes értékű Piros csapat oldalt látjuk. Természetesen használhatunk egyszerűen megjegyezhető webcímeket is; ehhez navigáljunk az 'Útvonal álnevek' menüpont alá, és adjuk meg, hogy a taxonomy/term/1 mellett legyen oldalunk a piros címen is elérhető. A 'Menük' oldalon állítsunk be egy piros címre mutató menüpontot is – ezzel el is készültünk a Piros csapat oldalával. Ismételjük meg a nézet készítés, útvonal álnév megadás, menüpont készítés lépéseket valamennyi kategóriánkra. Ha ezek után felkeressük bármelyik játékos oldalát, ott találjuk a kategória linkeket (Piros csapat, Fiúk, Vendégjátékosok); és ha bármelyik linkre rákattintunk, a Views által készített, fejlécekkel/láblécekkel feljavított nézet-oldalakra lépünk. Ezeket az oldalakat igen jól lehet sminkelni, tehát egyéni megjelenést is tudunk nekik adni; emellett a fejléc/lábléc szövegbe egyszerűen beilleszthetünk kombinált taxonómia-linkeket (pl. a Fiúk oldalon a hazai és vendégjátékos fiúk listájára mutató linkek), ill. Insert View modullal bármilyen más nézetet – így kordában tudjuk tartani a csak bizonyos oldalakon megjelenítendő másodlagos menük burjánzását. Webhelyünk ezzel áttekinthető szerkezetet és következetes navigációs struktúrát kapott.

    Megjegyzés: A Views nézetkészítő űrlapján lehetőség van URL-ként útvonal álnevek megadására, valamint menüpont készítésre is. Ezeket a szolgáltatásokat akkor célszerű használni, ha teljesen új, a rendszerben nem szereplő listát készítünk (pl. ha a "Piros csapat" kategóriában szereplő "kép" típusú tartalmakat szeretnénk kigyűjteni egy külön képgaléria számára). Ha egy meglévő listát szeretnénk felülírni, akkor először készítsük el a nézetet a rendszer által meghatározott URL (pl. taxonomy/term/x) megadásával, majd külön lépésben definiáljuk az útvonal álnevet és a menüpontot. Ezzel elkerülhető, hogy webhelyünkön egymás mellett éljen a hagyományos oldal és annak felülírt verziója, ami esetleg megzavarhatja a barangoló látogatókat.

    Ötödik megoldás: CCK + Views

    A Views modullal már egészen összetett webhelyeket is építhetünk anélkül, hogy egyetlen sor PHP-kódot kellene írnunk; mégis elképzelhető néhány olyan eset, amikor még ez a megoldás sem elégíti ki az igényeinket. A Views kezelőfelülete meglehetősen bonyolult, márpedig minden egyes alkalommal, amikor új nézetet készítünk (pl. új kategóriával bővül a webhely), vagy meglévőt módosítunk (megváltozott a csapat telefonszáma), akkor kénytelenek vagyunk ezen a barátságtalan űrlapon dolgozni. Húsz-harminc nézetnél többet ilyen módon kezelni még akkor is kényelmetlen, ha a webhely karbantartását hozzáértő webmester végzi – laikusoktól pedig egyáltalán nem várható el, hogy kiigazodjanak a Views bokros opciói között.

    Szintén tovább kell lépnünk akkor, ha szeretnénk kétszintes honlapunkat (játékosok, csapatok) három- vagy többszintessé bővíteni. Képzeljük el azt az esetet, amikor több tucat csapatunk van, és szeretnénk a csapatok részvételével versenyeket szervezni. Létrehozhatunk egy Versenyek kategóriát, de ehhez nem tudjuk hozzárendelni a csapatokat, mert azok nem node-ok, hanem kategóriák, ill. a kategóriák módosításával létrehozott nézetek. Ennek a problémának a megoldására született a Category kiegészítő modul – az ezzel a modullal létrehozott kategóriák tehát egyúttal node-ok is, amelyek tetszőleges információkat (elérhetőségek, verseny helyszíne, időpontja, stb.) tartalmazhatnak, és amelyeket a szokásos módon kategorizálhatunk és listázhatunk. A Category felülete azonban legalább olyan bonyolult, mint a Views modulé, és csupán egyetlen szolgáltatást kínál. Cikkünk megírásának időpontjában általában jobb megoldás a Content Construction Kit (rövidítve CCK) modul használata.

    A Drupal alapcsomaggal létrehozott tartalomtípusok csak két mezőt tartalmaznak: a címet és a törzset. A CCK modul legfontosabb szolgáltatása, hogy lehetővé teszi a tartalomtípusok bővítését további mezőkkel. Ha jól strukturálható adatokkal dolgozunk, akkor a CCK segítségével a tartalmak beküldését és megjelenítését nagymértékben szabályozni tudjuk. Példánknál maradva hozzunk létre 3 tartalomtípust a szükséges mezőkkel:

    • Játékos
      • Name: Játékos
      • Type: jatekos
      • Title field label: A játékos neve
      • Body field label: A játékos életrajza
      • Text field: A játékos telefonszáma
      • Node reference: Csapat
    • Csapat
      • Name: Csapat
      • Type: csapat
      • Title field label: A csapat neve
      • Body field label: A csapat története
      • Text field: Az edző neve
      • Text field: Az edző telefonszáma
      • Node reference: Játékos
    • Verseny
      • Name: Verseny
      • Type: verseny
      • Title field label: A verseny neve
      • Body field label: A verseny leírása
      • Text field: Helyszín
      • Date field: Időpont
      • Node reference: Csapat

    A tartalomtípusok létrehozása után a "Tartalom beküldése" menüpont alatt megjelenik a 3 típus – az ezekhez tartozó beküldő űrlap kitöltése pedig a laikus felhasználó számára sem okoz gondot. Tartalomszervezés szempontjából figyelemre méltó a "Node reference" mező, amely megoldást jelent kategorizálási problémáinkra: ennek segítségével a versenyzőket a csapatokhoz, a csapatokat pedig a versenyekhez tudjuk rendelni. A gyakorlatban ez azt jelenti, hogy például egy új játékos létrehozása két lépésből áll: először is létre kell hoznunk a "játékos" típusú tartalmat, amelynek során kiválasztjuk a node reference listából, hogy az új ember melyik csapatban játszik; majd az adott csapat node reference listájára fel kell vennünk az új játékost. A munkafolyamatot tovább egyszerűsíthetjük, ha a csapatok tagjait nem node reference útján határozzuk meg, hanem Views modullal készítünk egy csapattagokat listázó nézetet, majd ezt beágyazzuk a Csapat tartalomtípusba.

    • URL: csapat
    • Filters:
      • Node Published -> Equals: Yes
      • Node: Type -> Is One Of: Játékos
    • Arguments:
      • Argument type -> Node reference: Játékos (field_csapat)
      • Default -> Summary, unsorted

    Ezzel lényegében megmondtuk a Views-nak, hogy készítsen listát azokból a játékos node-okból, amelyek rendelkeznek field_csapat nevű CCK-s mezővel. Ha a nézet nem kap argumentumot az URL végén (pl. a www.honlapneve.hu/csapat címen), akkor készít egy összesített listát, zárójelben a csapat játékosainak számával:

    • Piros csapat (20)
    • Kék csapat (18)

    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.

    A CCK és a Views a legdinamikusabban fejlesztett kiegészítő modulok közé tartoznak, egyes funkcióik hamarosan az alapcsomagban is megjelennek. Számíthatunk rá, hogy a jövőben a hasonló rendszerező oldalak készítése tovább fog egyszerűsödni. Elég jó angol nyelvű dokumentáció található róluk a Drupal.org kézikönyvében:

    További újdonságot jelenthet a Book modul tervezett átalakítása, amely kimondottan a hierarchikus honlapok készítését fogja megkönnyíteni.

    Remélhetőleg a fenti példákból is nyilvánvalóvá vált, hogy szinte bármilyen tartalomszervezési problémával kerülünk szembe, találni fogunk a Drupal kínálatában olyan megoldást, amellyel PHP kód írása nélkül, esetleg pár soros kódrészlet beillesztésével a feladat megoldható. Azonban a Drupal csak a kódolás terhét tudja levenni a vállunkról – gondolkodni nem tud helyettünk. A számunkra optimális megoldást csak akkor tudjuk kiválasztani, ha a webhely építését megelőzően elemezzük, modellezzük a feladatot, és még a tartalmak tömeges felvitele előtt alaposan tesztelünk.

    CsatolmányMéret
    Kép ikon cck_viewfield.png13.35 KB

    Hozzászólások

    Tóth-Máté Ákos képe

    köszönöm. hasznos volt a cikk.

    garrotter képe

    Én is köszönöm, nagyon jó kis összefoglaló.

    G.

    thamas képe

    De jó, hogy ezt megírtad! A tartalomszervezés - szerintem - méltatlanul elhanyagolt, bonyolult probléma. Köszönet, hogy foglalkozol vele és megosztod velünk! (Még csak a címeket futottam át, de alig várom, hogy legyen időm olvasni.)

    Eddigi sok-sok segítő hozzászólásod, érdekes bejegyzésed és a mostani írás alapján (is) ezúton felterjesztelek a Drupal.hu szerkesztői által adható legmagasabb elismerésre! :o)

    Üdvözlettel:
    Hajas Tamás

    Üdvözlettel:
    Hajas Tamás

    Illyés Edit képe

    Köszönöm a biztatást, tervezem további CCK+Views témájú cikkek írását :)

    thamas képe

    Azonban a Drupal csak a kódolás terhét tudja levenni a vállunkról ? gondolkodni nem tud helyettünk. A számunkra optimális megoldást csak akkor tudjuk kiválasztani, ha a webhely építését megelőzően elemezzük, modellezzük a feladatot, és még a tartalmak tömeges felvitele előtt alaposan tesztelünk.

    Van valakinek ötlete, hogy hol lehet még a webhelyek tartalomszervezési kérdéseiről infókat, tippeket találni?
    (Nem feltétlen csak Drupla vonatkozásban.)

    Üdvözlettel:
    Hajas Tamás

    Üdvözlettel:
    Hajas Tamás

    thamas képe

    Még nem próbáltam ezért nem tudom: jól gondolom, hogy a CCK + node reference a korábban Breadcrumb Views modullal címmel felvetett problémára is megoldás lehet?

    Üdvözlettel:
    Hajas Tamás

    Üdvözlettel:
    Hajas Tamás

    Illyés Edit képe

    Mostanában nem volt dolgom olyan összetett webhellyel, ahol ez felmerült volna, és a probléma végiggondolása valószínűleg legalább egy napot venne igénybe (legalábbis nekem :)), de első körben megnézném a CCK + Taxonomy Fields kombinációt.

    A Taxonomy Fields azt csinálja, hogy kategóriától függően bővíti a node-ot különböző mezőkkel, pl. van egy Könyv kategória, abban egy Hangoskönyv alkategória, akkor meg lehet adni, hogy az árucikk típusú node-ok Könyv kategória esetében tartalmazzanak egy "ISBN" mezőt, Hangoskönyv esetében egy "hanghordozó típusa" mezőt (CD, mp3), stb. És van egy olyan lehetőség is, hogy a modul a kategória szülő kategóriáinak mezőit is automatikusan létrehozza (ancestor fields), tehát a Hangoskönyv kategóriába sorolt árucikkeknek legyen "hanghordozó típusa" mezője is és "ISBN" mezője is.

    Namármost ez a mező elvileg tartalmazhat fix értékeket is (universal values), tehát szerintem meg lehet adni, hogy a mező mindig az adott kategória URL-jére mutató linket tartalmazza. Így tehát egy Hangoskönyv kategóriába sorolt árucikk node egyik mezője tartalmazni fogja a /termek/konyv/hangoskonyv linket, egy másik mezője pedig ancestor fields révén a termek/konyv linket. Ezeket aztán sminkben könnyen össze lehet fűzni Termékek » Könyvek » Hangoskönyvek morzsává. (Elvileg egy egyszerű CCK szövegmező is tartalmazhatja a morzsát, de abból indultunk ki, hogy egy nagyméretű – Amazon.com – termékkatalógus esetén hogyan lehet automatizálni a morzsák megjelenítését.)

    Előző kérdésedre válaszolva, szerintem nem nagyon fogsz találni kimondottan tartalomszervezési megoldásokat ismertető könyveket, mert ez nagyon függ attól, hogy milyen rendszerrel dolgozol. Például a Drupal node koncepciója másféle gondolkodást kíván, mint egy klasszikus OOP megközelítés – sőt egy CCK node reference alapú, szinte végtelenül rugalmas megoldás is alapvetően más logikára épül, mintha egy külön modult fejlesztesz a feladatra, amibe mereven belekódolod, hogy mivel mit csináljon a modul. Itt van egy jókora átfedés a programtervezési minták és a vállalati rendszerszervezés között, szerintem ez utóbbi a közgazdaságtan egyetlen olyan ágazata, amihez némi ész is kell...;)

    Patuzzi képe

    Nagyon jó az írás, gratulálok.
    De a végén elvesztettem a fonalat:

    "Egészítsük ki a Csapat CCK-s tartalomtípusunkat egy Viewfield mezővel.
    Argumentumként adjuk át az aktuális node azonosítóját: %nid. "

    Nekem csak View Reference csoportból egy Select list volt a sor végén a Viewfield helyett, annak pedig nem tudok argumentumot adni.

    Hol rontottam el?

    Illyés Edit képe

    Csatoltam a cikkhez egy képet arról, hogy hogyan kellene kinéznie a Csapat tartalomtípushoz tartozó Játékos node reference mezőnek.

    • Widget: legyen legördülő lista (Select List).
    • Mi kerüljön a legördülő listára?
      • "Hagyományos" módszer: Multiple values, Játékos content type. A Csapat node-ok beküldő oldalán a cím alatti legördülő listában találjuk felsorolva a játékosokat, ezeket egyenként kijelölve a csapathoz rendeljük.
      • Viewfield módszer: beágyazzuk a cikkben leírt módon létrehozott "csapat" nézetet, és átadjuk a csapat node %nid azonosítóját.

    Más kérdés, hogy a szükséges "csapat" nézetet a Views modul legújabb verziójával most éppen nem tudom létrehozni, mert rosszul értelmezi a CCK mezőket – nem tudok az argumentumoknál olyat megadni, hogy Játékos (field_csapat), azaz gyűjtsd ki a csapat CCK-s mezővel rendelkező Játékos node-okat. A CCK projekt oldalán figyelmeztetnek is, hogy vannak kompatibilitási problémák és az 1.6-os Views bugos.

    irota képe

    Csatlakozom az előttem szólóhoz, a viewfield modul telepítése után egy view reference mezővel lesz több a hozzáadható mezők között, viszont e modul (viewfield) telepítése nélkül is rendelkezésre állnak azok a beállítási lehetőségek, amelyek a csatolt képen vannak. Amennyire be tudtam azonosítani egy node reference mezőt kell hozzáadni és anak az alján tudnánk egy előre létrehozott view-t beágyazni ... ha menne, mert sajna nekem nem jelenik meg semmi a csapat oldalakon. A részeredményeim jók, de itt a végén elakadtam. Van valakinek ötlete miért nem sikerülhet?

    Illyés Edit képe

    Nem biztos, hogy jól értem a kérdést, de szerintem nem jó helyen nézed. Nem a csapat oldalakon fog megjelenni a Viewfield beállítások mezője, hanem a Játékos típusú node reference beállításnál, amit a Csapat tartalomtípushoz adsz. Nézd meg a kép tetején a morzsát: Home > Administer > Content management > Content types > Csapat

    Most eléggé be vagyok havazva, de tervezek egy Views-CCK videót, mert így elég nehéz...

    irota képe

    Igen én is ott nézem, a csapat tartalom tipushoz hozzáadott node reference beállító űrlap alján van két beállítás: view és view arguments, ezek viszont a Viewfield modul telepítése nélkül is ott vannak. Ráadásul a view feliratú választólista alatti magyarázó szöveg a következő:

    Choose the "Views module" view that selects the nodes that can be referenced.

    És nálam ez is történik, vagyis miután itt beállítom az előzőleg létrehozott view-t utána egy csapat tipusú node szerkesztési nézetében egy választó listában megjelennek a megadott view által összegyűjtött játékos tipusú node-ok, de azokat még kézzel nekem kell beállítgatnom (hozzárendelnem).
    Függetlenül attól hogy adok-e meg argumentumot vagy nem a csapat tartalom tipushoz hozzáadott node reference beállító űrlap alján, az összes játékos tipusú node-ot összeszedi a listába így rossz párosításokat is képes vagyok eszközölni.
    Továbbá ahhoz, hogy egyeltalán megjelenjenek a választó listában a játékos tipusú node-ok egy csapat tipusú node szerkesztési oldalán a használt view létrehozásánál az argumentumként megadott CCK field esetére a cikktől eltérően nem adhattam meg alapértelmezettként az összegző nézetet (Summary, unsorted), hanem csak a mindent mutat (display all values) beállítást, mert különben a csapat tipusú node szerkesztési oldalán a játékosok kiválasztására szolgáló választó listában csak egy üres elem lesz.

    De ha már a cikkben a Viewfield modulról volt szó hát megnéztem a telepítése után létrejött view reference tipusú CCK mezővel mit lehet kezdeni. Hát kéremszépen az meg pontosan azt csinálja amiről a cikkben szó van.
    Valóban, ahogy Patuzzi kolléga is írta annak nem úgy nézki a beállító oldala, mint a cikkhez csatolt képen látható, hanem a Label mező alatt található Default value csoport lenyitásával tárul elénk a használandó view és a számára megadandó argumentum beállításának a lehetősége.
    Egyetlen szépséghibája a dolognak a fent említett alapértelmezett beállítások megadása ellenére azt látom, hogy a csapat tipusú node szerkesztési oldalán az alapértelmezettként beállítot view ki van jelölve, de a megadott argumentumot %nid nem jegyzi meg, azt nekem, vagy adott esetben a felhasználónak kell(ene) beírni, ami problémás. Megoldható, hogy ez ki legyen töltve automatikusan?

    Szóval zavarban vagyok, mert annak ellenére, hogy csak most ismerkedem a Drupallal, mégis azt kell kérdeznem (csak félve írom le), a cikk Viewfield modul használatára vonatkozó részével minden rendben van?
    Ha én néztem el, vagy értettem félre valamit, akkor bocsánatot kérek.

    Illyés Edit képe

    A cikket a Views 1.5-ös verziójával készítettem, és amint azt egy korábbi hozzászólásban is jeleztem, számomra rejtélyes okból a Views 1.6-os node reference szempontból nem ugyanúgy viselkedik, mint az 1.5-ös – ennek azért nem néztem alaposabban utána, mert a CCK projekt oldalán jelzik is, hogy a Views API megváltozott, kompatibilitási problémák vannak, és a Views 1.6 még mindig beta állapotban van.

    Jövő héten megpróbálok időt szakítani és utána nézek a dolognak, plusz készítek videót is. Ha nagyon sürgős, akkor felejtsd el a cikket és próbáld magad összerakni a rendelkezésedre álló eszközökkel:

    1. Játékos és Csapat tartalomtípus létrehozása, amelyek kölcsönösen hivatkoznak egymásra (Játékos tartalomnál Csapat node reference, Csapat tartalomnál Játékos node reference). Szerk.: a Viewfield-es megoldásnál természetesen nem kell Csapat tartalomnál Játékos node reference, helyette fogjuk beágyazni a 2. pontban elkészített nézetet.

    2. Egy nézet készítése, amely kilistázza azokat a Játékos tartalmakat, amelyek rendelkeznek Csapat node reference hivatkozással (azaz a Játékos valamelyik Csapat tagja). Játékos típusú tartalmakra szűrsz a Filters résznél, az argumentumoknál pedig a Csapat node reference típusra beállítasz egy Summary nézetet (a Summary lehet, hogy nincs benne a Views alapcsomagban, akkor nézd meg a Views Bonus Pack csomagot).

    Mint korábban is írtam, Views 1.6 esetén ez a rész szerintem hibásan működik, nem a Csapatra node reference útján hivatkozó Játékos tartalmakra hivatkozik, hanem a Játékosokra node reference útján hivatkozó Játékosokra, aminek semmi értelme, tekintettel arra, hogy ilyen node reference mezőt egyáltalán nem is definiáltunk!

    3. Visszamész a Csapat tartalomtípus (nem a Csapat node reference mező!) beállítási oldalára, Viewfield-del hozzáadod az előzőleg létrehozott nézetet a tartalomtípushoz, és paraméterként átadod a nézetnek a nid azonosítót, ahogy a mellékelt képen látható.

    4. Ellátogatsz bármelyik Csapat oldalra, ott lesznek kilistázva az adott Csapat Játékosai. Az URL végén található nid azonosító alapján a Views látja, hogy éppen melyik Csapatról van szó, és lekéri az adatbázisból azokat a Játékos tartalmakat, amelyekhez node reference útján az aktuális Csapat van hozzárendelve.

    Legalábbis elvben így kellene működnie, de mint jeleztem, fura dolgokat láttam a Views 1.6 installálása után, csak még nem volt időm kutakodni utána.

    irota képe

    Én is az 1.5 -ös verziót használom az általad említett okból.
    Summary van alapból.

    Úgy érzem az elvet tökéletesen megértettem, sikerült is létrehoznom, elérnem a cikkben leírt végeredményt.
    Természetesen semmi bajom a cikkel, örülök és köszönöm, hogy megírtad. Bár voltak pillanatok, amikor bosszankodtam, mivel a kezdők tudatlanságával nekiálva, a haladóknak magától értetődő részletek előttem még nem voltak világosak, így jó pár tévutat is bejártam. Utólag azonban azt mondom, hogy így sokkal jobban jártam, mert egy hét kisérletezés, a cikk jópárszor való elolvasása, valamint számtalan variáció kipróbálása után már egész jól értem ki kivel van, mi mivel függ össze és mit befolyásol.
    Ezért bátorkodtam előző hozzászólásomban felvetni azt amit felvetettem.

    3. Visszamész a Csapat tartalomtípus (nem a Csapat node reference mező!) beállítási oldalára, Viewfield-del hozzáadod az előzőleg létrehozott nézetet a tartalomtípushoz, és paraméterként átadod a nézetnek a nid azonosítót, ahogy a mellékelt képen látható.

    Na ezzel van egyedül bajom. A képen egy node reference mező beállítási oldal látható ezt egyértelműsíti a Widget settings csoport felirata is (a képről idézve):
    These settings apply only to the Játékos field as it appears in the csapat content type.
    És az elvet is érteném: hozzáadok egy node reference mezőt a csapat tartalom tipushoz, aminek nem adok meg content type tulajdonságot, hanem, majd az egy általam elkészített view által generál listát fog megjeleníteni, s mivel argumentumként megadom a node azonosítóját is így mindig csak az aktuális csapat oldalra hivatkozó játékosok oldalai kerülnek ki a csapat oldalára.

    Csakhogy a képen látható beállítások alkalmazása (a képen látható helyen) nem (közvetlenül) a csapatok oldalainak végeredményére lesz hatással, hanem a csapatok oldalainak szerkesztési nézetére.
    Vagyis: míg a játékos tipusú tartalomhoz adott node reference mezőnél megadtuk a content type beállításnál, hogy csapat tipusú node-ok közül választhassunk, addig itt nem a tartalom tipust kötjük ki, hanem egy view-t adunk meg, amely által generált listából aztán választhatunk, de azt nekünk (vagy az oldal szerkesztőjének) kell kézzel megtenni (csakúgy, mint a játékosok oldalain, mikor kijelöljük, hogy melyik csapatban játszanak).
    Szerintem a képen is látható beállítás körüli magyarázó szöveg ezt egyértelműsíti is.

    Mivel következetesen a Viewfield modult említed azért írom le megint, hogy a képen látható beállítások rendelkezésre állnak e modul telepítése nélkül is, ebből én arra következtetek, hogy ezek nem azzal a modullal állnak kapcsolatban.
    Viszont a Viewfield telepítése után létrejövő View reference CCK mezőt a csapat tartalomtipushoz hozzáadva és ott az alapértelmezett beállításoknál kiválasztva a korábban létrehozott view-t már azt a végeredményt kapjuk, (szerkesztői interakció nélkül is) amit említesz.
    Illetve majdnem, mert az alapértelmezésben megadott argumentumot (%nid) sajnos nem jegyzi meg, elvileg azt az oldal létrehozójának - szerkesztőjének kellene megadni.
    Ezt a problémát kellene áthidalni

    irota képe

    Azt írtam, nem jegyzi meg. Javítanom (pontosítanom) kell magam: Ha új tartalmat hozok létre megjegyzi, így aztán egy csapat tipusú tartalom létrehozójának tényleg nem kell bajlódnia view-k és argumentumok beírásával.

    Csak akkor nem adódik át automatikusan a megadott argumentum, ha a szerkesztett csapat tipus node már korábban létre lett hozva mint ahogy a view reference mezőt hozzáadtam, ilyenkor az alapértelmezésként megadott view ki van jelölve szerkesztésre megnyitáskor, de az argumentum hiányzik.

    aboros képe

    kár. :)
    nagyon jó összefoglaló, gratulálok! alig várom a következő 'számot' ;)

    -
    clear: both;

    Paal képe

    Szia,

    Két kérdésem lenne.

    - Hogyan tudom sorszámoztatni a táblázat nézetet?

    1. adat-1
    2. adat-2
    3. adat-3
    stb.

    - A views-calc-ot használva, hogyan lehet megadni, hogy melyik mező értékeit összesítse? Nekem valamiért mindig a dátumot akarja... :)

    Köszi, Pali

    --
    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

    Na, erre legalább rájöttem :)

    Adminisztráció/Webhely beállítása/Views calc oldalon (admin/settings/views_calc) az elérhető lekérdezések közül, ki kell választani (Select views to calculation-enable), hogy mely lekérdezésben szeretnénk használni a Views_count-ot. Utána a Configure Fields fülön (admin/settings/views_calc/view) be lehet állítani, hogy az adott lekérdezésben, mit és hogyan szeretnék összesíttetni:

    • Fields for row calculation (Add a calculation at the end of each row, using these fields.)
    • Calculations to perform on rows
    • Columns for column calculation (Add a calculation at the foot of each these columns.)
    • Calculations to perform on columns:
      • Sum
      • Count
      • Avarage
      • avarage (all)

      Note: average (all) will divide the total by the number of all items, average will divide the total by the number of items that have a non-zero value.

    Azt nem értettem, hogy ha mindent a Views-nál lehet beállítani, ezért miért kell elmászni, máshova (az adminisztrációban).

    Üdv, Pali

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

    thamas képe

    Most jutottam el odáig, hogy végigpróbálgassam a leírtakat. Nálam a csapattagok listázására létrehozott view-nál áll meg a dolog. A kész oldalon az összes csapattag száma látszik csak. Nincs csapatok neve és ennek megfelelő bontás. Ha az URL-be argumentumot adok meg, üres oldal az eredmény.

    Verziók: CCK 1.5, Views 1.6, Drupal 5.1 - ennek elméletileg jónak kellene lennie.

    Mit lehet ilyenkor tenni?

    (Próbáltam frissíteni CCK 1.6-ra - három hibaüzenet a végeredmény, más változás nincs.)

    Üdvözlettel:
    Hajas Tamás

    Üdvözlettel:
    Hajas Tamás

    Illyés Edit képe

    Készítettem 40 percnyi videót a témához. Amíg végleges helyet találunk neki, addig ideiglenesen innen letölthető.

    1. Méret: 120 MB!
    2. A ZIP csomagban 3 HTML fájl található, ezekbe vannak beágyazva az .swf fájlok.
    3. Utólag derült ki, hogy a kurzorkövető pásztázás vízszintesen nem működik. Ha azt látjátok, hogy az admin/content/types oldalon elindul a kurzor jobbra, majd eltűnik a képernyőről, akkor ott éppen valamelyik tartalomtípus beállítási oldalára vezető linkre kattintok (pl. admin/content/types/csapat).
    4. A való életben nem sipítozom ennyire, ez csak a tömörítés miatt van :)
    5. Mivel fizetek az adatforgalomért, ezért fenntartom a jogot, hogy roham esetén korlátozzam a letöltést.

    Enjoy. :)

    thamas képe

    (Átmeneti) megoldási lehetőségek(?)

    http://mediafire.com

    http://blip.tv

    Üdvözlettel:
    Hajas Tamás

    Üdvözlettel:
    Hajas Tamás

    crt képe

    Esetleg ha van rá igény, tudunk biztosítani helyet a (drupal-os) fájlküldőnkön.

    Üdv: Zoli

    Paal képe

    Üdv,

    A második film azon részétől, ahol beállítod a DEFAULT VALUE-t (ez olyan 10 perc környékén van), nekem csak egy piros kép jelenik meg. Hang jó. Másodjára nézem, szóval valszeg nem nálam van gond.

    Üdv, Pali

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

    thamas képe

    Nálam is piros a második film vége. De nem vészes, gyakorlatilag már nem nagyon történik semmi, hangból követhető.

    Üdvözlettel:
    Hajas Tamás

    Üdvözlettel:
    Hajas Tamás

    moroder képe

    Szeretném én is megköszönni Neked ezt a hasznos videót:
    Köszönöm és nagyon sokat tanultam belőle!

    moroder

    Ash képe

    Csak meg szeretném köszönni a leírásokat, meg a videókat. Nagyon tetszenek. És bármennyit el tudnék viselni a videókból. Lehetne egy külön menüpontot csinálni a Drupal.hu -n ahol videókat lehet felrakni. Hogy a tárhely ne legyen gond, elég lenne egy torrent fájlt felrakni, és mindenki letölthetné egy torrent cliens-el. Kevesen tudják hogy a torrent nem csak warezra jó. Pl. a Konferencia videókat is fel lehetne rakni.
    Ez csak egy tipp...

    De a videók tényleg nagyon jók és a cikk is.

    KÖSZÖNJÜK.

    dd0 képe

    Kedves Edit,
    a videó (ill. maga a domain) jelenleg nem elérhető a megadott címen. van esetleg más elérhetősége az anyagnak?

    Illyés Edit képe

    Költöztettem a szerverem, és sikerült úgy elpakolni biztonságos helyre, hogy nem találom. Amíg előkerül, addig ajánlom magam helyett a http://tanarurkerem.hu videóit.

    thamas képe

    Alkalomadtán megkeresem és felteszem valahová - ha el nem felejtem.

    (Úgyhogy jobb, ha írsz nekem egy emlékeztetőt a kontakt lapomon keresztül!)

    Üdvözlettel:
    Hajas Tamás

    KSand képe

    Szia,

    Ezer köszönet az ismertetőért!!!Istennő vagy!!!

    Megtalálható valahol-valakinél ez a videó?

    üdv,
    S

    thamas képe

    Újra csináltam még egyszer a példát, és most már csapat szerinti bontásban jelentek meg a játékosok és beágyazni is sikerült a nézetet a csapat tartalomtípusba. (Sajnos nem derült ki, hogy elsőre mi okozta a hibát).

    Van egy teóriám (nem tudom, hogy lehetséges-e, nem értek úgy hozzá): USB-re telepített XAMPP-on fut a Drupal, amin próbáltam és lehet, hogy a lassú (1.1) kapcsolat miatt nem minden változás mentődött korrektül az adatbázisba...

    A videók igazán hasznosak, köszönet értük!

    Üdvözlettel:
    Hajas Tamás

    Üdvözlettel:
    Hajas Tamás

    tibi képe

    Sziasztok!

    Olyan kérdésem lenne, hogy szerintetek milyen módon valosítható meg cck+views modulokkal (milyen kiegészítő cck modulok kellene?) az, hogy vannak olyan tartalomtípusaim, hogy meccs, csapat. Csapat tartalomhoz csapatot lehet felvenni, csapat nevét és rövid leírását. Meccs tartalomnak pedig az éppen aktuális heti meccs eredményét. Itt lehetőség van a csapat 1 és csapat kettő kiválasztására node_reference segítségével. Meg lehet, kell adni melyik forduló, ez egy sima select alapértékekkel. Meg kell adni ki vezette a mérkőzést. Na és persze az eredményt. Ezt egy sima text inputtal oldottam meg, és ebből következik a problémám.
    Nagyon jól működik addig, hogy views-el csinálok egy eredmények listát ahol szépen fordulók szerint kijön táblázatosan a tartalom. Viszont szeretném ugyan ezt megcsinálni tabellával is. Itt pedig jó lenne tudni, hogy a bevitt eredmény alapján melyik csapaté a három pont. Ez lenne gyakorlatilag a kérdésem, hogy hogyan lehetne egy olyan megoldani, hogy:

    csapat 1 vs. csapat 2
    2:0

    helyett

    csapat 1 vs. csapat 2
    csapat_1_gol:csapat_2_gol

    Hogy tudjon számolni a rendszer a csapatok eredményei alapján. Remélem sikerült érthetően fogalmaznom. Lényeg, hogy az eredményekhez legyen csapat_id vagy valahogy lehessen azonosítani, hogy egy csapatnak hány győzelme van, mennyi gólt rúgott. Megoldható ez újabb tartalomtípus felvétele nélkül? Mert az viccesen nézne ki, hogy gól tartalom felvétele:) és akkor lene ott 1 2 3 4 5 6 7... tartalom. Ezt nem szeretném.

    Itt működik az eredménylistázás: www.csakvarsport.hu

    Válaszokat előre is köszönöm!

    Üdvözlettel,
    Tibi

    thamas képe

    Már nem friss téma, de hasonló (csak némiképp bonyolultabb) problémába ütközött Paal, egy webhely építésekor. Érdemes elolvasni ezt is:

    http://drupal.hu/node/1499

    Üdvözlettel:
    Hajas Tamás

    Üdvözlettel:
    Hajas Tamás

    BlueMonkey képe

    Kezdem megkedvelni ezt a Drupal dolgot...

    aua képe

    Köszönöm a cikket, nagyon tetszett, leginkább ennek hatására kezdtem el kísérletezni a CCK-Views párossal.
    De van egy kérdésem: Az utolsó részben (Ötödik megoldás: CCK + Views) írod:

    A gyakorlatban ez azt jelenti, hogy például egy új játékos létrehozása két lépésből áll: először is létre kell hoznunk a "játékos" típusú tartalmat, amelynek során kiválasztjuk a node reference listából, hogy az új ember melyik csapatban játszik; majd az adott csapat node reference listájára fel kell vennünk az új játékost.

    Ezt nem lehetne egyszerűbben, csak egy node reference kiválasztásával (hogy az adott játékos melyik csapat tagja) megoldani?
    Próbáltam, de nem sikerült olyan Views-t összehoznom, amelyik így is listázná a csapat tagjait...

    Nagy Gusztáv képe

    Ebben a megközelítésben a kapcsolatot mindkét irányban definiálni kell. Azért ez nem teljesen felel meg az RDBM filozófiájának.

    Nagy Gusztáv

    aua képe

    Köszönöm a válaszod.
    Máshogy, vagy más Drupal modullal ki lehet listázni a CCK node-ok közötti node reference-el létrehozott egy-több relációt?
    Vagy marad a modul fejlesztés?

    Illyés Edit képe

    Hová tegyem a választ, hogy meglásd? (Itt egy sorral lejjebb a 20214-es hozzászólás...)

    aua képe

    Csak akkor (22:40-22:46) éppen a Gusztáv üzenetére válaszoltam. :)
    Köszönöm a válaszodat, már próbálom is!

    Illyés Edit képe

    Az idézet így folytatódik:

    A munkafolyamatot tovább egyszerűsíthetjük, ha a csapatok tagjait nem node reference útján határozzuk meg, hanem Views modullal készítünk egy csapattagokat listázó nézetet, majd ezt beágyazzuk a Csapat tartalomtípusba.

    aua képe

    Köszönöm mindenki segítségét, a CCK és a Views modul csodákra képes. :)

    Holo képe

    Sziasztok Guruk! :)

    Nekem van egy olyan problémám a Views modullal, hogy a különböző paraméterek alapján szűrő lista első sora így kezdődik: Ez így elég ronda, viszont hiába fordítom le a .po-t magyarra, (a modules\views\translations\general.hu.po -t) nem változik át az Any "Bármely"-re.
    Szerintetek honnan veszi ezt a szót, hogy át bírjam írni?
    Köszi a segítséget!

    nevergone képe

    A kérdésed nem kapcsolódik az eredeti témához, na meg ez elég régi téma, kérlek indíts új témát a kérdésednek!

    Amúgy érdemes a keresőt is használni. :)

    Holo képe

    Lárifári, semmi baj. :))
    Köszi a segítséget!

    Agyánszki Tamás képe

    Köszönöm szépen, a remek pedagógusi vénaval megirt cikket, nagyon sokat segített nekem.

    T.