Pauli Huhtiniemi - www.paulihuhtiniemi.com
0

Drupal + Views: How to add a wrapper around two fields using replacement patterns

Torstai
2
Syyskuu .10
13:51

Views must be one of the most used contributed module for Drupal. It’s kind of a SQL query builder that allows you to make various kinds of listings of your data. For example, a list of the most recent blog posts is really easy to build with Views.

You can select whether the rows are printed as a table, a list or just a bunch of divs/spans after each other. When it comes to markup of individual fields, things can get a little bit trickier.

To make CSS styling more easier it helps to have a wrapper element around the fields. Usually this is when you want to float a group of elements correctly.

Let's say that for each row we have three fields called field_1, field_2 and field_3. By default, the view style is unformatted and each field has a div-wrapper around it:

<div class="views-row views-row-1 views-row-odd views-row-first views-row-last">
    <div class="views-field-field-1-value">
          <span class="field-content">Field 1 content</span>
    </div>
    <div class="views-field-field-2-value">
          <span class="field-content">Field 2 content</span>
    </div>
    <div class="views-field-field-3-value">
          <span class="field-content">Field 3 content</span>
    </div>
</div>

We would like to have a wrapper element around the field_2 and field_3. How can we achieve this? We could play with the template files, but many times I find it more straightforward to use replacement patterns, also known as tokens.

Select field_3 and click Rewrite the output of this field. Now you can see the replacement patterns that are available for use:

Drupal-Views-rewrite-output

Remember that there are tokens only for fields that are displayed before this field! If you go to look tokens available for field_2, there isn’t a token for field_3. This is really important and may be a bit confusing in the beginning. Use the field rearrange feature if needed.

So, now that we have selected the field_3, we can use all the tokens and rewrite the output as we like. I’m just going to add a new div with class “wrapper” around the fields:

<div class="wrapper">
    <div class="views-field-field-2-value">
        <span class="field-content">[field_2_value]</span>
    </div>
    <div class="views-field-field-3-value">
        <span class="field-content">[field_3_value]</span>
    </div>
</div>

I want to avoid outputting field_2 twice. So click field_2 and check Exclude from display. After this we can see the final output with a nice wrapper around field_2 and field_3:

<div class="views-field-nid">
    <span class="views-field-field-1-value">Field 1 content</span>
</div>
<div class="views-field-type">
    <span class="field-content">
        <div class="wrapper">
            <div class="views-field-field-2-value">
                <span class="field-content">Field 2 content</span>
            </div>
            <div class="views-field-field-3-value">
                <span class="field-content">Field 3 content</span>
            </div>
        </div>
    </span>
</div>

With this method you have almost full control over your markup and you don’t need to modify any template files. Just exclude all fields from display (not the last one, of course) and rewrite the output of last field using tokens.

This example has been tested with Drupal 6.19 and Views 6.x-2.11.

0

Tämän sivuston rakentaminen Drupalilla

Torstai
5
Elokuu .10
21:05

Nyt kun blogini on jokusen kuukauden ollut linjoilla, niin voisin kertoa hieman sivuston syntymisestä tekniseltä kantilta. 

Tämä oma sivustoni on selkeästi blogi, joten alustaksi Wordpress olisi ollut standardi-valinta, mutta olen viime aikoina tehnyt paljon töitä Drupalin parissa ja halusin osaltaan syventää tietämystäni rakentamalla omatkin sivut Drupalin päälle.

Jos blogin pystyttäminen on päätarkoitus, niin Drupal voi olla järkytys verrattuna vaikka edellä mainittuun Wordpressiin. Hallintapaneelin käyttöliittymä on ruma ja vanhanaikaisen näköinen, eikä esimerkiksi WYSIWYG-editoreista ole pakasta vedettynä tietoakaan. 

Onkin syytä tiedostaa, että oli sivusto millainen tahansa, niin pelkillä core-moduuleilla ei selviä oikeastaan koskaan. Käsittääkseni Drupalin kehitys on entistä enemmän menossa suuntaan, jossa vakiona mukana tulevien moduulien määrä on mahdollisimman pieni, mutta järjestelmästä olisi saatavilla eri tarkoituksiin räätälöityjä distribuutioita tarpeellisin lisämoduulein varustettuina.

Alusta lähtien oli selvää, että valmiiden teemojen sijasta ulkoasun täytyisi olla omaa tekoa. Omat Photoshop-taitoni eivät häikäise, mutta onneksi samassa taloudessa asuu graafisen alan ammattilainen, joten toiveideni mukainen leiska saatiin aikaiseksi. Halusin hyödyntää HTML5:sta ja varsinkin CSS3:sta sivuston taittoa tehdessä, mikä olikin oikein rentouttavaa, kun kerrankin ei tarvinnut välittää vanhemmista IE-selaimista. Suosittelen.

Kirjoitin HTML:n ja CSS:n aika pitkälti valmiiksi ennen kuin päätin ottaa Drupalin alustaksi. Tämä on aivan väärä tapa toimia, sillä Drupal tarjoaa HTML-merkkauksen, jolloin teeman tekeminen on CSS-muotoilujen tekemistä ja tarvittaessa HTML-merkkauksen muuttamista joko templaatti-tiedostojen tai teemoittamiseen liittyvien preprocess-funktioiden avulla.

