Újság elektronikus kiadása CCK alapokon

Illyés Edith képe

Ma már szinte minden nyomtatott sajtótermék elérhető interneten is. Ezeknek az internetes verzióknak a fejlesztése során két felfogás valamelyike szokott érvényesülni: az egyik szerint egy külön online verziót készítenek, amibe feltöltik a nyomtatott példány fontosabb cikkeit; a másik szerint az internetes és a papíralapú verzió lehetőség szerint legyen egymás tükörképe.

Az előbbi megközelítés jobban illeszkedik a webes tartalomkezelési megoldásokhoz, ezért gyorsabban, olcsóbban fejleszthető és karbantartható – a második felfogás előnye, hogy a látogatók – és ami legalább ilyen fontos: a hirdetők – egységes arculatú és színvonalú kiadvánnyal találkoznak a neten és az újságárusnál. Ez utóbbi megközelítés viszont azzal a következménnyel jár, hogy a minőségi újságok elektronikus szerkesztőségeit rendszerint igen bonyolult, egyénileg fejlesztett tartalomkezelők szolgálják ki.

Moshe Weitzman és Barry Jaspan nemrégiben arra kaptak megbízást, hogy elkészítsék a New York Observer c. lap internetes verzióját, méghozzá úgy, hogy a kiadó a webes verzióban is ragaszkodott a nyomtatásban érvényesülő szerkesztési és grafikai igényességhez. Hogy hogyan sikerült 2 Drupal fejlesztőnek 2 hónap alatt megoldani a feladatot, arról a Drupal.org honlapon közölt írásukban számolnak be.

Az újságok elektronikus kiadását hagyományos Drupal módszerekkel a következő módon készítettük:

  1. A cikkek a rendszerben valamilyen tartalomtípusnak (pl. írás) felelnek meg.
  2. A cikkeket a rovatoknak megfelelő kategóriákba rendezzük.
  3. A címlapon és a rovatok oldalain blokkokat helyezünk el, amelyek megjelenítését/elrejtését az útvonal álnevek segítségével szabályozzuk.
  4. A blokkokba a tartalmat (a cikklistákat) kézzel írt adatbázis-lekérdezésekkel, vagy újabban Views modullal készített nézetek segítségével töltjük fel.
  5. Az egyes számok cikkeit kategóriákkal fogjuk össze (pl. a „2007. május 6-i szám” egy kategória).
  6. A rendszerbe feltöltött cikkek megjelentetését valamilyen cron alapú időzítő végzi.

A New York Observer – és a legtöbb „komoly” újság – számára ez a megoldás azért nem elfogadható, mert a lapkiadásban elengedhetetlen, hogy a szerkesztők előnézetben lássák, egy adott tartalmi elem hogyan fog mutatni a végleges helyén és formájában. Gyakori, hogy egy címet, bekezdést átfogalmaznak, egy kép méretét és arányait megváltoztatják annak érdekében, hogy a cikk megjelenése jobban illeszkedjék az oldal struktúrájához, vagy a mellette álló hirdetéshez. Ehhez lényegében annyi párhuzamos tesztwebhelyet kellene működtetni és összehangolni, ahány rovat van az újságban – plusz egyet külön a nyitólap számára.

A két fejlesztő ennek a problémának a megoldására egy újszerű megoldást vetett be: a címlapot és a rovatok oldalait, sőt, a cikkekhez kapcsolódó további cikkek listáit is CCK tartalomtípusként definiálta. A kilistázandó tartalmakat node reference segítségével kapcsolták az oldalakhoz, a megjelenítést pedig tartalomtípusra szabott template fájlokkal oldották meg. Összességében mintegy 110 CCK mezőt definiáltak a webhely felépítése során – ezek közül talán a legfontosabb a "Közzététel időpontja" nevű mező, ami feleslegessé tette a cron alapú időzítő használatát: egy oldal lekérésekor a rendszer egyszerűen a múltbeli időpontban publikálandó tartalmak közül a legfrissebb közzétételi időponttal rendelkezőt küldi ki a látogatónak. A megoldás további előnye, hogy a nyitólap és a kategória-oldalak „közönséges” tartalommá alakításával elérhetővé váltak a Drupal alaprendszer és a kiegészítő modulok node-okra fejlesztett szolgáltatásai.

