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.