Perusajatus Drupalin teemojen tekemisessä avautuu varsin nopeasti, mutta jos tarvitsee muuttaa vaikka yksittäisen lomakekentän HTML-merkkausta, niin HTML:n alkulähteen selvittäminen on varsinkin alussa hieman vaikeaa. Drupal-saitteja enemmän tehdessä tämä kuitenkin helpottuu.

Alkuun Drupalin välimuisti aiheutti turhaa ihmettelyä, kun tehdyt muutokset eivät tuntuneet toimivan. Vaikka Drupalin cachen laittaa pois päältä hallintapaneelista, niin se ei kuitenkaan ihan täysin poista sitä käytöstä. Cache on onneksi mahdollista kytkeä kokonaan pois käytöstä parilla puukotuksella development-vaihetta ajatellen, mutta tällä saattaa olla yllättäviä vaikutuksia esimerkiksi lomakkeiden kanssa. Jos jokin toimii hassusti, tyhjennä aina ensin cache.

Drupalissa on käsittääkseni alunperin ollut ajatuksena, että erillistä hallintapaneelin teemaa ei ole, vaan frontend- ja admin-puoli käyttävät samaa teemaa. Yleensä kuitenkin käytetään eri teemoja, mutta Drupalissa tämä erottelu on vielä hieman puolitiessä, sillä esimerkiksi sisältönoodin poistamisen varmistaminen tapahtuu frontend-teemalla, samoin noodin versiohistorian tarkastelu. Omassa käytössä tämä ei niinkään haittaa, mutta asiakasprojekteissa tällaiset outoudet aiheuttavat turhaa lisätyötä.

Drupalissa näkyy, että kehityksen aikana tärkeänä käyttökohteena on nähty yhteisölliset sivustot. Tämä on syytä muistaa vaikkapa moduulien konfigurointia ihmetellessä. Esimerkiksi itselläni oli alkuun hieman vaikea hahmottaa Twitter-moduulin konffausta, koska moduuli mahdollistaa oman Twitter-blockin esittämisen kullekin rekisteröityneelle käyttäjälle, jolloin asetuksia voi muuttaa useasta paikasta.

Drupalin vahvuus on laaja valikoima erilaisia valmiita moduuleita, joilla pystyy rakentamaan varsin suuria järjestelmiä hyvin vähäisellä koodauksen tarpeella. Välillä suorastaan hämmästyttää, kuinka monipuolisiin tarpeisiin jo pelkästään CKK-, Views- ja imagecache-moduulit riittävät. Näillä moduuleilla voidaan rakentaa monipuolisesti uusia sisältötyyppejä (Content Type), luoda niistä erilaisia näkymiä ja listauksia sekä käsitellä liitettyjä kuvia mm. muuttamalla kokoa ja rajaamalla. Kaikki tämä ilman, että tarvitsee kirjoittaa riviäkään koodia.

Toisaalta sitten, kun Drupalin kanssa tarvitsee alkaa koodaamaan, niin varsinkin alussa on helposti hieman hukassa, miten asiat tulisi tehtyä oikein, "the Drupal Way". 

Vaikka Drupalin kanssa on ollut tuskaisiakin hetkiä, niin mielestäni järjestelmä on kuitenkin suosionsa ansainnut. Odotan mielenkiinnolla tulevaa Drupal 7:aa, jossa CKK-moduuli on integroitu kiinteäksi osaksi Drupalia ja hallintapaneelin käyttöliittymä on uudistettu.

1

Vuvuzelat pilaavat MM-tunnelman

Sunnuntai
13
Kesäkuu .10
22:44

Siinä missä nuorena heräsin aamuviideltä katsomaan Mika Häkkisen ajoa formuloissa tai miesten 50 kilometrin hiihtoa Naganon olympilaisissa, niin nykyään en juurikaan seuraa urheilua. 

Poikkeuksen muodostavat kuitenkin jalkapallon arvoturnaukset, joiden aikana löydän itseni kerta toisensa jälkeen katsomassa matseja, oli vastakkain sitten mitkä maat tahansa. Jalkapallon MM-turnauksessa on jotain ainutlaatuista, joka saa tällaisen jalkapalloa koskaan harrastamattomankin innostumaan. 

Tällä kertaa MM-turnaus järjestetään Etelä-Afrikassa. Sikäläiseen jalkapallokulttuuriin kuuluvat vuvuzelat: noin metrin mittaiset torvet, joista lähtee hyvin voimakas, ampiaisparvea muistuttava ääni. Vuvuzeloja on stadioneilla todella paljon, sillä niiden surina peittää alleen kaiken muun yleisön äänehdinnän TV-lähetyksissä. Pahinta näissä torvissa on, että ne soivat jatkuvasti, riippumatta kentän tapahtumista ja jopa kansallislaulujen aikana. 