Moshe és Barry cikke az eredeti alapötlet mellett számos ügyes fogást mutat be. A fejlesztők egy idő után nagyon megunták a blokk beállítási oldalakon a szerkesztgetést, ezért a blokkok bonyolult ki- és bekapcsolási utasításait egyszerűen egy tömbben helyezték el, amit beépítettek a sminkbe. A címkefelhő elemeinek méretét nem a címke – önmagában nem sokat mondó – „népszerűsége”, hanem az adott címkével megjelölt cikkek olvasottsága határozza meg.

A fejlesztők beszámolójához érkezett hozzászólások egy része a webhely optimalizálására vonatkozott, különös tekintettel a közfelfogás által problematikusnak tartott CCK és Views használatára – Moshe szerint komolyabb optimalizálásra nem volt szükség (vélhetően a webhely dedikált szerveren fut), viszont nagyon egyszerű módon, az Apache mod_expires moduljának bekapcsolásával elérték azt, hogy az oldal jóval gyorsabban töltődjön be a böngészőbe. Kérdésekre adott válaszként bemutatták a legolvasottabb és legtöbb hozzászólást vonzó cikkek listáit rejtő füles megoldást, beszámoltak a projekt részfeladatainak időigényéről, és még jónéhány érdekes témáról. Érdemes tehát legörgetni a cikk aljáig és a hozzászólásokból is kimazsolázni a számunkra érdekesebb részleteket.

Hozzászólások

uborka képe

A két fejlesztő ennek a problémának a megoldására egy újszerű megoldást vetett be: a címlapot és a rovatok oldalait, sőt, a cikkekhez kapcsolódó további cikkek listáit is CCK tartalomtípusként definiálta. A kilistázandó tartalmakat node reference segítségével kapcsolták az oldalakhoz, a megjelenítést pedig tartalomtípusra szabott template fájlokkal oldották meg.

Jól érte, hogy egy cikkhez tartozik minimum 2 db CCK elem (egy ami a főoldalra, és egy ami a rovatoldalra vonatkozik) ?
Vagy egy cikk CCK-ján belül van két field mező amiben a tördelő különböző módon tördelheti a szöveget. Az adott oldalon (vagy hasábban) a hozzá tartozó field mező tartalma jelenik meg ?

Moshe és Barry cikke az eredeti alapötlet mellett számos ügyes fogást mutat be. A fejlesztők egy idő után nagyon megunták a blokk beállítási oldalakon a szerkesztgetést, ezért a blokkok bonyolult ki- és bekapcsolási utasításait egyszerűen egy tömbben helyezték el, amit beépítettek a sminkbe.

Ezt nem egészen értem: a smink jeleníti meg a blokkokat ? Magyarán ha az adott sminkel megjelenik egy node, az bekapcsolja a megfelelő blokkokat ?
Hogy is lehet a sminkben ki- és bekapcsolni egy blokkot ?

A címkefelhő elemeinek méretét nem a címke ? önmagában nem sokat mondó ? ?népszerűsége?, hanem az adott címkével megjelölt cikkek olvasottsága határozza meg.

Na ezt most teljesen nem értem. Valaki megmagyarázná !?

(mivel angol tudásom hiányos, ne írjátok, hogy olvassam el az eredeti cikket, mert nem megy :)

Illyés Edith képe

1. Címlap és rovatoldal tartalomtípusok
Az /admin/settings/site-information oldalon tudod beállítani, hogy mi kerüljön ki a nyitólapra. Mondjuk nem a /node című listát teszed ki, hanem egy tetszőleges node-ot (node/1234). És ez a node nem csak egy egyszerű cikk, hanem egy speciális tartalom, amihez node reference útján csatolod a megjelenítendő listákat, Flash animációkat, hirdetéseket és hasonlókat. A megjelenítést a node-cimlap.tpl.php template fájl segítségével végzed.

