martedì 9 febbraio 2010

Lyra, tipo di contenuto 'pagina'

Chi ha familiarità con Wordpress o Drupal conosce la differenza tra articolo (story in Drupal) e pagina. Un concetto grosso modo analogo è presente in Joomla che distingue i contenuti standard dai contenuti statici (Joomla 1.0) o dai contenuti non categorizzati (Joomla 1.5). Chi non sapesse invece di cosa si sta parlando troverà un'ottima spiegazione in questo articolo di Html.it.

La ragione di questa distinzione è semplice: in molti casi (in un blog, ma anche nei siti che pubblicano notizie come quotidiani online e simili) è utile gestire in modo diverso gli articoli veri e propri che contengono informazioni 'datate' e i contenuti che contengono informazioni meno sensibili al decorrere del tempo e quindi in un certo senso più 'statiche': ad esempio una pagina con il profilo dell'autore del blog, la descrizione o l'organico dell'azienda.

Anche il modo in cui sono presentate queste due categorie di contenuti è spesso diverso: di regola un articolo contiene l'indicazione della data di pubblicazione e dell'autore, mentre queste informazioni non sono mostrate in una pagina; gli articoli sono presentati in ordine cronologico in prima pagina o nella pagina della rispettiva categoria, mentre le pagine sono accessibili da link o menù; anche il formato delle URL può essere diverso.

E se volessimo creare qualcosa del genere in Lyra? Arrivati a questo punto non è difficile farlo: basterà creare un nuovo tipo di contenuto, page, tanto per non stare ad inventarci nomi diversi, anch'esso gestito dallo stesso modello e modulo che già utilizziamo per il contenuto article.

In effetti le differenze tra articoli e pagine non sono tanto rilevanti da giustificare la creazione di modelli separati: ci basta 'clonare' un tipo di contenuto esistente e sfruttare i parametri di configurazione (vedere Lyra, parametri di configurazione articoli) per differenziare l'apetto degli articoli e delle pagine.

Per prima cosa ho inserito un nuovo record nella tabella content_types nel file con i dati di esempio.

data/fixtures/content_types.yml

LyraContentType:
  ...
  Pagina:
    name: Page
    type: page
    module: article
    model: LyraArticle
    ...

Ho modificato il file routing.yml del backend perché a questo punto fa comodo avere l'ID del tipo di contenuto nella rotta

apps/backend/config/routing.yml
...
lyra_article:
  class: sfDoctrineRouteCollection
  options:
    model:                LyraArticle
    module:               article
    prefix_path:          /article/:ctype_id
    column:               id
    object_actions:
      publish: get
      unpublish: get
      feature: get
      unfeature: get
    with_wildcard_routes: true
...

e pure quello del frontend per differenziare il formato delle URL di articoli e pagine

apps/frontend/config/routing.yml

page_show:
  url: /:slug.html
  class: sfDoctrineRoute
  options:
    type: object
    model: LyraArticle
    method: findItem
  param:
    module: article
    action: show
  requirements:
    sf_method: [get]

I parametri del nuovo tipo di contenuto possono essere impostati dal backend, ad esempio possiamo modificare l'aspetto del contenuto pagina in modo da non mostrare autore e data di creazione e non consentire i commenti.

Altre modifiche si possono vedere nel log della revisione 41. Il tutto richiede un po' di lavoro manuale, ma è possibile che in futuro queste operazioni possano essere gestite direttamente dal backend.

Nessun commento:

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.