Drupal ja Case Sanoma Entertainment

in Drupal

Tarkkasilmäiset surffarit saattavat huomata, että tänään julkaistu www.sanomaentertainment.com on toteutettu Drupalilla. Tarkemmin sanottuna Drupalin 6-versiolla, joka taipui tähän projektiin yllättävänkin hyvin. Kyseinen saittihan ei ole ihan tyypillistä CMS-sisältöä, vaan melko staattinen sivusto, jossa on muuttuvana sisältönä lähinnä uutisia. Kerron tässä kirjoituksessa muutamia havaintoja Drupalin käyttämisestä tällaisessa projektissa -- lähinnä teknisestä näkökulmasta.

Peruste Drupalin käytölle

Tässä projektissa halusimme saada käytännön tuntumaa ja kokemusta siitä, mihin käyttöön Drupal sopii ja millaisiin ongelmiin sen kanssa törmätään. Saitti on rakenteeltaan sen verran yksinkertainen, että sen olisi voinut tehdä staattisena HTML:näkin. Drupal toimii kuitenkin hyvänä pohjana sisällön ylläpidossa, sillä kaikki sisältö on hallittavissa sen valmiilla käyttöliittymällä. Juuri mitään ei tarvinnut koodata itse PHP:llä, vaan saitti syntyi Drupalin valmiita moduuleja yhdistellen. Teknisenä urakkana oli pääasiassa HTML/CSS-teeman rakentaminen.

Moduulien valitseminen

Drupal-projektin ensimmäinen ja tärkein vaihe on oikeiden moduulien valitseminen. (Oletetaan, että informaatiosuunnittelu ja graafinen design on jo tehty.) Meidän casessamme pelkkä Drupal-core ei riittänyt, sillä tarvittiin tukea monikielisyydelle sekä hierarkiselle sivurakenteelle. Näitä voi toteuttaa Drupalissa monella eri tavalla, joiden aiheuttama monimutkaisuus saitin rakentamiseen ja ylläpitoon vaihtelee paljon.

Monikielisyyden osalta päädyimme käyttämään i18n-moduulia. Se tuo Drupaliin kielivalintablokin sekä eri kielisten sisältönoodien väliset suhteet, jotta tiedetään mikä artikkeli on käännös mistäkin. Sivuhierarkia puolestaan hoitui aika näppärästi nodehierarchy-moduulilla. Sen avulla noodit voivat sisältää lapsinoodeja, jolloin ne muodostavat puumaisen rakenteen. Tästä rakenteesta muodostuu myös suoraan Drupalin päävalikko navigaatiota varten sekä mukava hierarkinen ylläpitonäkymä. Lisäbonuksena sivuhierarkiaa voidaan käyttää URLien muodostamiseen. Lopputulos on hyvin konsistentti ja looginen.

Työn jakautuminen

Perinteisissä webbiprojekteissa työn kulku on mennyt yleensä niin päin, että web-designer suunnittelee HTML:n ja CSS:n, ja sen jälkeen koodaaja ohjelmoi niiden sekaan tarvittavan logiikan. Drupalissa tämä kääntyy pitkälti toisin päin, sillä järjestelmä muodostaa logiikan automaattisesti ja määrittelee suuren osan HTML:stäkin valmiiksi. Webbarin hommana onkin ensisijaisesti muokata CSS halutun ulkoasun mukaiseksi, ja sitten yhdessä koodaajan avustuksella tehdä tarvittavat säädöt HTML:ään niihin kohtiin, jotka eivät loogisesti onnistu pelkällä CSS:llä.

Tässä työvaiheessa oppii aina uutta Drupalista, sillä HTML-rakenteen kustomointia voi tehdä lukemattomissa eri kohdissa ja eri tasoilla. Helposti tulee myös tehtyä virheitä, jotka kostautuvat myöhemmin. Esimerkiksi uutisen ulkoasun voi kustomoida sivutasolla, mutta silloin muutokset eivät vaikutakaan nooditasolla, ja samaa uutisnoodia saatetaan näyttää jonkun toisen sivun yhteydessä.

Opiskeluun kuluu siis paljon aikaa, mutta parhaimmillaan lopputuloksena syntyy melko yksinkertaisia template-ratkaisuja. Täytyy vain tietää oikea tapa tehdä asiat, jotta suunnittelu on DRY-periaatteen mukaista. Mitä enemmän Drupalilla tekee saitteja, sitä helpommin ja tyylikkäämmin tämä vaihe alkaa sujua.

Omia moduuleja ja välimuistia