Hasonlóképpen a "Belföldi hírek" rovat nem a taxonomy/term/xx oldal, hanem egy rovat_belfold nevű tartalomtípusba tartozó node, amihez node reference útján rendeled a cikkeket.

2. Blokk megjelenítés szabályozása sminkben
Van egy block.tpl.php nevű sminkfájl, amiben meghatározod, hogy mondjuk a block-search-0 azonosítójú blokkot nem kell kitenni az /ittnemlehetkeresni című oldalon. Elvileg ezt a /build/block/configure/search/0 oldalon tudod beállítani a láthatósági beállítások között, de 20-30 blokknál többet ilyen módon konfigurálni már elég kényelmetlen, egyszerűbb bekódolni a sminkfájlba.

3. Címkék mérete felhőben
A hagyományos címkefelhőben a címkék annál nagyobbak, minél gyakrabban használják őket a szerzők. Az ilyen címkefelhő azt mutatja, milyen témájú tartalmak fordulnak elő leggyakrabban a honlapon. A Drupal statisztika modulja pedig azt számolja, hányan olvastak el egy-egy cikket. Egy újság esetében az utóbbi információ az érdekes a látogatók számára, ennek az értékeit használták a felhő címkéinek méretezéséhez.

Például egy magyar napilap honlapján nem az az érdekes, hogy a "kormány" címkét hány cikk használja (nagyon sok), hanem az, hogy a legutóbbi kormányzati döntésről szóló cikk a legolvasottabb tartalom a honlapon (tehát én, a látogató is valószínűleg érdekesnek fogom találni).

uborka képe

értem, köszönöm
1. csak azt nem értettem, hogy ez mért új, eddig a node-ban megjelenített nod másnak még nem jutott eszébe (csak halkan: mert én már csináltam ilyet)
Meg lehetne a drupal.hu-n is csinálni, hogy a linkek alatt lévő honlapok, az egyes felhasználók neve alatt szerepeljenek. Így mindenki tisztában lehetne azzal, ki mit csinált...

