Google Blogger: Att skriva ut datum för alla inlägg

12/25/2008

En del av er kan ha uppmärksammat att de vanliga standard alternativen för layout i Google Blogger bara skriver ut datum för det första inlägget som publicerats aktuell dag. Vågar man sig på en tolkning av det (särskilt kombinerat med vad jag bloggat om tidigare kring hur H-taggar används här) är det hyper-intressant vilket jag tänkte blogga om separat framöver. Här nöjer jag mig med en lösning som gör att du kan skriva ut datum för alla bloggpostningar vilket åtminstone jag menar ger besökaren högre användbarhet. Jag kan inte så något värde överhuvudtaget för besökaren att inte skriva ut det för varje bloggpostning.

Värdet för olika variabler för bloggpostningarna finns tillgängliga via s.k. Layouts Data Tags. En lista över dessa finns i hjälpsidorna här: Layouts Data Tags (jag har emellertid bloggat tidigare här om att fler finns som inte är dokumenterade). Dessa variabler är tillgängliga beroende på vilket kontext du befinner dig i. Detta kontext styrs upplever jag (men kanske inte uteslutande) av hur du konfigurerat din blogg (t.ex. avseende av hur många bloggpostningar som ska visas på startsidan), typ av sida du är på d.v.s. item, archive eller index.

Intressant här är de Layouts Data Tags som hör till det som kallas "Blog Posts" på hjälpsidan. Dessa refererar till den lista av bloggpostningar som görs tillgängliga för dig. På en sida som är item d.v.s. en bloggpostning på egen sida är det en lista med ett element bestående av just aktuell bloggpostning. För index och archive är det en lista med flera bloggpostningar.

Vad är index och archive?

Det har ingen egentligen betydelse här men eftersom hjälpsidorna förklarar det dåligt gör jag ett försak här som en liten avstickare. Archive förklaras i hjälpsidorna som:

"Blogger 'archives' are additional web pages that contain all of your older posts. All of your blog posts are stored in a database even if archiving is not enabled. However, if you do choose to turn on archiving, your posts will be accessible through web pages rather than just through the Blogger interface."
Från: What are archives?
Datum: 2008-12-26

Nu innehåller ett archive inte nödvändigtvis alla gamla postningar som det påstås. Däremot kommer ett archive över en särskild datum-rymd innehålla alla bloggpostningar från den perioden. Ex:

http://www.pryltrend.com/2008_11_01_archive.html

Datum-rymden kan vara månadsvis, veckovis eller daglig och ställs in under Settings - Archiving.

Någon definition av index har jag inte lyckats hitta i hjälpsidorna men vi kan visa genom exempel vad det är:

Startsidan är index. Ex:
www.pryltrend.com

Sidor skapade med Search? Ex:
www.pryltrend.com/search?updated-max=2008-12-21T14%3A31%3A00%2B01%3A00&max-results=10

Labels är index. Ex:
www.pryltrend.com/search/label/Anime

Finns någon viktig skillnad mellan archive och index?

Enligt analysen som Google Webmaster Tools gör av den robots.txt Google Blogger skapar automatiskt ser den ut så här:

User-agent: Mediapartners-Google
Disallow:

User-agent: *
Disallow: /search
Noindex: /feedReaderJson

Sitemap: http://www.pryltrend.com/feeds/posts/default?orderby=updated

Fattar jag den inte fel kommer med andra ord archive-sidor sidor indexeras (om Google väljer att göra det). Den enda index-sidan som kan indexeras är emellertid startsidan och ingen av övriga kan indexeras av Google eftersom Googles bot inte tillåts besöka dessa. Har man ingen widget som visar archive eller ordnar något som kan fungera som sitemap på annat sätt riskerar man därför att tappa massor av innehåll som annars skulle indexeras.

Vad finns i Blog posts som är intressant runt datum?

Blog posts som tolkar det är som jag skrev en lista med blogpostningar. För item består den av ett element och för archive och index för en eller flera bloggpostningar. Gemensamt för hela listan finns flera data taggar och intressant här är posts. Posts pekar ut datataggar som är specifika för den bloggpostning i listan man just då befinner sig på. De två av dessa som har med datum att göra dateHeader och timestamp.

Hur fungerar dateHeader och hur används det i standard layouterna?

