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.