2. fenébe, az egyszerűbb dolgok mért nem jutnak az ember eszébe. Én a blokk konfiurációs lapjába tettem egy függvényhívást, ami a megjelenítést szabályoza :(

3. ne ez nekem még ködös, illetve felhős. Ez a cimkefelhő az, amikor szavak vannak egymás után és az egyik nagyobb mint a másik, egyik másik oldalon láttam ilyet (eddig azt hittem, hogy ez valamilyen design terend :). Ha nem egy példát ha kérhetek.

Illyés Edith képe

eddig a node-ban megjelenített nod másnak még nem jutott eszébe (csak halkan: mert én már csináltam ilyet)

A CCK node reference nem egészen azonos a node-ban megjelenített node-dal. Időnként például a node-ot nem is jelenítjük meg, csak arra használjuk, hogy a rá node reference útján hivatkozó node-okat listázzuk. Lásd például ezt a témát.

A cikkben ismertetett megoldások önmagukban nem számítanak újdonságnak, jórészt meglévő modulokra építenek. De ilyen alapon bármire lehet azt mondani, hogy "ez mért új". Senki nem üres lappal indul. A megoldás eredetisége itt abban rejlett, hogy volt egy elég komplex feladat (elektronikus lapkiadás), volt egy szokványos mód, ahogyan ezt a feladatot eddig rendszerint megoldották (ömlesztett listázó blokkok, lásd pl. a Népszabadság honlapját); ez a megoldás nem felelt meg a megrendelő teljesen méltányolható igényeinek – a fejlesztők pedig lényegében egy egyszerű Drupal szolgáltatás (CCK node reference) kreatív alkalmazásával létrehoztak egy teljes értékű szerkesztőségi rendszert.

Címkefelhő: például itt. Ez nem azt mutatja, hogy az olvasók miről szeretnek olvasni, hanem azt, hogy a blogger miről ír. A kettő ugye nem mindig esik egybe. Az Observer esetében itt is az történt, hogy volt két meglévő megoldás (címkefelhő, Drupal statisztika), és ezeket kreatív módon kombinálták.

uborka képe

Megnéztem újra a szóban forgó oldalt, és leesett mitől is új: minden oldal, olyan többhasábos szerkezet, ahol a hasábok tartalma, illetve sorrendje, neadja elrendezése akár oldalanként más és más. Ezek a node reference-el vannak összekapcsolva. Jóóóó... mivel nemsokára nekem is csinálni kell egy "újságot"...

Illyés Edith képe

És minden oldalt tetszőleges dátumra vissza- vagy előremenőleg le tudsz kérni a rendszerből. Ha azt mondom, hogy mutasd meg a 2007. május 3-i címlap második munkaverzióját, akkor csak lekéred a www.valami.hu/node/223344 node-ot és kész.

uborka képe

Próbálom elképzelni a struktúrát, a legkisebb elemtől a legnagyobbig. Vannak a cikk szintű CCK-k ezek szabályozzák egy hír megjelenését. Ezekben hasábérzékeny fieldek vannak, "minden" hasábhoz betördelhető a szöveg.

Vannak a hasábszintű CCK-k ezek határozzák meg a hasábok paramétereit, és a cikkek megjelenítési módját.

Vannak az oldal szintű CCK-k ezek határozzák meg, a különböző oldalak hasábelrendezéseit.

És van a dátum szint, ami adott esetben egy oldal, dátum szerinti variációit jeleníti meg.

Ezek egymással a node reference-vel vannak összekapcsolva.

Jól gondolom ?

Illyés Edith képe

Lehet, hogy jól gondolod, de én sajnos nem tudlak követni :)

Van a "cikk" tartalomtípus. Moshe Weitzman azt mondja, kb. 50 CCK mezőből állt össze ez a tartalomtípus (bár nyilván nem használja minden cikk az összes mezőt). Fontosabb mezők: cím, törzs, szerző (node reference), közzététel dátuma, kapcsolódó cikkek (node reference). Tehát létrehozol egy cikket a fenti űrlap kitöltésével, ez lesz mondjuk a node/1234 a rendszerben.

A "rovat" tartalomtípus szintén egy CCK node, ott a mezők lényegében dobozok, pl. "Középső oszlop felső doboz (B1)", "Középső oszlop középső doboz (B2)", stb. Amikor felviszed a rovatoldalt, akkor ezekhez a dobozokhoz node reference segítségével hozzárendeled a cikkeket, pl. a node/1234-es cikket. Az így létrejött rovatoldal lesz a rendszeredben a node/1235.

És végül a címlap a rovatoldalakhoz hasonló dobozokból épül fel, ahol a kultúra rovat mondjuk a B2-es node reference mező, ehhez hozzárendeled a node/1235-öt, stb. Az így létrehozott címlap node/1236 néven fog élni a rendszerben.