Edustan itse sitä koulukuntaa, jonka mielestä Drupal-saitin arkkitehtuuriin kuuluu sijoittaa kaikki toiminnot Drupalin sisään, eikä esimerkiksi irrallisiin php-skripteihin. Siksi suunnittelemilleni saiteille tulee tavallisesti ainakin yksi oma moduuli. Tämän projektin tapauksessa omalla moduulilla toteutettiin lähinnä lomakkeiden lähettämistä sekä pieniä sisältötyyppien laajennuksia, jotta ei tarvinnut käyttää raskaahkoa CCK:ta. Olen pyrkinyt välttämään CCK:ta toistaiseksi, kunnes siitä tulee virallisesti osa Drupalin corea.

Drupal-saiteilla on joskus tarpeen rakentaa pieniä SQL-kyselyitä, kun sivupohjaan halutaan upottaa sisältöä. Views-blokkien käyttäminen joka asiaan voi silloin olla turhan monimutkaista. Kyselyitä tehdessä on kuitenkin tarpeen muistaa välimuistin käyttäminen, jos haluaa saitista suorituskykyisen. Onneksi Drupalissa onkin Cache API, jolla kyselyn tulokset on helppo tallentaa välimuistiin. On kuitenkin tärkeää muistaa myös tyhjentää välimuisti muutosten yhteydessä. Se taas hoituu omasta moduulista hook_nodeapi-funktiolla, joka saa aina ilmoituksen, kun jotain muuttuu.

Drupalin välimuistiratkaisu on oletuksena MySQL-pohjainen. Se toimii mukavasti peruskäytössä, mutta ei ole ihan optimaalinen, koska jokaista cache-kyselyä varten täytyy tehdä yksi kysely MySQL:ään. Paremman ratkaisun tarjoaa CacheRouter-moduuli, joka korvaa MySQL-välimuistin esimerkiksi APC:llä tai memcachedilla. Hienointa tässä ratkaisussa on, että kaikki Drupalin Cache APIa käyttävät moduulit siirtyvät tällöin automaattisesti käyttämään APC:tä. Kehittäjien ei tarvitse lainkaan välittää taustalla olevasta välimuistitekniikasta.

Lopullinen tuomio

Tämän projektin jälkeen olen sitä mieltä, että Drupal soveltuu mainiosti CMS-järjestelmäksi tavallisten webbisaittien rakentamiseen, kunhan tekijöillä on osaamista. Mitä enemmän sillä tekee, sitä tehokkaammaksi homma muuttuu. Myös moduuleista karttuu kokemusta, ja hiljalleen osaa valita heti ne oikeat sekä karttaa hankaluuksia aiheuttavia. Cachen ja valmiiden optimointien ansiosta lopputuloksena syntyy ripeästi toimiva saitti.

Kritiikkiä voi antaa siitä, että monet Drupal 6:n moduulit ovat edelleen beta- tai release candidate -vaiheessa. Niiden käyttöä mielellään välttää, vaikka ne monesti toimivatkin ihan hyvin. Toivoisin myös, että nodehierarchy olisi mukana coressa ja Drupalin admin-käyttöliittymä toimisi hierarkisella saitilla nätimmin. Nyt hierarkian muodostaminen ja siihen uusien sivujen lisääminen on turhan insinöörimäistä -- varsinkin monikielisenä.

Odotan mielenkiinnolla Drupal 7:ää, jonka ensimmäinen unstable-versio ilmestyi juuri. Aikataulujen mukaan lopullisen version pitäisi tulla ulos helmikuussa 2009. Sen jälkeen MySQL:n master/slave-replikointituen ansiosta Drupal skaalautuu maailmanluokan isoihinkin saitteihin (kun kuormitus alkaa ylittää 500 hakupyyntöä sekunnissa). Drupal 6:n lasken olevan käyttökelpoinen tuohon haamurajaan asti, kunhan välimuistin käyttö on kunnossa ja rautaa on riittävästi. Se tosin kattaakin käytännössä kaikki suomalaiset saitit.

8 Comments
Vesa Palmu 1.10.2008 23:29:13

Jälleen varsin kiinnostava kirjoitus! On aina mukava lukea myös muiden kokemuksista projekteista, omat projektit pakkaavat olemaan usein NDA-viidakon takia hys-hys -kategoriaa eikä niistä voi paljoa bloggailla.

Drupal 7:sta pitää kuitenkin lisätä, että se tuskin on tulossa vielä helmikuussa 2007. Dries sanoi syksyn Drupalconissa että code freeze tulee sitten kun D7 on siihen valmis. Luulisin että alkuperäisestä aikataulusta mennään jopa vuosi eteenpäin ennen stable releasea. Useat keskeiset moduulit ovat raahanneet niin pahasti perässä D6:n kanssa, että coren tahtia on todennäköisesti pakko hidastaa. Lisäksi Acquian kaupallinen distribuutio on nyt julkaistu pitkän betan jälkeen 6.x:nä ja veikkaisin ettei heilläkään ole intressejä lähteä kovin pikaisesti tukemaan sekä 6.x, että 7.x versioita. Epävirallisesti tämä saattaa hyvinkin vaikuttaa 7.x:n kehityksen nopeuteen..

