In un'applicazione basata su un CMS che prevede un'anteprima del contenuto da visualizzare, è possibile utilizzare una funzione che tronca in maniera intelligente il contenuto di un campo.
Ipotizziamo di avere un repeater (strumento molto versatile e utile per avere una pubblicazione personalizzata di dati da un Data Source) che ha il compito di pubblicare solo un'anteprima del contenuto di una notizia.
La sorgente dati prevede due campi che per semplicità chiamiamo "titolo" e "contenuto".
Nel itemtemplate del repeater mettiamo le due label che si occuperanno di rendere a video il nostro contenuto dinamico.
Il codice, molto semplificato sarà:
Ipotizziamo di avere un repeater (strumento molto versatile e utile per avere una pubblicazione personalizzata di dati da un Data Source) che ha il compito di pubblicare solo un'anteprima del contenuto di una notizia.
La sorgente dati prevede due campi che per semplicità chiamiamo "titolo" e "contenuto".
Nel itemtemplate del repeater mettiamo le due label che si occuperanno di rendere a video il nostro contenuto dinamico.
Il codice, molto semplificato sarà:
<asp:Repeater ID="Repeater_anteprima_pagina" runat="server" DataSourceID="ADS_titolo_sezione">Come si nota il testo delle due label è dinamico e viene utilizzato il metodo EVAL. Solo nella Label dedicata al contenuto il testo dinamico presenta delle differenze dall'applicazione del metodo classico.
<ItemTemplate>
<asp:Label ID="Label_titolo" runat="server" Text='<%# Eval("titolo") %>'></asp:Label>
<asp:Label ID="Label_contenuto" runat="server" Text='<%# tronca(Eval("contenuto"),500) %>'/>
</ItemTemplate>
</asp:Repeater>
Text='<%# tronca(Eval("contenuto"),500) %>'
Nel code-behind vediamo cosa è strutturata questa funzione chiamata tronca.
Function tronca(ByVal input As String, ByVal lunghezza As Integer)
Dim output As String = input
Dim ultimospazio As Integer
If output.Length > lunghezza And lunghezza > 0 Then
output = output.Substring(0, lunghezza)
If input.Substring(output.Length, 1) = " " Then
output = output & "...>>>"
Else
ultimospazio = output.LastIndexOf(" ")
If ultimospazio = -1 Then
output = output & "...>>>"
Else : output = output.Substring(0, ultimospazio) & " ... "
End If
End If
End If
Dim strOutput As String
Dim opzioni As New Regex("<(.|\n)+?>")
strOutput = opzioni.Replace(output, "")
strOutput = Replace(strOutput, "<", "<")
strOutput = Replace(strOutput, ">", ">")
output = strOutput
Return output
End Function
Come si può notare la funzione prevede due valori in ingresso: l'input che è una stringa (il contenuto findamentalmente) e lunghezza che è il valore che è stato espresso quando è richiamata la funzione (nel nostro esempio 500).
La funzione come primo passo individua se la stringa da esaminare è più lunga della lunghezza desiderata. Se si, la stringa viene subito tagliata alla lunghezza desiderata con il metodo Substring. Successivamente, esamina se l'ultimo carattere della stringa tagliata è uno spazio. Se affermativo, agguinge la stringa "...>>>" che dà l'idea della continuazione della stringa stessa. In caso negativo, ricerca dal fondo della substringa la prima occorrenza del carattere spazio, lo indicizza e taglia nuovamente la stringa a quel valore.
Successivamente la funzione esamina la stringa in uscita per verificare la presenza di caratteri html (nel caso in cui si fosse riempito il contenuto con strumenti tipo Rich Text), li reinterpreta in modo che in video possano essere interpretati correttamente.
Tale funzione permette 2 risultati importanti:
- tronca il contenuto allo spazio, in modo da non interrompere la frase sul più bello
- reinterpreta i caratteri html in modo che la frase non si tronchi all'interno di un tag html, impedendo la giusta reinterpretazione a video.
Nessun commento:
Posta un commento