Há pouco tempo fui contactado por uma empresa para que um anúncio aparecesse apenas na barra lateral da Home Page. Então, eu tive que criar um widget personalizado para ser colocado apenas na página inicial.
Então comecei a vasculhar os meandros do fórum em BlogEngine.Net para tentar encontrar algo que me permitisse criar várias zonas de widget: widgets diferentes e diferentes entre a página inicial e postagens individuais.
Um artigo interessante é o de Ben's Quarters que explica muito bem os Widgets de Multiple Widgetzone para Temas no BlogEngine.Net: Multiple Widgetzone em BE.
O problema é que meu tema é um tema de navalha, para o qual o assunto era tremendamente complicado, uma vez que se trata de arquivos com a extensão chstml e não aspx ou ascx (o Razor foi criado pela Microsoft com o objetivo de obter um layout compacto e expressivo). Tentei pedir ajuda ao fórum BE.Net, tentando definir um único widget com o anúncio necessário na página inicial para ocultá-lo nas páginas e postagens.
Praticamente todo widget tem um ID, configurando o ID do widget para visible = true na página inicial e para visible = false nas outras seções, eu poderia ter resolvido o problema, mas para o tema do razor não há widgetContainer, então tive que criar um widget de zona múltipla personalizado para o home e para páginas e posts.
Basicamente, aqui está como eu fiz:
@if (Request.Url.ToString (). ToLowerInvariant (). Contém ("/ default.aspx")) {if (Request.RawUrl.ToLowerInvariant (). Contém ("/ categoria /") || Request.RawUrl. ToLowerInvariant (). Contains ("/ author /") || Request.RawUrl.ToLowerInvariant (). Contains ("? Tag =") || Request.QueryString ["year"]! = Null || Request.QueryString [" data "]! = null || Request.QueryString [" calendar "]! = null) { @ Html.Raw (Html.RenderWidgetZone ("page-sidebar")) } else {@ Html.Raw (Html.RenderWidgetZone ("be_WIDGET_ZONE"))}} else { @ Html.Raw (Html.RenderWidgetZone ("page-sidebar")) }
Eu criei no arquivo principal do meu tema, no meu caso Site.Cshtml, uma condição na qual eu digo ao sistema que se a página em que estou for diferente da Home Page, "page-sidebar" é a zona do widget para use como uma barra lateral, caso contrário, você pode usar com segurança “be_WIDGET_ZONE”.
Me ajudando com o CSS tudo o que fiz foi usar o id “siderbar-page” para definir as cores, formas e fontes dos novos widgets.
Além da possibilidade de criar duas barras laterais diferentes com widgets diferentes para páginas, artigos, Home Page, etc. .. também é possível criar zonas de widgets dentro da barra lateral. Por exemplo, se quisermos zonas de widget diferentes dentro da barra lateral, podemos criar um midWidget e um bottomWidget, sempre nos ajudando com CSS:
@ Html.Raw (Html.RenderWidgetZone ("be_WIDGET_ZONE")) @if (Request.Url.ToString (). ToLowerInvariant (). Contains ("default.aspx") || Request.Url.ToString (). ToLowerInvariant (). Contains ("blog.aspx")) { @ Html.Raw (Html.RenderWidgetZone ("be_WIDGET_MID")) } @ Html.Raw (Html.RenderWidgetZone ("be_WIDGET_BOTTOM"))