10 ottobre 2008  3

Come numerare automaticamente i commenti con BlogEngine.NET

La numerazione progressiva dei commenti ad un articolo (o post) pubblicato su un blogW assume un ruolo determinante per la loro visualizzazione in maniera ordinata e, soprattutto, per una loro rapida individuazione a livello visivo nel caso in cui non se ne conosca l’indirizzo assoluto normalmente individuato dal permalinkW.

Dal punto di vista implementativo, è abbastanza facile introdurre questa funzionalità ricorrendo direttamente all’ausilio dei tag che mette a disposizione l’HTMLW. Infatti risulta molto semplice inglobare il ciclo di generazione dei commenti, all’interno della coppia di tag <ol> … </ol> che corrispondono appunto alla delimitazione di una lista numerata.

Ciascun blocco di testo che individua un commento dovrà poi essere a sua volta racchiuso tra la coppia di tag <li> … </li>, corrispondenti al singolo elemento di lista.

Il codice corrispondente potrebbe assumere un aspetto del tipo:

<ol>
    <li>Questo è il testo del primo commento ...</li>
    <li>Questo è il testo del secondo commento ...</li>
    <li>Questo è il testo del terzo commento ...</li>
    ...
</ol>

E verrebbe di conseguenza renderizzato dal browser come la seguente lista numerata:

  1. Questo è il testo del primo commento …
  2. Questo è il testo del secondo commento …
  3. Questo è il testo del terzo commento …

I sistemi di blog authoring che possiedono la gestione a livello di codice dell’intero loop dei commenti in un unico file (come ad esempio WordPress), consentono di poter implementare in maniera estremamente agevole l’esempio appena descritto.

Sfortunatamente, BlogEngine.NET ha una gestione che potremo classificare come ibrida, del ciclo appena menzionato.
Infatti è possibile definire tramite il file CommentView.ascx (generalmente contenuto all’interno della cartella del tema utilizzato) il layout del singolo commento, mentre la gestione del loop di stampa e di registrazione degli stessi è demandata al file CommentView.ascx contenuto nella cartella “di sistema/User Controls/.

Quest’ultimo file, generalmente non dovrebbe essere modificato perché fa parte della release del prodotto: questo significa che viene di volta in volta aggiornato con il rilascio di nuove versioni.

Il problema può essere facilmente superato via codice, personalizzando (come è giusto che sia) solo il file CommentView.ascx contenuto nella cartella del tema utilizzato. In tal modo lo si renderà completamente indipendente dalle future release di BlogEngine.NET.

Al tempo stesso è possibile far assumere delle particolari formattazioni alla lista numerica, non applicabili utilizzando il relativo controllo HTML.

E’ sufficiente inserire il seguente frammento di codice inline scritto in c#, nella posizione in cui si vuole fare comparire la numerazione all’interno del file CommentView.ascx (contenuta nel tema utilizzato):

<%= string.Format("{0:00}", 
    ((Post.Comments.IndexOf((BlogEngine.Core.Comment)Comment) > -1) ? 
    (Post.Comments.IndexOf((BlogEngine.Core.Comment)Comment) + 1) : 
    (Post.Comments.Count + 1))) %>

(N.B.: per motivi “tipografici” il codice è stato spezzato su più linee, ma in realtà andrebbe digitato su un’unica riga, pur non pregiudicandone il corretto funzionamento)

L’istruzione condizionale utilizzata ha la valenza di consentire, nel caso si utilizzi la funzionalità di anteprima immediata del commento, l’attribuzione del corretto numero progressivo allo stesso. Il numero mostrato viene formattato con uno zero che precede le unità (es.: 01, 02, …, 09)

Generalmente è buona norma assegnare un permalink al commento in una delle sezioni dello stesso, ad esempio appunto alla sua numerazione progressiva, od alla data (ed ora) di pubblicazione.

Nel primo caso sarà sufficiente modificare il codice come segue:

<a rel="bookmark" title="Permalink" 
   href="<%=Post.RelativeLink %>#id_<%=Comment.Id %>">
   <%= string.Format("{0:00}",
     ((Post.Comments.IndexOf((BlogEngine.Core.Comment)Comment) > -1) ?
      (Post.Comments.IndexOf((BlogEngine.Core.Comment)Comment) + 1) :
      (Post.Comments.Count + 1))) %>
</a>

(N.B.: per motivi “tipografici” il codice è stato spezzato su più linee, ma in realtà andrebbe digitato su un’unica riga, pur non pregiudicandone il corretto funzionamento)

La strategia utilizzata è naturalmente una base di partenza per poter effettuare tutte le personalizzazioni del caso: dalla formattazione in cifre della numerazione, all’aspetto grafico della stessa rispetto al contenuto del commento, creando delle opportune classi CSS da applicare ai tag HTML utilizzati.

Esprimi il tuo giudizio

Commenti (3) -

Davide Espertini
Davide Espertini
12 ott 2008 alle 17:20  01
Ottimo micro tutorial Cristiano!!
Grande!
Sworks69
Sworks69
14 ott 2008 alle 10:52  02
Lo proverò sicuramente!!!
per adesso sto impazzendo con SQLite

ciao!
Marco
Marco
23 apr 2009 alle 12:16  03
Com'è possibile personalizzare la parte dei commenti come in questo sito? Il file in questione è CommentView.ascx?
Grazie

Aggiungi Commento

biucitecode
  • Commento
  • Anteprima
Loading


| |   |  

Codice QR

Codice QR - cristianofino.net

Ultimi Commenti