Razor i Umbraco, Tips och tricks

By Markus Johansson
2012-01-04

Som jag bloggat om tidigare så kommer Umbraco att släpp stödet för XSLT i version 5, det blir istället fullt fokus på Razor!

 

På sistone har jag bland annat roat mig med att kolla in Doug Robars presentation från CodeGarden 2011 där han pratar om tips och tricks för Umbraco. Jag har också kollat igenom Razor-avsnitten på Umbraco TV – mest för att se om man kunde upptäcka något nytt. Jag antecknande lite smått och gott som jag tänkte bjuda på i detta (och kanske fler) inlägg.

 

Snabbvägen till Documents Types

När du arbetar med ett razor macro och vill komma åt en eller flera child-elements som är av en viss Document Type så kan man använda följande syntax:

@foreach(var node in Model.DocTypeNames) { }

Det sades i någon presentation att man skulle lägga till ett “s” i slutet på namnet på den DocType man ville komma åt men det verkar som att det funkar även utan detta s, i alla fall i version 4.7.1. Låt oss säga att du har en “NewsItemFolder” under första noden i systemet och sedan i denna listar dokument av typen “NewItem”. Då skulle följade lista alla nyheter:

@foreach(var node in Model.NewsItem.First().Children) {
   @node.Name
}


Kapa och lägg till…

Det händer ofta att man bara vill visa delar en sträng, kanske för en sammanfattning eller teaserlista. Det finns inbyggt i @Library.Truncate(). För att kunna använda detta måste du köra V4.7.1, alternativt uppgradera din macromotor genom att kopiera in “umbraco.MacroEngines.dll” från V4.7.1 till din V4.7.0-installation. Så här använder du metoden:

@Library.Truncate("Här skriver vi en massa text som sedan ska kapas", 
10, true);


Det som skrivs ut blir “Här skriver vi en massa t…”. Första parametern är indatan, sedan längden och om man vill att metoden lägger till “…” på slutet.

 

Om det är sant så gör det osv

Att if-statments mitt i razorkoden ser ganska klumpigt ut så därför finns @Library.If() som används så här:

 

@Library.If(true=true, "Skrivs vid sant", 
"Skrivs vid falskt, denna är är inte obligatorisk.");

 

Jag vill göra en breadcrumb

Då ska du använda dig av metoden “Ancestors” som finns på alla DynamicNodes. Så här skriver du för att lista alla “parents” hela vägen upp till root-noden.

@foreach(var node in Model.Ancestors()) {
  @node.Name<br/>
}

 

Detta returnerar alltså alla parents i en fin lista så att man tex. kan göra en breadcrumb.

 

Gruppera mera

En feature som jag verkligen gillar är InGroupsOf(intAntalPerGrupp). Denna kan anropas på alla typer av samlingar och kommer då att returnera objekt av typen “umbraco.MacroEngines.Grouping” som håller alla objekt i samlingen grupperade i grupper enligt parametern. Tex:

@foreach (var groups in Model.Children.InGroupsOf(2))    
{
  foreach (var item in groups)      
  {              
     <a href="@item.Url">@item.Name</a><br />
  }
  // Bryter efter två rader med en hr, hade också kunnat
  // vara text en ny kolumn eller liknande.
  <hr />
}

  

Skulle skriva ut två childs, sedan en hr-tag, två childs, en tag osv osv.

 

Fuska lite

Peter Gregory har skapat ett litet projekt på our.umbraco.org där han sammanställer en liten fusklapp över Umbraco och Razor, Razor DynamicNode Cheat Sheet är klockrent, ladda hem idag!

 

Umbraco _cheatsheet

 

Nu orkar jag inte skriva mer! Tjejen ligger på soffan och vill att vi ska se på “Family guy”. Det finns mer Razor-tips att bjuda på så håll till godo, prenumerera gärna på min RSS men hjälp av tex Outlook eller Google Reader.






More blog posts



15 januari 2021

Umbraco and MiniProfiler