Pelin tapahtumien mukaan elävällä yleisöllä on suuri merkitys pelien tunnelman kannalta. Kannatuslaulut, huokaukset tolppalaukauksen jälkeen, hiljaisuus pelin laahatessa ja valtava kohina huippuhetkillä ovat kaikki asioita, jotka nyt jäävät monotonisen surinan takia kokematta. 

Ennen turnausta vuvuzelojen kieltäminen oli harkinnassa, mutta ne päätettiin lopulta sallia. Parin pelipäivän jälkeen keskustelu kiellosta on kuitenkin jälleen herännyt, enkä voi muuta kuin toivoa, että jatkossa torvet jäävät stadionin portille.

1

Pelien ladattava lisäsisältö

Perjantai
4
Kesäkuu .10
00:19

Yksi pelibisneksen huomattavia trendejä on ladattavan lisäsisällön (Downloadable Content, DLC) tarjonnan kasvaminen. DLC:tä on monenlaista: uusia kenttiä, ratoja, tehtäviä, aseita, varusteita, avatarille vaatteita ja niin edelleen. Sisällön laatu, määrä ja hinta vaihtelevat paljon. Halvoilla lisä-armoreilla niistetään tosifaneilta parit lisäeurot, kun taas esimerkiksi Dragon Age: Origins -pelin Awakening -laajennus tarjoaa kuulemma tuoretta pelattavaa kokonaisen pelin edestä.

Pelintekijät eivät saa latiakaan käytettyjen pelien kaupasta, joten on hyvin yleistä tarjota ilmaista DLC:tä pelinsä uutena ostaville pelaajille. Esimerkiksi uutena ostetun Alan Waken mukana tulee koodi, jolla ensimmäinen lisäepisodi on mahdollista ladata ilmaiseksi, kun muut joutuvat pulittamaan siitä noin 10 euroa.

Tyypillistä on, että DLC:n hehkuttaminen alkaa jo ennen pelin julkaisua. Ensimmäiselle karttapaketille saattaa olla jo julkaisupäivämäärä ennen kuin peli on kaupoissa. On ollut tapauksia, joissa varsinainen data on jo pelilevyllä ja maksua vastaan ladataan käytännössä vain koodi, jolla tämä materiaali avataan käyttöön.

Pelintekijöillehän tämä on hyväkatteista hommaa, vai mitä sanotte siitä, että World of Warcraftin pelaajat ostivat neljässä tunnissa 80000 virtuaalista hevosta 25 taalan hintalapulla? Hevosia, jotka eivät tarjoa pelaajalle mitään lisäetua, näyttäväthän nyt vaan komeilta.

Viime aikoina on muutenkin ollut huomattavissa, että julkaisijat haluavat testata, kuinka pelaajat suhtautuvat korkeampiin hintoihin. Esimerkiksi Modern Warfare 2:n karttapaketit maksavat noin 14 euroa, kun aikaisempi standardihinta on ollut alle 10 euroa. Modern Warfare 2:een on julkaistu nyt kaksi karttapakettia, jotka sisältävät yhteensä 10 karttaa, joista neljä on sarjan edellisessä osassa olleita vanhoja karttoja. Eli kuudesta oikeasti uudesta kartasta kertyy hintaa lähes 30 euroa, mikä on jo puolet varsinaisen pelin hinnasta! Korkeasta hinnasta on kuulunut paljon valitusta, mutta myyntiä tämä ei laskenut, päinvastoin. Ensimmäinen karttapaketti, Stimulus Package, ylitti kaikki aikaisemmat DLC-kaupan ennätykset yli 2,5 miljoonan kappaleen myynnillä ensimmäisen viikon aikana.

En ihmettelisi, jos Halon ja Call of Dutyn kaltaiset huippusuositut moninpeliräiskinnät siirtyisivät tulevaisuudessa kuukausimaksullisiksi. Jotenkin itsestäni tuntuisi melkeinpä paremmalta maksaa kk-maksua ylihintaisten karttapakettien sijasta. Tosin varmaan Activision rahastaisi kk-maksusta huolimatta pari kymppiä uusista kartoista. 

DLC:n suosion kasvaminen ja digitaalisten jakelukanavien kehittyminen tarkoittaa myös sitä, että episodi kerrallaan myytävien pelien määrä tulee kasvamaan. Yksinpelit siirtyvät täten kohti nykyaikaisten TV-sarjojen rakennetta. Osta jakso kerrallaan heti, tai myöhemmin koko tuotantokausi. Telltale Games on yksi pioneereista tällä saralla muun muassa Sam & Max -sarjallaan. 

Pelaajana DLC:hen suhtautuminen on väkisinkin kaksijakoista. Jos joku haluaa ostaa parilla eurolla lisä-armorin, niin ei se mitään, eihän se ole minulta pois. Toisaalta laadukkaasti tehdyt lisätehtävät tai moninpelikartat ovat sisältöä, millä saa mukavasti lisää ikää peleihin, ja niistä myös mielellään jokusen euron maksaa. DLC:n kauppaajien tulisi panostaa laatuun ja miettiä tarkasti hinnoittelua, sillä muuten hommasta jää helposti rahastuksen maku suuhun.