Publicaciones relacionadas con miniaturas en BlogEngine.net
Hoy veamos juntos cómo insertar una imagen (miniaturas) en las publicaciones relacionadas de BlogEngine.net como vista previa de las publicaciones.
Vamos a abrir el archivo RelatedPosts.cs presente en la carpeta App_Code / Controls y realice los siguientes pasos.
Apoyamos la siguiente función Crear lista:
private void CreateList(IEnumerable<IPublishable> relatedPosts) { var sb = new StringBuilder(); const string LinkFormat = "<a href="{0}">{1}</a>"; const string DescriptionFormat = "<span>{0}</span>"; sb.Append("<div id="relatedPosts">"); sb.Append("<h3>+++</h3>"); sb.Append("<div>"); var count = 0; foreach (var post in relatedPosts) { if (post != this.Item) { sb.Append(string.Format(LinkFormat, post.RelativeLink, HttpUtility.HtmlEncode(post.Title))); if (this.ShowDescription) { var description = post.Description; if (description != null && description.Length > this.DescriptionMaxLength) { description = string.Format("{0}...", description.Substring(0, this.DescriptionMaxLength)); } if (String.IsNullOrEmpty(description)) { var content = Utils.StripHtml(post.Content); description = content.Length > this.DescriptionMaxLength ? string.Format("{0}...", content.Substring(0, this.DescriptionMaxLength)) : content; } sb.Append(string.Format(DescriptionFormat, description)); } count++; } if (count == this.MaxResults) { break; } } sb.Append("</div>"); sb.Append("</div>"); RelatedPostsCache[this.Item.Id] = sb.ToString(); }
Con esta nueva versión:
private void CreateList(IEnumerable<IPublishable> relatedPosts) { var sb = new StringBuilder(); string image = "<a href="{0}">{1}</a>"; const string LinkFormat = "<a href="{0}">{1}</a>"; const string DescriptionFormat = "<span>{0}</span>"; sb.Append("<div id="relatedPosts">"); sb.Append("<h1>+++</h1>"); sb.Append("<br /><table><tr>"); var count = 0; foreach (var post in relatedPosts) { if (post != this.Item) { sb.Append("<td style="width:110px" valign="top">"); sb.Append(string.Format(image,post.RelativeLink, getImage(true,post.Content,HttpUtility.HtmlEncode(post.Title)))); sb.Append(string.Format(LinkFormat, post.RelativeLink, HttpUtility.HtmlEncode(post.Title))); if (this.ShowDescription) { var description = post.Description; if (description != null && description.Length > this.DescriptionMaxLength) { description = string.Format("{0}...", description.Substring(0, this.DescriptionMaxLength)); } if (String.IsNullOrEmpty(description)) { var content = Utils.StripHtml(post.Content); description = content.Length > this.DescriptionMaxLength ? string.Format("{0}...", content.Substring(0, this.DescriptionMaxLength)) : content; } } sb.Append("</td>"); count++; } if (count == this.MaxResults) { break; } sb.Append("</tr></table>"); sb.Append("</div>"); RelatedPostsCache.Add(this.Item.Id, sb.ToString()); }
Finalmente sumamos las dos funciones Obtener la imagen es GetSrc útil para insertar el nuestro Miniaturas entre las publicaciones relacionadas:
public string getImage(bool ShowExcerpt, string input, string Titolo) { if (!ShowExcerpt || input == null) return ""; string pain = input; string pattern = @"<img(.|n)+?>"; System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(input, pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline); if (m.Success) { string src = getSrc(m.Value); string img = string.Format("<img width="95" height="88px" class="left" align='left' alt="" + Titolo + "" style="background:#F0F0F0; border:none; padding:5px; border-right:1px solid #ccc; border-bottom:1px solid #ccc;" {0} />", src); return img; } else { return ""; } } string getSrc(string input) { string pattern = "src=['|"](.+?)['|"]"; System.Text.RegularExpressions.Regex reImg = new System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline); System.Text.RegularExpressions.Match mImg = reImg.Match(input); if (mImg.Success) { return mImg.Value; } return ""; }
En conclusión, hemos agregado la función Obtener la imagen en CreateList y reemplazó
<blog:RelatedPosts runat="server" ID="related" MaxResults="5" ShowDescription="false" DescriptionMaxLength="100" Headline="Potrebbe interessarti anche:" Visible="false" /> >
Básicamente cambiamos el valor de MaxResults de 3 a 5 (este es el número de enlaces con imágenes que queremos que aparezcan entre las publicaciones relacionadas), establezca ShowDescription en falso e ingrese el valor Titular, útil para personalizar el título de publicaciones relacionadas: en nuestro caso «También te puede interesar:».
Espero no haberme olvidado de nada, de todas formas estoy adjuntando el archivo RelatedPosts.cs (10.08 kb) (Antes de reemplazarlo, siempre haga una copia de seguridad del original).
Hola al prox.