Moduulien porttaus D5 -> D6 on sinällään suhteellisen vähätöistä. Porttausta on kuitenkin hidastanut se että monet keskeiset moduulit on kirjoitettu nollasta uusiksi upgraden yhteydessä.

kennu 2.10.2008 00:41:25

Harmi juttu tuo 7:n viivästys. Toisaalta tuntuu että Drupal 6:sta saa koko ajan enemmän irti, kun oppii hyödyntämään sitä paremmin. D7:n tietokantamuutokset aiheuttavat epäilemättä paljon työtä moduulien tekijöille..

pni 6.10.2008 00:52:51

Pyydän etukäteen anteeksi hullua kysymystä joka lienee aivan jutun vierestä, mutta toivoisin ystävällisesti saada tietoa siitä, millaista on "CMS-sisältö", verrattuna esimerkiksi noin muuten yleisesti sisältöön? Onko siis sisältö jotenkin erilaista kun se tulee hallintajärjestelmän kautta kuin jos se tulee jotain muuta kautta? Eli vaikuttaako teknologia sisällön tyyppiin?

kennu 6.10.2008 04:06:03

Tuossa kirjoituksessani viittasin CMS-sisällöllä sellaiseen sisältöön, jota tuotetaan tai muokataan jatkuvasti. Tavallinen webbisaittihan voi olla sisällöltään aika staattinen vuosien ajan. Silloin sisällön ylläpitäminen hoituu ehkä vaivattomimmin editoimalla HTML-sivuja, ilman mitään taustalla olevaa sisällönhallintajärjestelmää.

Ossi 6.10.2008 13:36:51

Mielenkiintoinen projekti. Osaatko arvioida näin jälkikäteen muutamia juttuja:

  1. Minkälainen duuni on päivittää Drupalia jatkossa? Siis esimerkiksi vuoden päästä, kun nyt käyttöönotetusta versiosta on löytynyt tietoturva-aukkoja. Minkälaista osaamista se vaatii? Miten nyt tehdyt kustomoinnit vaikuttavat näihin päivityksiin?

  2. Kuinka paljon tuon siten rakentamiseen meni työaikaa?

kennu 6.10.2008 18:25:24

Drupalin päivittäminen on asia, johon meillä on kiinnitetty paljon huomiota. Tässä on avaintekijöitä kaksi: a) Drupalin corea EI patchailla, vaan kustomointi tehdään omilla moduuleilla ja teemoilla. b) Non-core-moduulien määrä minimoidaan, sillä core-moduulit ovat automaattisesti jatkossa yhteensopivia.

Drupalin major-versioita tuetaan onneksi muutenkin pitkään tietoturvapäivitysten osalta, joten kunhan kohta (a) on kunnossa, niin ei pitäisi olla suuria ongelmia. Kohta (b) vaikuttaa enemmän sitten kun siirrytään esimerkiksi versiosta 6.x versioon 7.x, ja pitää odotella, että kaikki moduulit on saatavilla.

Työaikoja/kustannuksia en lähde tässä kommentoimaan sen enempää, muuta kuin että aikatauluissa ja kohtuudessa pysyttiin, ja ekalla kerralla tosiaan merkittävä osa työstä menee opiskeluun.

Tommi F. 7.10.2008 08:51:26

Hömm, tässä kävi nyt sitten näin, että asentelen parhaillaan Drupalia yhden pienen administroimani saitin uusimiseksi. Pakkohan tässä on vihdoinkin kädet tämän homman kanssa liata. Jos ei muuten, niin tsekatakseni "hypen".

Voi olla, että pääset Kennu leikkimään vähän käyttötukea välillä, ellen sitten jopa rohkene Drupal.fi:ssä kyselemään.

Tommi F. 9.10.2008 16:17:36

Pari päivää Drupal-leikkikenttäni kanssa kliksuteltuani on kyllä aika hyvä fiilis systeemistä. Sormi on hengannut suun seudulla aika moneen otteeseen, mutta suurin osa ongelmista on ratkennut yllättävän kivuttomasti ja olen toistuvasti havainnut olevani todella iloisesti yllättynyt Drupalin ajatusmaailman toimivuudesta.

Hieno platta. Tästä voisi jopa yrittää oikeasti innostua.


You can use Markdown to format your comment:

  • > quoted text
  • *italic* text
  • **bold** text
  • `code block` (multi-line is ok, whitespace is preserved)
  • [link text](http://www.google.com "link title")

Separate paragraphs in your text with two newlines