dateHeader kan innehålla datum för aktuell postning. Men den innehåller bara datum om postningen är den första postningen i listan som postats just den dagen. Annars är dateHeader den tomma strängen. Det är dateHeader som förklarar varför datum inte skrivs ut för alla bloggpostningar på archive och index-sidor (åtminstone för standard layouterna). Så här ser t.ex. koden ut för den layout SEOTaktik.com använder:

/* Det är är den loop som går igenom alla bloggpostningar i den lista som gjorts tillgänglig och som finns i data. */
<b:loop values='data:posts' var='post'>

/* Nu tittar vi på den bloggpostning i listan vi just nu befinner oss på. */

/* Här kontrolleras om dateHeader har något värde satt. */
<b:if cond='data:post.dateHeader'>
/* dateHeader hade ett värde och måste med andra ord vara den första postning som postades den dagen. dateHeader skrivs ut som h-tagg (^_^) */
<h2 class='date-header'><data:post.dateHeader/></h2>
</b:if>

[diverse annan kod jag tog bort]
</b:loop>

timestamp löser vårt problem

timestamp innehåller den tidpunkt som bloggpostningen publicerades. Tillskillnad från dateHeader existerar denna för varje post. Genom att helt enkelt byta ut dateheader mot timestamp kan vi enkelt skriva ut datum för varje bloggpostning.

Eftersom timestamp ska finnas för alla bloggpostningar kan man strunta if if-satsen som kontrollerar att den inte är tomma strängen. Sådant är egentligen dålig vana och defensiv programmering är en god vana. Här har det ju dock ingen betydelse om ett fel av något slag skulle göra att timestamp i någon situation av någon anledning är den tomma strängen. Inte heller kan jag göra något åt det. Koden jag ersatte (markerad i denna färg i den förra listningen) den med dateHeader med blev därför nu bara:

<font class='date-header'><data:comment.timestamp/></font>

I koden ovan ser vi att jag också tog bort <h2-taggen och ersatte den med min date-header som har font-weight satt till normal. Datum är med andra ord inte den näst mest viktiga rubriken efter den här ändringen. Vad jag istället satt till h2 är bloggpostningens rubrik. Det verkar väl bra mycket rimligare och bättre (^_^)

Så var det problemet löst och det ser nu ut så här på Pryltrend.com:

Att spara utrymme

Åtminstone i en del layout (t.ex. den SEOTaktik.com använder där jag inte ändrat det) skrivs tiden för bloggpostningen ut längst ner. Hur det skrivs ut går förövrigt att styra en del (vilket jag inte går in på här) och på SEOTaktik.com ser vi att den exakta tidpunkten skrivs ut.

Någon anledning att skriva ut sådant här två gånger tycker jag inte finns. Dublicerad information tar utrymme och gör saker svårare att få överblick över för besökaren. Jag skulle därför rekommendera att man tar bort utskriften av datum längst ner om den nu finns. Exakt hur det där ser ut i koden kan variera men för SEOTaktik.com finns det i den del som kallas:

<div class='post-footer'>

Och där en bit ner i den här raden (som också kan variera mellan layout):

<a class='timestamp-link' expr:href='data:post.url' rel='bookmark' title='permanent link'><abbr class='published' expr:title='data:post.timestampISO8601'><data:post.timestamp/<</abbr></a>

Beroende på hur det ser ut är det mycket möjligt att du kan ta bort mer kod runt det där.

Mer om Blogger

1 kommentar
Öz sa...

Shit.
Har letat överallt och det är bara du och en till som har lösningen på detta problem.
Jag lyckas dock inte få det att funka för det ser inte riktigt likadant ut i min html-kod som i din.
Kan du hjälpa mig lite?

Min kod i det där området ser ut såhär:
<> ersätts med ()

(b:includable id='post' var='post')

(div class='post uncustomized-post-template')

(div class='title')
(a expr:name='data:post.id'/)
(b:if cond='data:post.title')
(div class='date')(span) (b:if cond='data:post.dateHeader')
(data:post.dateHeader/)
(/b:if) (/span)(/div)
(h2 class='title')
(b:if cond='data:post.link')
(a expr:href='data:post.link')(data:post.title/)(/a)
(b:else/)
(b:if cond='data:post.url')
(a expr:href='data:post.url')(data:post.title/)(/a)
(b:else/)
(data:post.title/)
(/b:if)
(/b:if)
(/h2)


Hur och vad ska jag ändra för att få datum på alla mina inlägg?
Jag är verkligen novis på det här med HTML...

2009-07-03 12:36

Kommentera