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.

0 commenti:
Posta un commento