Az, hogy az egyes mezők konkrétan hogyan jelennek meg (hogy a B2-es mező hogyan kerül a címlapon oda, ahol van, hogyan néz ki – lista, bevezető – az már a smink dolga. Tehát nem a mezők hasábérzékenyek, hanem a hasábok mező-érzékenyek. Van egy hasábod a sminkben, ami meghatározza a címlapon a B2-es mező helyét, és ebbe töltöd bele a node/1235-öt és társait a megfelelő formában.

Az alapötlet egyszerű és elegáns, a kivitelezés viszont nagyon komoly munkát igényelt, nem véletlenül dolgoztak rajta 2 hónapig (ennek 30%-a csak a sminkkészítés).

uborka képe

Akkor jól gondoltam (egy kis tévedéssel :). Köszönöm.

thamas képe

Köszönet, hogy felhívtad a figyelemt erre az írásra és, hogy összefoglaltad a lényegét!

Az angol eredetit még nem olvastam végig, így nem tudom jól gondolom-e: az oldalakon a dobozok (pl. "vezércikk", ízelítők" stb.) mérete és elrendezése fix-ugye? Mármint, a szerkesztők nemigen tudják változtani a "layoutot" úgy mint egy nyomtatott kiadványnál, hogy "a tegnapi számban három hasáb volt a fő cikk és kettő a másik, ma viszont öt hasáb a fő cikk és nincs mellette más".
Ez valamelyest kezelhető lenne CSS-sel, de gondolom egy olyan sminket készíteni, ami vizuális eszközökkel kezelhető (ide oda huzigálom, méretezem a dobozokat) kicsit macerás lenne (hm, bár blognál láttam már ilyesmit, js-sel)... - vagy megcsinálták ezt is?

Más: érdekes az URL kialakítás is: úgy látom azonosító számként csak az évet tüntetik fel az URL-ben, egyébként pedig a cikk címégől származik - ez így nagyon elegáns, ember- és keresőbarát, viszont feltételezi, hogy egy éven belül nincs két azonos cikk cím. Azért egy napilapnál ez izgalmas!

Üdvözlettel:
Hajas Tamás

Üdvözlettel:
Hajas Tamás

Illyés Edith képe

Sajnos nincsenek röntgenszemeim, úgyhogy én is csak azt tudom mondani, amit a cikkben olvastam ;)

Egyébként pont ma állították át a Guardian címlapját új dizájnra, és reggel 6 óra már kétszer változott az elrendezés. Azt írják a háziblogban, hogy

we will not be wedded to the fixed story and picture positions of more conventional sites.

A drupalos cikk pedig azt írja, hogy a smink "includes significant ajax work". Engem is érdekelnének az ott alkalmazott megoldások ...:)

alvilag képe

Sziasztok!
Ezt a cikket nem tudnátok feltenni magyarul is?

Üdv: Zoli

pp képe

itt lefordítják neked ingyé, sőt még vicces is!

"Ugyanaz az igazgató hajtja meg a szélső hűvös headcloudot* a honlapon."

"Nem meglepően épületben találkoztunk több váratlan kihívással a helyszín, általában a nagyon utolsó percnél. Néhányuk hozzátartozó:"

"Itt van a XML fájl, mivel a headcloud. Drupal format_xml_elements() funkciója generáló önkényes XML-nek való zsebkendő."

;)

thamas képe

A http://www.observer.com/node a Drupal telepítés utáni üdvözlő képernyőjét mutatja az Observer fej és láblécével, a http://www.observer.com/admin/ pedig Garland sminnkel jeleníti meg az üzenetet, arról, hogy az oldalt eltávolították.

(A "felfedezés" Suidroot-tól származik, aki Doranskynál szólt hozzá.)

Üdvözlettel:
Hajas Tamás

Üdvözlettel:
Hajas Tamás

GaBy képe

Ez most ciki vagy gázos? ? :)))

csatibcsi képe

A http://www.observer.com-on a rendes fejlesztett kezdőoldal jön, csak a /node oldalt nem rendelték ide, illetve nem gondoskodtak róla. A legtöbb netező úgyis csak a .com-ig jut el, a node-ról nem sok fogalmuk van :-)

Az admin oldal már érdekesebb, de csak egy leírás az újabb arculatról. Ide sem juthat el akárki, szerintem kvázi intranetként használják, admin jogokat csak a staff kap.

mjani képe

Nem biztos, hogy ide kellett volna írnom, de itt nem kell hosszasan magyaráznom.
Edit ezt írta:

Az, hogy az egyes mezők konkrétan hogyan jelennek meg (hogy a B2-es mező hogyan kerül a címlapon oda, ahol van, hogyan néz ki – lista, bevezető – az már a smink dolga.

Ezt szeretném megvalósítani.
Tartalmakat vittem fel cck mezőként és az egyes mezők tartalmát szeretném elhelyezni a cikkben is említett dobozokba.