Existem muitas maneiras de lidar com modelos. Mas ainda é um grande problema tornar seus modelos fáceis de alterar. Você já fez alguns modelos para WordPress ou outro CMS? Como você se sentiu a respeito?
Imagine um mundo onde você possa usar apenas HTML puro. Sem diretivas especiais nem ajudantes mágicos. Apenas HTML:
<article itemscope itemtype="http://schema.org/BlogPosting">
<header>
<h1 itemprop="name"></h1>
<p class="info">
<time pubdate itemprop="datePublished" datetime=""></time> |
<strong itemprop="articleSection"></strong></p>
</header>
<div itemprop="articleBody"></div>
<footer itemprop="author" itemscope itemtype="http://schema.org/Person">
Author: <strong itemprop="name"></strong> |
<a rel="bookmark" href="#" itemprop="url" title="Permalink">#</a>
</footer>
</article>
Este é um modelo HTML5 típico para uma postagem de blog. Ele usa novos recursos semânticos como seções article
, header
ou footer
, elemento inline time
com pubdate
atributo para indicar a data do artigo e publicar microdados atributos para post .
Agora podemos aproveitar a marcação semântica. Usaremos uma pequena biblioteca para ativar nosso modelo sem tocá-lo.
(use 'net.cgrand.enlive-html)
(defn itemprop [name] (attr= :itemprop name))
(deftemplate blogpost-template "weblog/blogpost.html" [article]
[:article :header (itemprop "name")] (content (get article :title))
[:article (itemprop "articleBody")] (html-content (get article :html))
[:article (itemprop "articleSection")] (content (get article :category))
[:article (itemprop "author") (itemprop "name")] (content (get article :author))
[:article (itemprop "url")] (set-attr :href (get article :url))
[:article (itemprop "datePublished")] (content (long-date article))
[:article (itemprop "datePublished")] (set-attr :datetime (utc-date article)))
Enlive usa CSS como seletores (escritos em sintaxe clojure) e funções de transformação para manipular a marcação do template. Agora o seu webmaster pode alterar os elementos visuais, id
s e class
es, pode adicionar div
s e span
s, mas nosso modelo ainda funcionará. Só porque o uso inteligente de microdados.