Jekyllin linkit ja permalinkit

Linkkien tekeminen ei markdown merkinnän takia, ja koska kyseessä ei ole dynaaminen järjestelmä, onnistu ihan yhtä helposti kuin WordPressissä. Jos sinulla on historiaa entisestä foorumimaailmasta, niin olet hajulla miten linkit tehdään. Jos olet nuorempaa sukupolvea, niin joudut opettelemaan manuaalisemman tavan. Linkitys vaatii myös, että url-rakenne on jotenkin betonoitu ja se tapahtuu sisällön luontivaiheessa, joko per dokumentti head matter osassa tai käyttämällä globaaleja permalink asetuksia.

Linkityksen perusteet

Linkit voidaan periaatteessa tehdä kolmella tavalla:

  • juurihakemiston suhteen suhteellisen linkin, joka alkaa aina kauttaviivalla ja kertoo missä jokin asia on webhakemiston juuresta lähtien, kuten /media/kuva.jpg jolloin tiedetään koko ajan, että kuva.jpg sijaitsee juurihakemistosta löytyvästä media-hakemistosta. Muotoilu tekstissä on silloin mallia [linkin teksti](/jutut/[jutun-nimi)
  • sen hetkisen sijainnin mukaan suhteellisen linkin, jossa polun puuttuminen tarkoittaa, että ollaan samassa hakemistossa, ja polun käyttö johtaa siitä hakemistosta eteenpäin. Muotoilu tekstissä olisi kuin [linkin teksti](jutun-nimi) – jolloin oltaisiin samassa hakemistossa linkkaavan jutun kanssa
  • absoluuttisella linkillä, jossa kerrotaan koko url. Se merkittäisiin [linkin teksti]([https://joku.example.tld/jutut/jutun-nimi)

Suhteellisia linkkejä voidaan käyttää vain sivuston sisäisessä linkityksessä ja absoluuttista käytetään ulkoisiin paikkoihin linkitettäessä.

Linkkien tekemisen käytännön ongelma on kahdessa. On koko ajan tiedettävä missä on ja mihin on menossa, ja se voi olla aika työlästä laajemmilla sivustoilla. Toinen on samaa pohjaa – jos muutat sivuston rakennetta, niin linkit menevät rikki, ja on sitten muutettava käsin (kyllä, linuxeissa on moisia etsi&korvaa komentorivijuttuja, joita en osaa käyttää ja jotka toimivat vain, jos useampi linkki muuttuu tismalleen samalla tavalla).

Jotta ymmärtäisi paremmin miten Jekyll ylipäätään rakentaa sisältöä, puhumattakaa, että löytäisi oikean linkitettävän, niin kannattaa ehkä käyttää komentoa tree. Se ei kuulu ainakaan Ubuntussa perusasennukseen, mutta asentuu nopeasti komennolla sudo apt install tree -y

Linkit muuttujaksi

Jekyll antaa mahdollisuuden käsitellä linkkejä hieman joustavammin. Käytössä on sellainen vipstaaki kuin Liquid ja sen avulla linkit saadaan muuttujan post_url taakse. Jos ennen joutui linkittämään näin:

[linkin teksti](/jekyll/perusteet/2020/08/13/jekyll-ja-markdown.html)

Nyt voidaankin sama ilmaista tällä tavalla:

[linkin teksti]({% post_url 2020-08-13-jekyll-ja-markdown %})

Kun Jekyll generoi sivut, niin se rakentaa muuttujan mukaan juurihakemistoon nähden suhteelliset linkit. Ja jos käy niin, että linkkiä ei löydy – yleensä kirjoitusvirheen takia – niin Liquid antaa siitä virheilmoituksen. Mutta post_url sallii permalink asetuksen muuttamisen ilman, että sinällään täytyisi mennä käsin kaikkia sisäisiä linkkejä läpi.

Tuossa on pari pientä koukkua takana, Silloin _config.yml tiedostossa täytyy olla asetettuna permalink, eikä post_url muuttuja toimi sivujen kanssa. Ainakaan vielä.

Globaalit post-asetukset

Tiedoston _config.yml sisältämä globaali permalink voidaan asettaa useilla eri tavoilla. Mutta ne pätevät vain post muodoille (ja myös muodolle draft). Sen sijaan page käyttäytyy hieman eri tavalla. Dokumenttien mukaan, kun kyseessä on page, niin :title on sama kuin :basename. Siitä seuraa, että jos permalink on:

/:categories/:year/:month/:day/:title:output_ext

niin se supistuu muotoon:

/:title.html

Mallit

Jekyll tarjoaa linkkien tekemiseen määrättyjä malleja:

  • :year – vuosiluku neljällä numerolla, 2020 (voidaan ohittaa front matter osassa per postaus date kohdassa)
  • :short_year – vuosiluku kahdella numerolla, 20 (voidaan ohittaa front matter osassa per postaus date kohdassa)
  • :month – kuukausi kahdella numerolla, joka otetaan tiedostonimestä, 01 (voidaan ohittaa front matter osassa per postaus date kohdassa)
  • :i_month – kuukausi numeroina ilman etunollaa, 1  .. 12(voidaan ohittaa front matter osassa per postaus date kohdassa)
  • :short_month – kuukauden englanninkielinen kolmikirjaiminen lyhennys, Jan
  • :long_month – kuukauden kokonimi englanniksi, January
  • :day – päivä kahdella numerolla, joka otetaan tiedostonimestä, 01 .. 31 (voidaan ohittaa front matter osassa per postaus date kohdassa)
  • :i_day – päivä ilman etunollaa, 1  .. 31(voidaan ohittaa front matter osassa per postaus date kohdassa)
  • :y_day – päivän järjestysnumero vuodessa etunollilla, 001 .. 366
  • :w_year
  • :week – viikon numero, 01 .. 53
  • :w_day – päivän numero viikossa yhdellä numerolla, 1 .. 7
  • :short_day – päivän kolmikirjaiminen lyhennys englanniksi, Mon
  • :long_day – päivän nimi englanniksi, Monday
  • :hour – 24h kellonajan tunti kahdella numerolla otettuna front matter osasta, 01 .. 24
  • :minute – kellonajan minuutit kahdella numerolla otettuna front matter osasta, 00 .. 59
  • :second – kellonajan sekunnit kahdella numerolla otettuna front matter osasta, 00 .. 59
  • :title – otettuna tiedostonimestä (voidaan ohittaa front matter osassa per postaus slug kohdassa)
  • :slug – slugtyyppinen title tiedostonimestä, jossa kaikki muut merkit paitsi kirjaimet ja numerot on korvattu yhdysviivalla
  • :categories – osassa head matter annetut kategoriat; jos niitä on enemmän, niistä tehdään hierarkinen luetellussa järjestyksessä
  • :slugified_categories – osassa head matter annetut kategoriat slug-muodossa, jolloin muut kuin numerot ja kirjaimet korvataan väliviivalla. Välilyöntejä tai erikoismerkkejä sisältävät kategorianimet voidaan antaa tällä ja nimi laitetaan lainausmerkkeihin, kuten ”Jekyllin tärkeimmät asiat”

Oikopolut

Oikopolut yhdistävät valmiiksi erilaisia linkkimalleja. Näitä ei voi käyttää head matter osassa.

  • :date = /:categories/:year/:month/:day/:title:output_ext
  • :pretty = /:categories/:year/:month/:day/:title/
  • :ordinal = /:categories/:year/:y_day/:title:output_ext
  • :weekdate = /:categories/:year/W:week/:short_day/:title:output_ext
  • :none = /:categories/:title:output_ext

Page ja permalink

Jekyllin ideologiassa, joka on siis puhtaasti blogipohjainen, vaikka sitä voidaankin käyttää myös CMS-tyyppisesti (periaatteessa eroa WordPressiin ei ole, mutta on kuitenkin), sivut, page, ovat nimenomaan niitä mitä aikoinaan – ja osaksi nykyäänkin – sivuiksi mielletään. Ne ovat yhteystietoja varten, käyttöehtoja jne.

Kun mietitään permalink asetuksia, niin ero artikkeleihin, post, on selvä. Sivut eivät yleensä noudata _config.yml sääntöjä ja silloinkin kun ne noudattaisivat, niin siellä ei voida asettaa pelkästään sivuja koskevia globaaleja sääntöjä. Sivujen kohdalla permalink laitetaan aina head matter osaan.

Muutama malli on käytössä:

  • :path – suhteellinen polku lähdehakemistoon, ja tiedostonimi jätetään pois
  • :basename – sama kuin tiedoston nimi
  • :output_ext – sivun tiedostopääte, joka on muutenkin oletuksena .html; käytännössä tarpeeton

Sivujen kohdalla aidosti valinta tapahtuu sen mukaan haluaako linkin olevan muotoa /nimi.html vai /nimi/index.html

Arkistot

Jekyll kutsuu arkistoja nimellä kokoelmat, collections. Se on silti sama kuin arkisto, archive, jota suunnilleen kaikki muut käyttävät. Oli termi mikä tahansa, niin sillekin on olemassa omat permalink vaihtoehdot asetettavissa globaalisti tiedostoon _config.yml.

Formaatti olisi jottain tämänkaltaista:

collections:
  arkistoni:
    output: true
    permalink: /:collection/:name

Malleja on muutama:

  • :collection – arkiston otsikko,  label
  • :path – arkiston hakemiston suhteellinen polku dokumenttiin nähden sisältäen dokumentin oman perusnimen
  • :name – dokumentin oma perusnimi, kaikki muut merkit kuin numerot ja kirjaimet korvataan yhdysviivalla
  • :title – jos osassa front matter on määritelty slug, niin käytetään sitä; jos ei ole, niin se on sama kuin :name
  • :output_ext – arkiston esittävän dokumentin tiedostopääte, .html; se on muutenkin oletuksena ja tämä on yleensä tarpeeton asettaa

 

 

Jakke Lehtonen

Teen B2B-markkinoille sisällöntuottoa sekä UX-testauksia. Samaan liittyy myös koulutukset yrityksille ja webmaailman kanssa muutoin painiville. Serverien sielunelämää on joutunut ohessa opettelmaan. Toinen puoli toiminnasta on koirien ravitsemuksen ja ruokinnan suunnittelua sekä varsinkin omistajien kouluttamista hoitamaan koiriaan oikein ja vielä paremmin. Profiili: Jakke Lehtonen

Keskustele foorumilla Meta/KATISKA