
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Umbraco bloggen, webbutveckling, design tips och ticks.</title><link>http://www.enkelmedia.se</link><pubDate>Fri, 18 May 2012 06:03:00 GMT</pubDate><generator>umbraco</generator><description>En blogg om webbutveckling och webbdesign med fokus på ASP.NET och Umbraco CMS.</description><language>sv</language><atom:link href="http://www.enkelmedia.se/blogg/rss.aspx" rel="self" type="application/rss+xml" /><item><title>Session på CodeGarden 2012</title><link>http://www.enkelmedia.se/blogg/2012/5/18/session-pa-codegarden-2012.aspx</link><pubDate>Fri, 18 May 2012 06:03:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2012/5/18/session-pa-codegarden-2012.aspx</guid><description><![CDATA[<p>Jag är väldigt stolt (och nästan lite nervös) över det faktum att jag ska hålla i en kort session på årets stora Umbracoevent, <a href="http://codegarden12.com/" target="_blank">Code Garden 2012</a>, som hålls 13-15 juni i Köpenhamn.</p>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/10746/newsletterstudio.jpg" width="580" height="404" alt="Newsletterstudio"/></p>
<p> </p>
<p>Jag kommer att demonstrera Enkel Medias paket <a href="http://our.umbraco.org/projects/backoffice-extensions/newsletter-studio" target="_blank">Newsletter Studio</a> som en del i en "<a href="http://codegarden12.com/sessions/day-two/slot-one/lightning-deli-delights.aspx" target="_blank">Lighting session</a>" som hålls dag två. För dig som aldrig hört om Newsletter Studio så är detta en "plugin" till Umbraco som gör det möjligt för redaktörer att skicka nyhetsbrev direkt via samma gränssnitt som man utför övriga uppgifter som är relaterade till hemsidan.</p>
<p> </p>
<p>Du som ska till Köpenhamn på Code Garden borde ta kontakt med medlemmarna i <a href="http://www.uugs.se" target="_blank">UUGS</a> som kommer att träffas under konferensen.</p>]]></description></item><item><title>Vad är nytt i Umbraco 4.7.2?</title><link>http://www.enkelmedia.se/blogg/2012/5/15/vad-ar-nytt-i-umbraco-472.aspx</link><pubDate>Tue, 15 May 2012 07:04:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2012/5/15/vad-ar-nytt-i-umbraco-472.aspx</guid><description><![CDATA[<p><img src="http://www.enkelmedia.se/media/10720/umbracomembers.png" width="188" height="163" alt="Umbracomembers" style="float: right;"/>Det korta svaret är att det inte är några nyheter i Umbraco 4.7.2, störst fokus har enligt teamet legat på att stabilisera existerande funktioner och optimera prestandan, några av de saker som förbättrats är:<br /><br /></p>
<ul>
<li>Medlemshanteringen har ändrats så att den lutar sig mer åt .NETs egen MembershipProvider, detta är endast interna ändringar som inte påverkar själva APIn.</li>
<li>Ökad prestanda och stabilitet i motorn för förhandsvisning.</li>
<li>Ny inställning för att hålla användare inloggade i backoffice finns i umbracoSettings.config, /settings/security/keepUserLoggedIn. Denna är satt till true, om man vill ha automatisk utloggning, sätt den till false.</li>
<li>Förbättringar och optimeringar av Razor implementationen.</li>
<li>Upp till 80% bättre prestanda för den som använder SQLCE.</li>
</ul>
<h4><br />Så uppgraderar du</h4>
<p>För att göra en uppgradering kopierar du helt enkelt in katalogerna /bin,/umbraco &amp; /umbraco_client. Kom dock ihåg att vissa tredjepartspaket sparas i dessa mappar.<br /><br />Umbraco 4.7.2 laddas enklast ned på CodePlex: <a href="http://umbraco.codeplex.com/releases/view/81011" target="_blank">http://umbraco.codeplex.com/releases/view/81011</a><br /><br /></p>
<h4>Vill du slippa få upp meddelandet i backoffice?</h4>
<p>Det finns såklart tillfällen när man väljer att inte uppgradera och då kan jag rekommendera en inställning som gör att "påminnelsen" i backoffice inte hoppar fram varje gång man loggar in.<br /><br />Öppna web.config och gör följande inställning:</p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: xml">&lt;add key="umbracoVersionCheckPeriod" value="0" /&gt;</pre>
</div>
<p><br /><br /></p>]]></description></item><item><title>Umbraco och umbracoDebugMode</title><link>http://www.enkelmedia.se/blogg/2012/3/28/umbraco-och-umbracodebugmode.aspx</link><pubDate>Wed, 28 Mar 2012 07:36:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2012/3/28/umbraco-och-umbracodebugmode.aspx</guid><description><![CDATA[<p>Har tidigare skrivit ett blogginlägg om saker att tänka på när man sätter ut sin <a href="http://www.enkelmedia.se/{localLink:1446}" title="Umbraco i produktionsmiljö">Umbraco-sajt i produktionsmiljö</a>. Tyvärr är det för få som läst den bloggposten =D Jag ser flera riktigt stora implementationer av Umbraco som ligger ute på nätet med stora säkerhetshål, vidöppna för hackers att frossa i.</p>
<p> </p>
<p>Det här inlägget tänkte jag ägna åt att berätta om debugging. När man utvecklar sin hemsida i <a href="http://www.enkelmedia.se/{localLink:1605}" title="Umbraco CMS">Umbraco</a> så kan man använda sig av olika typ av debugfunktionalitet, dessa features är endast avseda att användas vid utveckling, i produktion (dvs. när hemsidan ligger live på internet) så ska debugfunktionerna inaktiveras av två skäl:</p>
<p> </p>
<h4>Säkerhet</h4>
<p>Att ha debugfunktionerna aktiverade gör att en hacker kan använda "<strong>umbDebugShowTrace=true</strong>" för att visa sidans trace information (se bild nedan), den bjuder på en hel del information om sajten, denne hacker kan också använda "<strong>umbDebug=true</strong>" för att visa sidan struktur och vart alla makron är placerade.</p>
<p> </p>
<h4>Prestanda</h4>
<p>I debugläget så läger ASP.NET energi på att skapa debuginformation, att stänga av debugfunktionerna i produktionsmiljö ökar din sajts prestanda.</p>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/10041/traceinfo_74065c55-e1cf-4ae1-81d0-4b5e6d407af5.jpg" width="619" height="480" alt="Traceinfo _74065c 55-e 1cf -4ae 1-81d 0-4b 5e 6d 407af5"/></p>
<p><em>Användandet av umbDebugShowTrace från <a href="http://www.richardsoeteman.net/" target="_blank">http://www.richardsoeteman.net</a></em></p>
<p> </p>
<h4>Hur gör man då?</h4>
<p>Det är väldigt enkelt att inaktivera debugging i ASP.NET och Umbraco, två enkla inställningar i web.config:</p>
<p> </p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: xml">&lt;appSettings&gt;
    ....
    &lt;add key="umbracoDebugMode" value="false" /&gt;
&lt;appSettings&gt;
</pre>
</div>
<p> </p>
<p>och så den här:</p>
<p> </p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: xml">&lt;compilation defaultLanguage="c#" debug="false" batch="false" targetFramework="4.0"&gt;</pre>
</div>
<p><br />Glöm inte det här nästa gång du lanserar en hemsida med Umbraco som grund!</p>]]></description></item><item><title>XML-sitemap från Umbraco CMS</title><link>http://www.enkelmedia.se/blogg/2012/3/26/xml-sitemap-fran-umbraco-cms.aspx</link><pubDate>Mon, 26 Mar 2012 08:22:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2012/3/26/xml-sitemap-fran-umbraco-cms.aspx</guid><description><![CDATA[<p>Jag tänkte göra en liten serie med tips på bra paket till <a href="http://www.enkelmedia.se/{localLink:1605}" title="Umbraco CMS">Umbraco</a>! Idag sätter vi igång med paket för att generera en XML-sitemap. Denna sitemap är till största delen till för sökmotorerna och hjälper dem att hitta till innehåll på din hemsida.</p>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/9971/seositemap-xml.jpg" width="500" height="370" alt="Seositemap -xml"/></p>
<p> </p>
<p>För att visa sökmotorerna att du har en sitemap bör du lägga till följande rad i din <a href="http://www.robotstxt.org/" target="_blank">robots.txt</a>:</p>
<p> </p>
<p>Sitemap: <a href="http://www.enkelmedia.se/seositemap.aspx" target="_blank">/seositemap.aspx</a></p>
<p> </p>
<p>Självklart måste du ändra domän och sökväg till den som innehåll just din sitemap. Ett annat sätt att lägga till sin sitemap är att använda <a href="https://www.google.com/webmasters/tools/home?hl=sv" target="_blank">Googles verktyg för webbansvariga</a>. Där kan du också kontrollera så att din XML-sitemap är korrekt och inte innehåller några fel.</p>
<p><img src="http://www.enkelmedia.se/media/9976/seositemap-google.jpg" width="530" height="178" alt="Seositemap -google"/></p>
<p>En sitemap är ett textdokument i XML-format, man kan enkelt skapa dem själv men ännu enklare är att göra det automatiskt. När det kommer till <a href="http://www.enkelmedia.se/{localLink:1605}" title="Umbraco CMS">Umbraco</a> så finns det ett <a href="http://our.umbraco.org/search?q=sitemap&amp;content=project," target="_blank">bra gäng färdiga paket</a>, jag tänkte tipsa om några av mina favoriter:</p>
<p> </p>
<ul>
<ul>
<li>
<p><a href="http://our.umbraco.org/projects/website-utilities/cultiv-search-engine-sitemap" target="_blank">Cultiv seach engine sitemap</a><br />Grymt paket från <a href="https://twitter.com/#!/cultiv" target="_blank">Sebastiaan Janssen</a> som genererar en smidig sitemap, här kan du också ställa in olika parametrar som searchEngineSitemapChangeFreq och searchEngineSitemapPriority.</p>
</li>
<li>
<p><a href="http://our.umbraco.org/projects/website-utilities/google-sitemap-for-umbraco-4-%28jespercom%29" target="_blank">Google Sitemap for Umbraco</a><br />Av danska <a href="https://twitter.com/#!/jesperordrup" target="_blank">Jesper Ordrup</a>, ett superenkelt paket som genererar en sitemap.</p>
</li>
</ul>
</ul>
<p> </p>
<p> </p>
<p> </p>]]></description></item><item><title>Microformats</title><link>http://www.enkelmedia.se/blogg/2012/3/23/microformats.aspx</link><pubDate>Fri, 23 Mar 2012 14:14:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2012/3/23/microformats.aspx</guid><description><![CDATA[<p>Idag har jag arbetat en hel del med att uppdatera denna sida, enkelmedia.se. Bland annat har vi byt ut kommentarsfunktionen i <a href="http://www.enkelmedia.se/%7BlocalLink:1245%7D" target="_blank" title="Blogg">Umbraco bloggen</a> till att använda <a href="http://disqus.com/" target="_blank">Disqus</a> istället för <a href="http://developers.facebook.com/docs/plugins/" target="_blank">Facebooks Social Plugins</a>. Tanken är att det ska bli enklare att kommentera och interagera med sajten.</p>
<p> </p>
<p>Samtidigt så gjorde vi också endel tillägg "under huven" och utökade vår användning av så kallade <strong>microformats</strong>. Dessa är små taggar o koden som gör att maskiner (ofta sökmotorer) kan förstå vad som är vad på en hemsida, att bara skriva ut adressen förklarar inte för en maskin att det faktiskt är en adress. Vi ändrade bland annat mikroformats på vår <a href="http://www.enkelmedia.se/%7BlocalLink:1370%7D" title="Kontakt">kontaktsida</a>. Nu ser koden ut ungefär så här:</p>
<p> </p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: xml">&lt;div class="vcard"&gt;
   &lt;p&gt;&lt;span class="tel"&gt;08 - 53 33 27 26&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
   &lt;h4&gt;Adress&lt;/h4&gt;
   &lt;p class="fn org"&gt;Enkel Media Stockholm AB&lt;/p&gt;   
   &lt;div class="adr"&gt;
   &lt;p class="street-address"&gt;Västgötagatan 22&lt;/p&gt;
      &lt;p&gt;
         &lt;span class="postal-code"&gt;118 27&lt;/span&gt; 
         &lt;span class="locality"&gt;Stockholm&lt;/span&gt;
      &lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;</pre>
</div>
<p> </p>
<p>Där vi börjar med en div-tag som innehåller klassen "vcard" vilket talar som att här börjar ett <a href="http://microformats.org/wiki/hcard" target="_blank">hCard</a>. vcard blir till hCard? Fråga mig inte vem som kom på den logiska kopplingen. Sedan använder vi olika klass-värden för att tala om olika saker för den maskin som vill lära vårt microformat.</p>
<p> </p>
<ul>
<li><strong>tel </strong>- Telefonnummer</li>
<li><strong>fn org </strong>- Talar om att det är en organisation och vad den heter. Om man vill ha personlig kontaktinfo skiv bara "fn".</li>
<li><strong>adr </strong>- Inleder en adress</li>
<li><strong>street-address</strong> - Gatuadress</li>
<li><strong>postal-code</strong> - Postnummer</li>
<li><strong>locality </strong>- Stad</li>
</ul>
<p> </p>
<p>Det finns en massa intressant läsning om <em>microformats</em> och <a href="http://microformats.org/wiki/hcard" target="_blank">hCards</a>, men även en smidig tjänst där du kan <a href="http://microformats.org/code/hcard/creator" target="_blank">skapa ditt eget hCard</a>. När du lagt upp ditt hCard kan du validara det med hjälp av <a href="http://hcard.geekhood.net" target="_blank">Geekhood.net</a>.</p>]]></description></item><item><title>Sökmotoroptimering mina tips och tricks</title><link>http://www.enkelmedia.se/blogg/2012/3/19/sokmotoroptimering-mina-tips-och-tricks.aspx</link><pubDate>Mon, 19 Mar 2012 08:05:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2012/3/19/sokmotoroptimering-mina-tips-och-tricks.aspx</guid><description><![CDATA[<p><img src="http://www.enkelmedia.se/media/8138/search-engine-marketing.jpg" width="331" height="338" alt="Search -Engine -Marketing"/><br /><br />Arbetet med <a href="http://www.enkelmedia.se/{localLink:1195}" title="Sökmotoroptimering">sökmotoroptimering</a> är tidskrävande och ibland kan det vara svårt att veta vad som funkar och vad som inte funkar. Jag skulle inte vilja kalla mig för expert på området (gillar inte att överdriva), men jag har i alla fall hyfsat koll.</p>
<p> </p>
<p>När det gäller SEO så kan man grovt dela in det i optimering "on site" och optimering "off site" där den sistnämnda fått större och större betydelse med åren. Ingen vet exakt vilken del som är viktigast, troligen är de lika viktiga, off site är extra viktigt om de ord du vill förknippas med är extra utsatta för konkurrens.</p>
<h4><br />On site</h4>
<p>Denna optimering är den där du som sajtägare har störst kontroll. Det handlar om allt från att koda hemsidan rätt till att framför allt skapa relevant och attraktivt innehåll, detta är något jag som <a href="http://www.enkelmedia.se/{localLink:1193}" title="Webbutveckling">webbutvecklare</a> arbetar med dagligen.</p>
<p> </p>
<h4>Off site</h4>
<p>Att optimera off site handlar i stort om att skaffa inlänkar till hemsidan från andra sidor. Ju högre <a href="http://sv.wikipedia.org/wiki/Pagerank" target="_blank">PageRank</a> sajten som länkar har dessto mer värde ger länken i Google och andra sökmotorers ögon.</p>
<p> </p>
<p> </p>
<h4>Bra verktyg och bloggar</h4>
<p>Jag tänkte dela med mig av lite länkar som jag ofta använder.</p>
<p> </p>
<ul>
<li>Leta efter lämpliga sökord med <a href="https://adwords.google.com/o/Targeting/Explorer?__c=1000000000&amp;__u=1000000000&amp;ideaRequestType=KEYWORD_IDEAS" target="_blank">Google Keyword Tool</a></li>
<li>Testa placering i Google med denna sajt: <a href="http://gserp.se/" target="_blank">http://gserp.se/</a></li>
<li>Läs Nikke Lindqvist blogg om <a href="http://www.lindqvist.com/sokmotoroptimering/" target="_blank">sökmotoroptimering</a>.</li>
<li>Läs den här artikeln, <a href="http://www.seomoz.org/blog/99-ways-to-build-links-by-giving-stuff-away-and-improve-your-brand-too-14029" target="_blank">99 tips till att få inlänkar</a>.</li>
<li>Surfa på sajten med sökmotorns ögon, använd <a href="http://www.domaintools.com/seo-browser/" target="_blank">Seo Browser</a>.</li>
<li>Pinga din blogg för gratis inläkar, använd <a href="http://www.twingly.com/customers" target="_blank">Twingly</a></li>
<li><a href="http://www.google.se/webmasters/" target="_blank" title="Googles verktyg för webbansvariga är smidigt">Google Verktyg för webbansvariga</a> är alltid smitidigt</li>
<li>Se vilka som länkar till dig med <a href="http://www.opensiteexplorer.org" target="_blank">Open Site Explorer</a></li>
<li>Använd webbyrån Pineberrys grymma <a href="http://www.pineberry.com/analysverktyg/" target="_blank">analysverktyg</a></li>
<li>Eller <a href="http://www.keyworddensity.com/search_engine_optimization/keyword_density.cgi" target="_blank">denna sida</a> som ger mer exakt information om textinnehållet.</li>
</ul>
<p> </p>]]></description></item><item><title>5 iPhone-appar som rockar</title><link>http://www.enkelmedia.se/blogg/2012/3/8/5-iphone-appar-som-rockar.aspx</link><pubDate>Thu, 08 Mar 2012 07:12:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2012/3/8/5-iphone-appar-som-rockar.aspx</guid><description><![CDATA[<p>Det här är blogginlägget som jag önskar att någon skrev till mig för några år sedan när jag skaffade en iPhone. Det finns en miljard olika appar, de flesta är rent skräp, men här tänkte jag dela med mig av några appar som jag använder dagligen.</p>
<p> </p>
<h4>1. iCatcher</h4>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/8043/icatecher.jpg" width="320" height="480" alt="I Catecher" style="border: 3px solid #BABABA;"/></p>
<p> </p>
<p>För den som vill hålla sig uppdaterad om det senaste i utvecklingsvärlden så kan jag starkt rekommendera att lyssna på podcasts! Det är små radioprogram som man kan lyssna på när som helst man vill. Själv gör jag det ofta när jag ska promenera, eller om jag sitter i bilen! Mina favoriter är <a href="http://www.dotnetrocks.com/" target="_blank">.NET rocks</a> och <a href="http://hanselminutes.com/" target="_blank">Hanselminutes</a> som båda är amerikanska shower med inriktining på webb/.NET.</p>
<p> </p>
<p><a href="http://itunes.apple.com/us/app/icatcher!-podcast-catcher/id414419105?mt=8" target="_blank">iCatcher på Itunes</a></p>
<p> </p>
<h4>2. Week Calendar</h4>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/8048/week_calendar.jpg" width="320" height="480" alt="Week Calendar" style="border: 3px solid #BABABA;"/></p>
<p> </p>
<p>Appen för den som gillar planering. Den har flera olika vyer för presenation av kalendern, vecka, månad, arbetsvecka osv osv. Min favorit är den ovan, den liknar orginalkalendern från iOS, men de små prickarna på varje datum indikerar hur många saker som är planerat denna dag - den lilla detaljen var lätt värd pengarna för att köpa appen.</p>
<p> </p>
<p><a href="http://itunes.apple.com/se/app/week-calendar/id381059732?mt=8" target="_blank">Week Calendar på Itunes</a></p>
<p> </p>
<h4>3. MobileRSS</h4>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/8053/mobilerss.jpg" width="320" height="480" alt="Mobile Rss" style="border: 3px solid #BABABA;"/></p>
<p> </p>
<p>Att läsa bloggar är ett väldigt bra sätt att hålla sig uppdaterad, jag har själv har ett konto på <a href="http://www.google.com/reader" target="_blank">Google Reader</a>, som samlar alla mina favoritbloggar på ett ställe. Appen MobileRSS kan synca med Google Reader och ger ett riktigt snyggt sätt att läsa sina favoritbloggar på både iPhone och iPad. Rekommenderas starkt!</p>
<p> </p>
<p><a href="http://itunes.apple.com/us/app/mobilerss-free-google-rss/id333925239?mt=8" target="_blank">MobileRSS på Itunes</a></p>
<p> </p>
<h4>4. Evernote</h4>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/8058/evernote.jpg" width="320" height="480" alt="Evernote" style="border: 3px solid #BABABA;"/></p>
<p> </p>
<p><a href="http://www.evernote.com" target="_blank">Evernote</a> är en onlinetjänst som kan samla alla dina anteckningar, foton och ljudinspelningar från tex möten, brainstorms osv. Perfekt sätt att spara ned anteckningar, ta ett kort på en skisstavla osv. Allt samlas på ett och samma ställe. Det finns också en desktop-version av tjänsten (både PC och Mac) som syncar anteckningarna, du kan också använda tjänsten i browsern - dvs Evernote is all over the place!<br /><br /><a href="http://itunes.apple.com/se/app/evernote/id281796108?mt=8" target="_blank">Evernote på Itunes</a></p>
<p> </p>
<h4>5. Dropbox</h4>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/8063/dropbox.jpg" width="320" height="480" alt="Dropbox" style="border: 3px solid #BABABA;"/></p>
<p> </p>
<p>Lagringstjänsten <a href="http://www.dropbox.com" target="_blank">Dropbox</a> har verkligen blivit lika folklig som Melodifestivalen, här kan du enkelt lägga dina filer i "molnet" dvs. de sparas på nätet och du kan komma åt dem från både en browser, från sync-programmet och från dina mobila enheter. Det är också väldigt enkelt att dela filer med vänner och kollegor. Jag använder ofta Dropbox som ett snabbt sätt att föra över filer från telefonen till datorn om man inte har tillgång till sync-sladd.</p>
<p> </p>
<p><a href="http://itunes.apple.com/se/app/dropbox/id327630330?mt=8" target="_blank">Dropbox på Itunes</a></p>]]></description></item><item><title>Smidiga VS-mallar för Umbraco 5</title><link>http://www.enkelmedia.se/blogg/2012/2/28/smidiga-vs-mallar-for-umbraco-5.aspx</link><pubDate>Tue, 28 Feb 2012 22:37:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2012/2/28/smidiga-vs-mallar-for-umbraco-5.aspx</guid><description><![CDATA[<p>Det var ett tag sedan som Umbraco teamet släppte <a href="http://umbraco.codeplex.com/" target="_blank">Umbraco V5</a> i en RTM-version (Release To Manufacturing), dvs en variant som ska vara klar för att köras i produktionsmiljö.</p>
<p> </p>
<p>Jag labbade lite med att bygga ut backoffice redan när V5 var i Beta och RC-stadiet och min upplevelse är att det är hyfsat krångligt samtidigt är vissa saker betydligt enklare. Tex att skapa egna sections eller "apps", egna träd och såvidare har faktiskt blivit enklare. Strukturen för alla extenstions är också tydligare, man pratar helt enkelt om Plugins. Det kan vara en plugin, eller flera plugins som bildar ett package. </p>
<p> </p>
<p>Jag kommer självklart att dela med mig mer av mina upplevelser av att bygga ut backoffice men kan börja med lite bra länkar, Shannon Deminicks blogg är ett måste för den som vill roa sig med plugins:</p>
<p> </p>
<p><a href="http://shazwazza.com/post/Umbraco-Jupiter-Plugins-Part-1.aspx" target="_blank">http://shazwazza.com/post/Umbraco-Jupiter-Plugins-Part-1.aspx</a></p>
<p><a href="http://shazwazza.com/post/Umbraco-Jupiter-Plugins-Part-2-Routing.aspx" target="_blank">http://shazwazza.com/post/Umbraco-Jupiter-Plugins-Part-2-Routing.aspx</a></p>
<p><a href="http://shazwazza.com/post/Umbraco-Jupiter-Plugins-Part-3-Trees.aspx" target="_blank">http://shazwazza.com/post/Umbraco-Jupiter-Plugins-Part-3-Trees.aspx</a></p>
<p><a href="http://shazwazza.com/post/Umbraco-Jupiter-Plugins-Part-4-Editors.aspx" target="_blank">http://shazwazza.com/post/Umbraco-Jupiter-Plugins-Part-4-Editors.aspx</a></p>
<p><a href="http://shazwazza.com/post/Umbraco-Jupiter-Plugins-Part-5-Surface-Controllers.aspx" target="_blank">http://shazwazza.com/post/Umbraco-Jupiter-Plugins-Part-5-Surface-Controllers.aspx</a></p>
<p> </p>
<p> </p>
<p><img src="/media/7758/windows-live-writer_130b40ce828d_98fd_extensionmanager_449x260.jpg"  width="449"  height="260" alt="Windows -Live -Writer _130b 40ce 828d _98FD_Extension Manager"/><br /><br />Idagarna släppte också Morten Christensen ett gäng bra project-templates till Visual Studio för den som vill labba med egna plugins. Öppna Extenstion manager och sök på Umbraco så kommer de upp.</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>]]></description></item><item><title>Razor i Umbraco, Tips och tricks</title><link>http://www.enkelmedia.se/blogg/2012/1/4/razor-i-umbraco-tips-och-tricks.aspx</link><pubDate>Wed, 04 Jan 2012 19:18:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2012/1/4/razor-i-umbraco-tips-och-tricks.aspx</guid><description><![CDATA[<p>Som jag bloggat om tidigare så kommer <a href="http://www.enkelmedia.se/{localLink:1116}" title="Umbraco">Umbraco</a> att släpp stödet för XSLT i version 5, det blir istället fullt fokus på Razor!</p>
<p> </p>
<p>På sistone har jag bland annat roat mig med att kolla in Doug Robars <a href="http://stream.umbraco.org/video/2198461/did-you-know" target="_blank">presentation från CodeGarden 2011</a> där han pratar om tips och tricks för Umbraco. Jag har också kollat igenom Razor-avsnitten på <a href="http://umbraco.com/help-and-support/video-tutorials/umbraco-fundamentals/razor.aspx" target="_blank">Umbraco TV</a> – 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.</p>
<p> </p>
<h4>Snabbvägen till Documents Types</h4>
<p>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:</p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: csharp">@foreach(var node in Model.DocTypeNames) { }</pre>
</div>
<p>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:</p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: csharp">@foreach(var node in Model.NewsItem.First().Children) {
   @node.Name
}
</pre>
</div>
<h4><br />Kapa och lägg till…</h4>
<p>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:</p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: csharp">@Library.Truncate("Här skriver vi en massa text som sedan ska kapas", 
10, true);
</pre>
</div>
<p><br />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.</p>
<p> </p>
<h4>Om det är sant så gör det osv</h4>
<p>Att if-statments mitt i razorkoden ser ganska klumpigt ut så därför finns @Library.If() som används så här:</p>
<p> </p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: csharp">@Library.If(true=true, "Skrivs vid sant", 
"Skrivs vid falskt, denna är är inte obligatorisk.");
</pre>
</div>
<p> </p>
<h4>Jag vill göra en breadcrumb</h4>
<p>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.</p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: csharp">@foreach(var node in Model.Ancestors()) {
  @node.Name&lt;br/&gt;
}
</pre>
</div>
<p> </p>
<p>Detta returnerar alltså alla parents i en fin lista så att man tex. kan göra en breadcrumb.</p>
<p> </p>
<h4>Gruppera mera</h4>
<p>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:</p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: csharp">@foreach (var groups in Model.Children.InGroupsOf(2))    
{
  foreach (var item in groups)      
  {              
     &lt;a href="@item.Url"&gt;@item.Name&lt;/a&gt;&lt;br /&gt;
  }
  // Bryter efter två rader med en hr, hade också kunnat
  // vara text en ny kolumn eller liknande.
  &lt;hr /&gt;
}</pre>
</div>
<p>  </p>
<p>Skulle skriva ut två childs, sedan en hr-tag, två childs, en tag osv osv.</p>
<p> </p>
<h4>Fuska lite</h4>
<p>Peter Gregory har skapat ett litet projekt på our.umbraco.org där han sammanställer en liten fusklapp över Umbraco och Razor, <a href="http://our.umbraco.org/projects/developer-tools/razor-dynamicnode-cheat-sheet" target="_blank">Razor DynamicNode Cheat Sheet</a> är klockrent, ladda hem idag!</p>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/5290/umbraco_cheatsheet.png" width="450" height="338" alt="Umbraco _cheatsheet"/></p>
<p> </p>
<p>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 <a href="http://www.enkelmedia.se/blogg/rss.aspx" target="_blank">RSS</a> men hjälp av tex Outlook eller <a href="http://www.google.com/reader" target="_blank">Google Reader</a>.</p>]]></description></item><item><title>Umbraco 5 släpps i Januari</title><link>http://www.enkelmedia.se/blogg/2011/12/23/umbraco-5-slapps-i-januari.aspx</link><pubDate>Fri, 23 Dec 2011 00:45:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/12/23/umbraco-5-slapps-i-januari.aspx</guid><description><![CDATA[<p>Idag togs ett nytt steg i arbetet med nya den versionen av Umbraco, Umbraco V5. Man släppte en första så kallad RC (Release Candidate) vilket innebär att man är väldigt nära det slutgiltiga resultatet. Samtidigt skrev man också att man hoppas på att den nya versionen kommer att bli klar för släpp i slutet av januari 2012!</p>
<p> </p>
<p> <img src="http://www.enkelmedia.se/media/4861/umbraco-v5.png" width="500" height="335" alt="Umbraco -v5"/></p>
<p> </p>
<p>I denna Umbraco V5 RC1 har man bland annat implementerat members-delen, man har jobbat med DictionaryItems för att få till språkstödet, gjort förbättringar på DocumentTypes och även arbetat med DynamicModel för att göra det ännu enklare att skriva grymma macros. Jag tänker labba lagom mycket med detta under julen, eftersom jag drar hem till Motala och käkar mammas julmat så får jag nog återkomma i mellandagarna med en eventuell kommentar ;)</p>
<p> </p>
<p>Du som är nyfiken kan redan nu <a href="http://umbraco.codeplex.com/releases/view/79260" target="_blank">ladda ned RCn från CodePlex</a>, och läsa mer i <a href="http://umbraco.com/follow-us/blog-archive/2011/12/22/umbraco-5-rc1-is-out-today.aspx" target="_blank">HQs blogginlägg</a> på Umbraco.org.</p>
<p> </p>
<p>Samtidigt funderar jag. Kan alla MVC? Kommer version 5 alltid att bli det självklara valet? Vad tror du?</p>
<p> </p>
<p>God Jul!!</p>]]></description></item><item><title>Samtrans valde Umbraco CMS</title><link>http://www.enkelmedia.se/blogg/2011/11/18/samtrans-valde-umbraco-cms.aspx</link><pubDate>Fri, 18 Nov 2011 06:21:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/11/18/samtrans-valde-umbraco-cms.aspx</guid><description><![CDATA[<p>Vår senaste kund <a href="http://www.samtrans.se" target="_blank">Samtrans</a> gav oss förtroendet att implementera Umbraco CMS i den design som levererats av Vektorgrafik Stockholm.</p>
<p> </p>
<p><img src="/media/4762/samtrans_screen_500x350.jpg"  width="500"  height="350" alt="Samtrans Screen"/></p>
<p> </p>
<p>Företaget sysslar med persontransporter för personer med speciella behov och hemsidan är en uppfräschning av deras tidigare hemsida. Läs gärna med om projketet bland våra <a href="http://www.enkelmedia.se/{localLink:1490}" title="Samtrans">referenser</a>.</p>]]></description></item><item><title>Dax att lägga XSLT på hyllan</title><link>http://www.enkelmedia.se/blogg/2011/11/16/dax-att-lagga-xslt-pa-hyllan.aspx</link><pubDate>Wed, 16 Nov 2011 18:04:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/11/16/dax-att-lagga-xslt-pa-hyllan.aspx</guid><description><![CDATA[<p><img src="http://www.enkelmedia.se/media/4680/xsltbooks.jpg" width="500" height="252" alt="Xslt Books"/></p>
<p><em>Böcker som gjort sitt...</em></p>
<p> </p>
<p>För några dagar sedan skrev Niels Hartvig, grundaren av Umbraco, ett <a href="http://umbraco.com/follow-us/blog-archive/2011/11/10/saying-goodbye-to-an-old-friend.aspx" target="_blank">blogginlägg</a> där han berättade att man nu kommer att släppa stödet för så kallade XSLT-makron i Umbraco.</p>
<p> </p>
<p>XSLT är en teknik som används för att formatera och och omformatera XML-dokument. Eftersom hela Umbraco-sajten, i dagsläget, sparas som ett XML dokument i webbserverns cache så har XSLT varit en extremt snabb teknik för att lista och filtrera innehåll.</p>
<p> </p>
<p>I Umbraco 5, som bygger på ASP.NET MVC och är en komplett ombyggnad av grunden till Umbraco, kommer man att släppa stödet för XSLT och istället satsa enbart på Razor-makron. <br /><br />Jag tycker att det är bra! Som nybörjare på Umbraco minns jag att det största "hindret" för mig var just XSLT. XSLT är extremt snabbt men på samma sätt som det är snabbt är det krångligt och kräver relativt djup förstålse om XML, XPath osv. När Umbraco 5 nu istället baseras på Razor kommer den som arbetat med ASP.NET MVC att känna igen sig eftersom att Razor är den teknik som används för att programmera vyer i gränsnittet för MVC-sajter.</p>
<p> </p>
<p>Så det är bara att lägga mina gamla XSLT-böcker på hyllan....</p>]]></description></item><item><title>Umbraco User Group i Sverige</title><link>http://www.enkelmedia.se/blogg/2011/11/8/umbraco-user-group-i-sverige.aspx</link><pubDate>Tue, 08 Nov 2011 18:24:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/11/8/umbraco-user-group-i-sverige.aspx</guid><description><![CDATA[<p><img src="http://www.enkelmedia.se/media/4693/umbracousergroup.jpg" width="500" height="317" alt="Umbraco User Group"/></p>
<p> </p>
<p>Jag vill tipsa om den svenska användargruppen för Umbraco, UUGS (Umbraco User Group Sweden). Den startades för några månader sedan och kommer att hålla möten och seminarium med Umbraco som tema.</p>
<p> </p>
<p>För att gå med, besök hemsidan <a href="http://www.uugs.se/" target="_blank">uugs.se</a> och glöm inte att joina <a href="http://www.facebook.com/#!/groups/umbracousergroupsweden/" target="_blank">facebook-gruppen</a>! </p>
<p> </p>
<p>Vi ses och hörs! :D</p>]]></description></item><item><title>Bygga ut Umbraco Backoffice - del 1</title><link>http://www.enkelmedia.se/blogg/2011/11/3/bygga-ut-umbraco-backoffice-del-1.aspx</link><pubDate>Thu, 03 Nov 2011 07:29:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/11/3/bygga-ut-umbraco-backoffice-del-1.aspx</guid><description><![CDATA[<p>Jag tänkte gå igenom grunderna i hur man bygger ut Umbracos Backoffice/backend. Eftersom det redan finns ett bra gäng bloggposter om hur man lägger till sin egen "section" så tänkte jag fokusera på lite andra delar just nu.</p>
<p> </p>
<h4>Skapa egen section / application i Umbraco</h4>
<p>Det krävs lite småfix i databasen för att skapa sin egen section, det är inte särskilt avancerat och du kan läsa utförligt hur man gör i dessa poster:</p>
<p> </p>
<p><a href="http://www.robertgray.net.au/2011/5/10/creating-a-custom-content-tree-in-umbraco.aspx" target="_blank">http://www.robertgray.net.au/2011/5/10/creating-a-custom-content-tree-in-umbraco.aspx</a></p>
<p> </p>
<p><a href="http://www.sewen.se/blogg/2010/2/26/skapa-en-custom-section-i-umbraco-(steg-1).aspx" target="_blank">http://www.sewen.se/blogg/2010/2/26/skapa-en-custom-section-i-umbraco-(steg-1).aspx</a></p>
<p> </p>
<h4>Göra egna Webforms till Umbraco backoffice</h4>
<p>När du ska skapa dina egna .aspx-filer för redigeringsytan så är det en bra idé att använda Umbracos egna kontroller för backoffice. De finns i umbraco.uicontrols.controls. För att använda dessa på sida måste du lägga till följande rad i början av ditt aspx-dokument.</p>
<p> </p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: xml">&lt;%@ Register TagPrefix="umb" Namespace="umbraco.uicontrols" 
Assembly="controls" %&gt;<br /><br /></pre>
</div>
<p>När detta är fixat så kan du enkelt använda Umbracos orginal-kontroller och få din custom section att hålla samma konsekventa utseende som resten av backoffice.</p>
<p> </p>
<p>Jag tänkte gå igenom några av de mesta grundläggande kontrollerna</p>
<p> </p>
<p><strong>TabView</strong></p>
<p><img src="http://www.enkelmedia.se/media/4511/tabview.png" width="498" height="49" alt="Tabview"/></p>
<p>Om du vill använda tabbar skall du ha en TabView kontroll på sidan. Varje sida behöver bara EN TabView. Du skapar sedan valfritt antal tabs i din code behinde.</p>
<p> </p>
<p>I din aspx-fil:</p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: xml">&lt;umb:TabView ID="MyTabView" runat="server" Width="552px" Height="392px"/&gt;</pre>
</div>
<p><br />För att lägga till tabbar används förljande kod i code behinde:</p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: csharp">protected override void OnInit(EventArgs e)
{
   base.OnInit(e);
   
    // Lägg till ny tab på MyTabView
    var myTab = MyTabView.NewTabPage("Details");
    myTab.Controls.Add(myPane);
    // Ett tab till
     var myTab2 = MyTabView.NewTabPage("New tab");
     myTab2.Control.Add(anotherPane);
}</pre>
</div>
<p><br /><br /></p>
<p><strong>Pane / PropertyPane</strong></p>
<p><strong><img src="http://www.enkelmedia.se/media/4506/pane-property.png" width="394" height="246" alt="Pane -property"/></strong></p>
<p>Det blå strecket markerar "umb:Pane" och de röda boxarna är PropertyPanels. Detta samarbete mellan Pane och PropertyPane ser man ofta i Umbracos backoffice. Koden ser ut ungefär så här:</p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: xml">&lt;umb:Pane ID="myPane" runat="server" Text="Settings"&gt;
  &lt;umb:PropertyPanel ID="PropertyPanel1" runat="server" 
    Text="Database datatype"&gt;
	&lt;!-- DropDown goes here --&gt;
  &lt;/umb:PropertyPanel&gt;
  &lt;umb:PropertyPanel id="PropertyPanel2" runat="server" 
    Text="Add prevalue"&gt;
	&lt;!-- Textbox goes here --&gt;
  &lt;/umb:PropertyPanel&gt;
&lt;/umb:Pane&gt;</pre>
</div>
<p> </p>
<p><strong>MenuImageButton och MenuIcon</strong></p>
<p>Det finns två olika typer av knappar som kan adderas till en TabView. Visuellt syns ingen skillnad, det är knapparnas funktion som skiljer sig.</p>
<ul>
<li>MenuImageButton - Används om du vill att knappen ska fira av ett click-event och en postback.</li>
<li>MenuIcon - Används om knappen istället ska anropa en javascript-funktion.</li>
</ul>
<p> </p>
<p>MenuImageButton:</p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: csharp">btnImage = dataTab.Menu.NewImageButton();
btnImage.ID = id;
btnImage.Click += new ImageClickEventHandler(SaveButton_Click);
btnImage.AlternateText = "Save";
btnImage.ImageUrl = GlobalSettings.Path + "/images/editor/save.gif";</pre>
</div>
<p> </p>
<p>MenuIcon:</p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: csharp">btnImageIcon = dataTab.Menu.NewIcon();
btnImageIcon.ID = "btnImageIcon";
btnImageIcon.OnClickCommand = "alert('Run javascript')";
btnImageIcon.ImageURL = GlobalSettings.Path + "/images/editor/save.gif";
btnImageIcon.AltText = "Show alert";</pre>
</div>
<p> </p>
<p><strong>CodeArea</strong></p>
<p>I Umbracos backoffice används ibland en inbyggd kodeditor. Den kan även du använda i dina egna projekt genom att infoga en CodeArea.</p>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/4641/umbraco_codearea.png" width="500" height="339" alt="Umbraco codearea"/></p>
<p> </p>
<p>Så här kan koden se ut:</p>
<p> </p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: xml">&lt;umb:CodeArea ID="editor" ClientSaveMethod="doSubmit" CodeBase="Python" 
AutoResize="true" OffSetX="47" OffSetY="55" runat="server" /&gt;</pre>
</div>
<p> </p>
<p>ClientSaveMethod är inte obligatorisk och används för att hantera om användaren trycker "Ctrl+S" i editorn. Egenskapen CodeBase krävs inte heller. När du arbetar med denna CodeArea i code behinde använd egenskapen "Text" för att sätta/hämta innehållet.</p>]]></description></item><item><title>Tömma Umbracos papperskorg</title><link>http://www.enkelmedia.se/blogg/2011/10/25/tomma-umbracos-papperskorg.aspx</link><pubDate>Tue, 25 Oct 2011 06:40:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/10/25/tomma-umbracos-papperskorg.aspx</guid><description><![CDATA[<p>Jag läste precis några av mina favoritbloggar om Umbraco och såg att några tipsade om hur man enkelt tömmer papperskorgen.</p>
<p> </p>
<p><a href="http://www.blogfodder.co.uk/2011/5/26/mass-delete-over-1k-nodes-from-recycle-bin-in-47" target="_blank">http://www.blogfodder.co.uk/2011/5/26/mass-delete-over-1k-nodes-from-recycle-bin-in-47</a></p>
<p> </p>
<p><a href="http://anthonydotnet.blogspot.com/2011/07/umbraco-empty-recycle-bin-hangs.html" target="_blank">http://anthonydotnet.blogspot.com/2011/07/umbraco-empty-recycle-bin-hangs.html</a></p>
<p> </p>
<p>Jag rekommenderar paketet "F.A.L.M Housekeeping" som dels kan radera papperskorgen men även loggar, rollbacks och mycket annat. <a href="http://our.umbraco.org/projects/backoffice-extensions/falm-housekeeping" target="_blank">http://our.umbraco.org/projects/backoffice-extensions/falm-housekeeping</a></p>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/4609/housekeeping.jpg" width="362" height="630" alt="Housekeeping"/></p>]]></description></item><item><title>Livsfarligt utan StringBuilder</title><link>http://www.enkelmedia.se/blogg/2011/10/6/livsfarligt-utan-stringbuilder.aspx</link><pubDate>Thu, 06 Oct 2011 16:47:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/10/6/livsfarligt-utan-stringbuilder.aspx</guid><description><![CDATA[<p>Det är egentligen helt självklart och hör till grunderna inom .NET men jag måste verkligen dela med mig av den här historien för att göra det övertydligt. Det handlar om att sätta ihop (concat) strängar. Det finns ett väldigt enkelt sätt att göra detta som ser ut ungefär så här:</p>
<p> </p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: csharp">strVariable += "mer saker i strängen"</pre>
</div>
<p><br />Detta sätt att sätta ihop strängar har jag använt en hel del genom åren. Jag har ofta läst om att StringBuilder-klassen är snabbare och bättre eftersom att den endast håller ett objekt i minnet, den skall alltså användas när det handlar om större objekt tex om concaten sker i en loop. En kod liknande den nedan fanns i ett projekt jag fick ta över.</p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: csharp">foreach(var yada in yadaYada)
{
  strVariable += "mer saker i strängen"
}</pre>
</div>
<p><br />Funktionen som ibland hanterade tiotusentals rader var extremt seg. Kan det vara Entity Framework (som också var inblandat) som spökar? Svaret var klart och tydligt nej. Det beror på att vi inte använder StringBuilder. Loopen ovan med 15 000 rader tog cirka 25 sekunder för vår testmaskin att processa. Gissa tiden för samma loop fast med StringBuilder?</p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: csharp">foreach(var yada in yadaYada)
{
  stringBuilder.Append("mer saker i strängen");
}</pre>
</div>
<p>Den tog 0,21 sekunder. Det är helt sjukt vilken enorm skillnad. Enligt vad jag förstår så kommer kompilatorn att döda den gamla och skapa en ny sträng i minnet varje gång loopen körs i första exemplet, i andra, med StringBuildern används samma objekt. Värt att veta alltså:</p>
<p> </p>
<p>StringBuilder.Append 00:00.0210012 sekunder<br />Html+html 00:26.9005386 sekunder</p>
<p> </p>]]></description></item><item><title>Intellisense på kontroller i umbraco.uicontrols</title><link>http://www.enkelmedia.se/blogg/2011/9/26/intellisense-pa-kontroller-i-umbracouicontrols.aspx</link><pubDate>Mon, 26 Sep 2011 08:24:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/9/26/intellisense-pa-kontroller-i-umbracouicontrols.aspx</guid><description><![CDATA[<p>När man utvecklar egna sections till Umbracos backoffice så är det lämpligt att återanvända standardkontrollerna i Umbraco. Dessa finns i umbraco.uicontrols och används genom att lägga till följande rad i början av din aspx-fil.</p>
<p> </p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: xml">&lt;%@ Register TagPrefix="umb" Namespace="umbraco.uicontrols" 
Assembly="controls" %&gt;</pre>
</div>
<p><br /><img src="http://www.enkelmedia.se/media/4529/addreference.png" width="281" height="285" alt="Add Reference" style="float: right;"/>När jag gjorde detta i ett nytt projekt för att tag sedan märkte jag att Visual Studio vägrade att ge mig Intellisense på kontrollerna vilket var sjukt irriterande. Efter lite googlade så hittade jag <a href="http://our.umbraco.org/forum/using/ui-questions/18715-Can%27t-access-umbracouicontrols" target="_blank">denna tråd</a> som presenterade den enkla lösningen:</p>
<p> </p>
<p>Lägg till en referens till ClientDependency.Core.dll i ditt projekt och saken är biff.</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>]]></description></item><item><title>Screencasts om Umbraco CMS</title><link>http://www.enkelmedia.se/blogg/2011/9/15/screencasts-om-umbraco-cms.aspx</link><pubDate>Thu, 15 Sep 2011 20:06:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/9/15/screencasts-om-umbraco-cms.aspx</guid><description><![CDATA[<p>Vår utvecklare Markus Johansson har gjort en kort introduktion till Umbraco CMS du som skall redigera sajten ser hur enkelt det är att arbeta med detta underbara publiceringsverktyg och du som ska utveckla får upptäcka enkelheten och skalbarheten.</p>
<p> </p>
<h4>För dig som ska uppdatera hemsidan</h4>
<p> </p>
<p><iframe width="520" height="349" src="http://www.youtube.com/embed/q_qpcqH4u10?hl=sv&amp;fs=1" frameborder="0" allowfullscreen=""></iframe></p>
<p> </p>
<h4>För dig som är utvecklare</h4>
<p> </p>
<p><iframe width="520" height="349" src="http://www.youtube.com/embed/EVkwtej0KMA?hl=sv&amp;fs=1" frameborder="0" allowfullscreen=""></iframe></p>]]></description></item><item><title>Kopiera databas från SQL Server 2008 till 2005</title><link>http://www.enkelmedia.se/blogg/2011/8/26/kopiera-databas-fran-sql-server-2008-till-2005.aspx</link><pubDate>Fri, 26 Aug 2011 16:58:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/8/26/kopiera-databas-fran-sql-server-2008-till-2005.aspx</guid><description><![CDATA[<p>I vår utvecklingsmiljö använder vi SQL Server 2008 och för ett tag sedan utvecklade vi en Umbraco-lösning med denna databas som grund. När detta skulle implementeras till kundens produktionsmiljö visade det sig att de körde SQL Server 2005. Det innebär att man inte kan kopiera mdf-filen eller skapa en backup och återställa den på servern som man annars hade kunnat göra.</p>
<p> </p>
<p>Lösningen som vi kom fram till blev att scripta hela databasen så här:</p>
<p> </p>
<p>1. Öppna SQL Server Managament Studio.<br /> 2. Högerklicka på den databas du vill exportera och välj "Generate Scripts"</p>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/4323/copy-database-11.png" width="542" height="472" alt="Copy -database -11"/></p>
<p> </p>
<p>3. I steget options glöm INTE att klicka i följande:<br />  - Script Bindings = True<br />  - Script for sever version = SQL Server 2005<br />  - Script logins = True<br />  - Script Data = True</p>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/4316/copy-database-2.png" width="552" height="511" alt="Copy -database -2"/></p>
<p> </p>
<p>4. Klart</p>]]></description></item><item><title>Umbraco i produktionsmiljö</title><link>http://www.enkelmedia.se/blogg/2011/8/26/umbraco-i-produktionsmiljo.aspx</link><pubDate>Fri, 26 Aug 2011 07:42:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/8/26/umbraco-i-produktionsmiljo.aspx</guid><description><![CDATA[<p>När utvecklingen av en Umbraco-sajt är klar och hemsidan skall göras publik finns det en del saker att tänka på. Det är många moment och småsaker som kan vara lätt ass missa. Därför tänkte jag dela med mig av min nuvarande checklista.</p>
<p> </p>
<ul>
<li>ConnectionString - Glöm inte att ändra kopplingen till den databas som skall användas i produktionsmiljön.</li>
<li>Stäng av UmbracoDebug genom att sätta "<span>umbracoDebugMode" to false i web.config.</span></li>
<li><span>Slipp "Uppgraderingsmeddelanden" i backend genom att sätta umbracoDisableVersionCheck till false eller umbracoVersionCheckPeriod till 0 även detta i web.config.</span></li>
<li><span>Sätt "CustomErrors" till RemoteOnly för att inte exponera eventuella fel till användare/hackers.</span></li>
<li><span>Sätt debug till false i kompileringssektionen.</span></li>
<li><span>Dubbelkolla att mapprättigheterna är korrekta i produktionsmiljön - <a href="http://our.umbraco.org/wiki/install-and-setup/set-umbraco-folder-permissions-from-command-line" target="_blank">Länk till artikel på umbraco.org</a>.</span></li>
<li><span>Aktivera "Health Monitoring" i web.config. Då får du tex. mail om ett fel uppstår på servern. <a href="http://msdn.microsoft.com/en-us/library/bb398933.aspx" target="_blank">Lär mer om health monitoring</a>.</span></li>
<li><span>Städa i din Umbraco-installation. Tabort gammla logposter, mediafiler och annat som tar onödig plats. Använd pluginen <a href="http://our.umbraco.org/projects/backoffice-extensions/falm-housekeeping" target="_blank">FALM Housekeeping</a> av Adriano Fabri.</span></li>
<li><span>Ge din kund en kram.<br /> </span></li>
</ul>]]></description></item><item><title>Sortera efter datum i XSLT</title><link>http://www.enkelmedia.se/blogg/2011/8/24/sortera-efter-datum-i-xslt.aspx</link><pubDate>Wed, 24 Aug 2011 07:35:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/8/24/sortera-efter-datum-i-xslt.aspx</guid><description><![CDATA[<p>Jag jobbade med ett RSS-macro som skulle lista blogg inläggen från bland annat  denna blogg. Mallen kräver att man kan sortera posterna efter datum i fallande ordning. Eftersom xsl-sort har ett element som heter data-type så forskade jag i om man kunde sätta danna till date - vilket inte gick. De enda värden som är gilltiga är text, number och qname.</p>
<p> </p>
<p>Därför blev min lösning att konvertera datumet till siffror och sedan sortera efter nummer.</p>
<p> </p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: xml">&lt;xsl:apply-templates 
 select="$currentPage/descendant::SimpleBlogPost [@isDoc]"&gt;
   &lt;xsl:sort 
   select="umbraco.library:FormatDateTime(postDate ,'yyyyMMddhhmmss')" 
   data-type="number" order="descending" /&gt;
&lt;/xsl:apply-templates&gt;
</pre>
</div>
<p> </p>
<p> </p>]]></description></item><item><title>Bra inspiration</title><link>http://www.enkelmedia.se/blogg/2011/8/23/bra-inspiration.aspx</link><pubDate>Tue, 23 Aug 2011 12:32:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/8/23/bra-inspiration.aspx</guid><description><![CDATA[
<p><a href="http://www.webappers.com" target="_blank"><img src="http://www.enkelmedia.se/media/4217/webappers_logo.png" width="433" height="92" alt="Webappers _logo"/></a></p>

<p>&nbsp;</p>

<p>Jag tycker verkligen om tips-bloggen "WebAppers" som tipsar om
coola gratis scripts, tips och tekniker för att göra din sajt
snyggare och mer användarvänlig. Ett måste bland bokmärkena.</p>

<p>&nbsp;</p>

<p>Länk: <a href="http://www.webappers.com/"
target="_blank">http://www.webappers.com</a></p>
]]></description></item><item><title>Nya sidan lanserad</title><link>http://www.enkelmedia.se/blogg/2011/6/29/nya-sidan-lanserad.aspx</link><pubDate>Wed, 29 Jun 2011 18:05:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/6/29/nya-sidan-lanserad.aspx</guid><description><![CDATA[<p><span>Nu är vår nya hemsida lanserad. Eftersom vi är stora förespråkare av Umbraco CMS så valde vi att bygga även vår egna sida med detta system som grund. Såhär ser det ut just nu när jag skriver detta blogginlägg.</span></p>
<p> </p>
<p><span><img src="http://www.enkelmedia.se/media/3545/umbracocms-470-screenshot.jpg" width="515" height="412" alt="Umbracocms -470-screenshot"/>﻿</span></p>
<p> </p>
<p><span>För just vår hemsida har det inte krävts några enorma utbyggnader av Umbracos grund men vi har använt följande moduler:</span></p>
<p> </p>
<ul>
<li><span><a href="http://our.umbraco.org/projects/backoffice-extensions/google-maps-datatype" target="_blank">Google Maps Datatype</a> av Darren Fergus</span></li>
<li><span>Simple blog - Som är ett framtida blogg-paket som vi ska lansera för Umbraco</span></li>
<li><span><a href="http://our.umbraco.org/projects/backoffice-extensions/syntax-highlighter-plugin" target="_blank">Syntax Highlighter 1.0</a> som vi själva utvecklat.</span></li>
</ul>
<p> </p>
<p><span>Vi har också använt oss av den nya funktionaliteten med <a href="http://umbraco.com/follow-us/blog-archive/2011/2/23/umbraco-47-razor-feature-walkthrough-%E2%80%93-part-1" target="_blank">Razor-macron</a> som är riktigt användbar och effektiv att arbeta med!﻿</span></p>]]></description></item><item><title>Rest/Base i Umbraco</title><link>http://www.enkelmedia.se/blogg/2011/2/23/restbase-i-umbraco.aspx</link><pubDate>Wed, 23 Feb 2011 16:22:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2011/2/23/restbase-i-umbraco.aspx</guid><description><![CDATA[
<p>En intressant och användbar del av Umbraco är "Base", där
används REST för att på ett enkelt sätt göra det möjligt att
kommunicera med Umbraco, dels från Umbracosajten, men även från
externa sytstem.</p>

<p>&nbsp;</p>

<p>Mer info om Rest (Representational State Transfer) finns bland
annat här:
http://sv.wikipedia.org/wiki/Representational_State_Transfer</p>

<p>&nbsp;</p>

<p>Det är sjukt enkelt att få REST att fungera i Umbraco.</p>

<ul>
<li>Skapa en klass med statiska methoder som skall exponeras.</li>

<li>Lägg assemblyt i Umbracos bin-katalog</li>

<li>Konfigurera Umbraco-Base i filen "restExtensions.config"</li>

<li>Ös på</li>
</ul>

<p>&nbsp;</p>

<p>Exempel och mer info finns här:
http://umbraco.org/documentation/books/introduction-to-base/simple-base-samples</p>
]]></description></item><item><title>@SortOrder beter sig konstigt</title><link>http://www.enkelmedia.se/blogg/2010/11/3/@sortorder-beter-sig-konstigt.aspx</link><pubDate>Wed, 03 Nov 2010 15:26:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2010/11/3/@sortorder-beter-sig-konstigt.aspx</guid><description><![CDATA[<p>Jag har vid ett antal tillfällen förbryllats över hur XSLT rendering från <a>Umbraco</a>, trots att sen nod-lista är korrekt sorterad i backend, inte visar noderna i den ordning som den "borde".<br /> <br /> Jag har hela tiden använt mig av denna kod för att sortera mina noder i en XSLT-loop:</p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: xml">&lt;xsl:sort select="@sortOrder" order="ascending" /&gt;
</pre>
</div>
<p>Detta fram tills att jag läst en bloggpost som sa att man borde skicka med datatypen.</p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: xml">&lt;xsl:sort select="@sortOrder" order="ascending" data-type="number" /&gt;
</pre>
</div>
<p>Utan egenskapen för "data-type" så hanteras numren som strängar (läs: sorteras enligt dessa principer) men när man sätter datatypen till "number" så kommer sorteringen att bli korrekt.</p>]]></description></item><item><title>Fel vid uppgradering till .NET 3.5</title><link>http://www.enkelmedia.se/blogg/2010/9/28/fel-vid-uppgradering-till-net-35.aspx</link><pubDate>Tue, 28 Sep 2010 16:13:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2010/9/28/fel-vid-uppgradering-till-net-35.aspx</guid><description><![CDATA[<p>Har precis hjälpt en kund som fick problem när deras webbhotell valde att uppgradera sina gamla windows 2003-servrar med ASP.NET 2.0 till Windows 2008 och ASP.NET 3.5.<br /> <br /> Det var flera fel som uppstod...</p>
<p> </p>
<p><strong>Inget ASP.NET Ajax Installerat</strong></p>
<p>Det första felmeddelandet som visades var följande:</p>
<div class="code">
<p>Assembly Load Trace: The following information can be helpful to determine why the assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' could not be loaded.</p>
</div>
<p>Detta fel uppstår när Umbraco försöker att komma åt ASP.NET Ajax. Webbhotellet hade glömt, eller stuntat i att återinstallera detta på servern vilket gjorde att dessa assemblies behövde adderas till bin-katalogen. Att kopiera in följande filer löste problemet:</p>
<p> </p>
<p>System.Web.Extensions.Design.dll</p>
<p>System.Web.Extensions.dll</p>
<p> </p>
<p><strong>Uppdatera Web.Config för att passa .NET Framework 3.5</strong></p>
<p>Den nya servern körde .NET framwork 3.5 istället för 2.0 vilket gjorde att kunden ville köra Umbraco-instanserna i denna version. Detta kräver relativt stora ändringar i web.config. Läs mer om denna uppgraderingen här:<br /> <a href="http://umbraco.org/26156">http://umbraco.org/26156</a></p>
<p> </p>
<p>Lösenord fungerade inte i Umbraco Backend</p>
<p>På en av sajterna dök ett sista problem upp. Användarnas lösenord i backend fungerade inte korrekt efter uppgraderingen. De flesta umbracoinstanserna som kördes var 4.0.2.1 - den version där hashade lösenord infördes som standard. Den instans som krånglade körde version 4.0.0 så lösningen var enkel:<br /> <br /> Lösenorden i databasen var inte hashade, men i den nya web.config-filen förutsattes att lösenorden var hashade. Följande ändring gjordes:</p>
<p> </p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: xml">&lt;membership defaultProvider="UmbracoMembershipProvider" userIsOnlineTimeWindow="15"&gt;
             &lt;providers&gt;
                 &lt;clear /&gt;
 
                &lt;add name="UmbracoMembershipProvider" type="umbraco.providers.members.UmbracoMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" defaultMemberTypeAlias="Another Type" passwordFormat="Hashed" /&gt;
                 &lt;add name="AspNetSqlMemberShipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="LocalSqlServer" /&gt;
                 &lt;add name="UsersMembershipProvider" type="umbraco.providers.UsersMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" passwordFormat="Hashed" /&gt;
               &lt;/providers&gt;
         &lt;/membership&gt;
</pre>
</div>
<p> </p>
<p>Blev till:</p>
<p> </p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: xml">&lt;membership defaultProvider="UmbracoMembershipProvider" userIsOnlineTimeWindow="15"&gt;
             &lt;providers&gt;
                 &lt;clear /&gt;
                 &lt;add name="UmbracoMembershipProvider" type="umbraco.providers.members.UmbracoMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" defaultMemberTypeAlias="Another Type" /&gt;
                 &lt;add name="UsersMembershipProvider" type="umbraco.providers.UsersMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" /&gt;
             &lt;/providers&gt;
         &lt;/membership&gt;
</pre>
</div>
<p> </p>
<p>Dvs - passwordFormat="Hashed" raderades så att umbraco inte skulle försöka hasha lösenord när de ska matchas vid inloggning.</p>]]></description></item><item><title>Trädvyen i backend sludade fungera</title><link>http://www.enkelmedia.se/blogg/2010/8/30/tradvyen-i-backend-sludade-fungera.aspx</link><pubDate>Mon, 30 Aug 2010 16:18:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2010/8/30/tradvyen-i-backend-sludade-fungera.aspx</guid><description><![CDATA[<p>Har precis jobbat mycket med en Umbraco-lösning där jag också använder delar av AjaxControlToolkit (ACT). Detta kit skeppades för första gången av Microsoft omkring fyra-fem år sedan i sin första version, version 1.0.<br /> <br /> Det är denna version som finns inkluderad i Umbraco 4.0.5 som jag använder i denna lösning.<br /> <br /> Helt plötsligt, mitt under arbetet med mina UserControls och XSLT-macron upptäckte jag att backendsystemet slutat fungera. Trädvyerna expanderades inte på någon av "tabbarna", inte under content, inte media, ja ingenstans.<br /> <br /> Jag rullade tillbaka en backup som var några månader gammal och upptäckte efter lite letande att jag refererat till en nyare version av ATC i ett av mina projekt - dessa projekt har post-build events som skriver över BIN-filerna i Umbraco-lösningen.<br /> <br /> Dvs - Den nyare versionen (4.0) av ACT hamnade i bin-mappen på min skarpa lösning. Detta ställer alltså till problem med Umbracos backend. Jag rullade tillbaka ACT till version 1.0 vilket löste problemet.</p>]]></description></item><item><title>Parametrar i Macron</title><link>http://www.enkelmedia.se/blogg/2010/6/24/parametrar-i-macron.aspx</link><pubDate>Thu, 24 Jun 2010 16:19:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2010/6/24/parametrar-i-macron.aspx</guid><description><![CDATA[<p>Både XSLT macron och UserControls kan ha parametrar. Dessa kan skrivas i direkt i ko</p>
<p> </p>
<p>&lt;umbraco:macro alias="RenderProperties" paramvalue="Parameter direkt i kod" runat="server"/&gt;<br />  </p>
<p>Eller så kan värdet hämtas ifrån andra delar av systemet. Tex ifrån den aktuella noden:</p>
<p> </p>
<p>&lt;umbraco:macro alias="RenderProperties" paramvalue ="[$pageTitle]" runat="server"/&gt;</p>
<p> </p>
<p>Det finns fyra andra källor för parameter-värden i Umbraco:</p>
<ul>
<li>Page value: [#propertyAlias]</li>
<li>Page properties value: [$propertyAlias]</li>
<li>Cookie value: [%cookieValueKey]</li>
<li>Request collection  (tex QueryString): [@requestValueKey]</li>
</ul>
<p> </p>
<p>Flera värden, ibland kan man vilja ha flera värden och ta den första som faktiskt inte är noll då funkar detta:</p>
<p> </p>
<p>&lt;umbraco:macro paramvalue ="[#propertyAlias],[#propertyAlias2],my static string" /&gt;</p>
<p> </p>]]></description></item><item><title>Debugga Visual Studio med Firefox</title><link>http://www.enkelmedia.se/blogg/2010/2/25/debugga-visual-studio-med-firefox.aspx</link><pubDate>Thu, 25 Feb 2010 16:22:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2010/2/25/debugga-visual-studio-med-firefox.aspx</guid><description><![CDATA[
<p>Något som stört mig ett tag är att Firefox tenderar att vara
sjukt långsamt när man debuggar Visual Studio-projekt via den
inbygga webservern i VS.<br />
<br />
En snabb googling gav mig denna tråd på grymma Stack Overflow: <a
href="http://stackoverflow.com/questions/24959/debugging-asp-net-with-firefox-and-visual-studio-net-very-slow-compared-to-ie"
 target="_blank">http://stackoverflow.com/questions/24959/debugging-asp-net-with-firefox-and-visual-studio-net-very-slow-compared-to-ie</a></p>

<p>&nbsp;</p>

<p>Slutsatsen är helt enkelt att man måste inaktivera ipv6 i
Firefox, enklaste sättet att göra det är följande:</p>

<p>&nbsp;</p>

<ul>
<li>Skriv about:config i Firefox adressbar, klicka ja på
säkerhetsmeddelandet.</li>

<li>Skriv disableIPv6 i filterboxen högst upp och tryck enter.
Inställningen "network.dns.disableIPv6" visas.</li>

<li>Dubbelklicka på "false" så att värdet ändras till true.</li>
</ul>

<p>&nbsp;</p>

<p>När dessa enkla steg är fixade går det tokfort att debugga med
Firefox, vilket är supernice eftersom man då kan använda sig av
bland annat <a href="http://getfirebug.com/"
target="_blank">Firebug</a>.</p>
]]></description></item><item><title>Membership och Roles</title><link>http://www.enkelmedia.se/blogg/2010/2/16/membership-och-roles.aspx</link><pubDate>Tue, 16 Feb 2010 16:23:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2010/2/16/membership-och-roles.aspx</guid><description><![CDATA[<p>Jobbar på en lösning som ska dela användare mellan en vanlig ASP.NET WebApplication och en Umbraco-Instans. Till detta skall även användarinfo kunna uppdateras med Batchar som hämtar XML-data och uppdaterar bla adressuppgifter och betalstatus.</p>
<p> </p>
<p>Jag tittade närmare på två lämpliga lösningar och jag tänkte gå igenom dem här:<br /> <br /> <strong>1. Användare i Umbraco</strong></p>
<p>Spara användarna i Umbraco och jobba med dem via Umbracos API. Det visade sig att det var krångligt att få igång APIt utanför Umbraco-instansen och att allt arbete med användare och dess egenskaper i Umbraco är databasintensivt.<br /> <br /> Ett möjligt alternativ vore att skriva direkt till Umbraco-databasen via webbappen, men alternativet känns inte aktuellt då Umbracos datastruktur är komlex och bör behandlas via dess API.</p>
<p> </p>
<p><strong>2. Användare i ASP.NET-applikationen</strong></p>
<p>Skapa en skräddarsydd databas där användare sparas och sedan låta båda lösningarna hämta sina användare/roller från denna plats. Det innebär att jag måste skriva en ny MembershipProvider och RoleProvider till Umbraco, även att användarhanteringen i Umbracos backend inte fungerar fullt ut.<br /> <br /> <strong>Lösningen</strong></p>
<p>Trots arbetet med nya providers och det faktum att backend inte fungerar till 100% så valde jag lösning 2. Att ha full kontroll över användarens data och slippa avancerade databasstrukturer vid batchjobben var mer värdefullt än de få funktioner som inte fungerar i backend pga Custom Providers.</p>
<p> </p>]]></description></item><item><title>Tomma divar försvinner</title><link>http://www.enkelmedia.se/blogg/2010/1/2/tomma-divar-forsvinner.aspx</link><pubDate>Sat, 02 Jan 2010 16:23:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2010/1/2/tomma-divar-forsvinner.aspx</guid><description><![CDATA[<p>Upptäckte ett intressant problem med att använda divar i XSLT. Följande kod används ofta för att "cleara" divar när man kör dem flytande.</p>
<p> </p>
<div class="code">
<pre class="brush: xml">&lt;div class="clear"&gt;&lt;/div&gt;
</pre>
</div>
<p> </p>
<p>I försökte använda den i ett macro, den låg "wrappad" i en annan div - såhär:</p>
<p> </p>
<div class="code">
<div dir="ltr" id="CodeDiv">
<pre class="brush: xml">&lt;div&gt;
 
   &lt;div class="clear"&gt;&lt;/div&gt;
 
&lt;/div&gt;
</pre>
</div>
<p> </p>
</div>
<p>När denna proccessades av XSLT transormatorn i Umbraco så blev det renderades inte den sista stängningen av div-taggen. Jag löste det genom att köra följande kod:</p>
<p> </p>
<div class="code">
<div dir="ltr" id="CodeDiv">
<pre class="brush: xml">  &lt;div&gt;

      &lt;div class="clear"&gt;&amp;nsbp;&lt;/div&gt;

  &lt;/div&gt;
</pre>
</div>
<p> </p>
</div>]]></description></item><item><title>Begränsa listade poster XSLT</title><link>http://www.enkelmedia.se/blogg/2009/9/6/begransa-listade-poster-xslt.aspx</link><pubDate>Sun, 06 Sep 2009 21:20:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2009/9/6/begransa-listade-poster-xslt.aspx</guid><description><![CDATA[<p>Ibland vill man tex att Umbraco ska visa de 10 senaste posterna i en nod eller kanske de 10 senaste av en speciell document type.</p>
<p>Så här kan man använda XSLT för att begränsa antalet poster som lämnas från en for-each-loop.</p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: xml">&lt;xsl:for-each select="$currentPage/node"&gt;

&lt;xsl:sort select="@sortOrder" order="descending"/&gt;

    &lt;!-- xsl-if kollar att positionen är under 11 dvs, högst 10. 
    Om så inte är fallet skrivs inget ut. --&gt;

   &lt;xsl:if test="position() &lt; 11"&gt;

       &lt;xsl:value-of select="@nodeName"/&gt;&lt;br/&gt;
   &lt;/xsl:if&gt;
&lt;/xsl:for-each&gt;
</pre>
</div>
<p> </p>
<p>Såhär fungerar det:<br /> <br /> &lt;xsl:sort&gt; Används för att sortera resultatet. Select-parametern anger efter vilket värde det skall sorteras och order-parametern anger om det skall vara fallande eller stigande ordning (ascending, descending).<br /> <br />  <br /> <br /> XSLT-funktionen Position() returnerar nummet på den post som just nu bearbetars i loopen. Med hjälp av &lt;xsl:if&gt; anger vi att endast de fem första posterna ska visas, dvs poster som har ett värde under 10.<br /> <br /> Tecknen &amp;lt; och &amp;gt; betyder samma sak som &lt; och &gt;, dessa tecken är skyddade i XSLT och måste därför ersättas med &amp;gt; och &amp;lt&amp;, dvs greater than och lower than.</p>]]></description></item><item><title>Ny node överst i nodlistan</title><link>http://www.enkelmedia.se/blogg/2009/6/30/ny-node-overst-i-nodlistan.aspx</link><pubDate>Tue, 30 Jun 2009 16:27:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2009/6/30/ny-node-overst-i-nodlistan.aspx</guid><description><![CDATA[<p>Jag har byggt ett system till en kund som arbetar med <a href="http://www.soundforce.se/" target="_blank">ljud och ljus</a>. Kunden uppdaterar själv sidan med Umbraco 4.0.2. Sidan är uppbyggd med moduler med text, bild, bildspel, video osv. Dessa sorteras sedan och visas i den ordning som listan är sorterad.</p>
<p> </p>
<p>En frustrerade sak som jag upptäckte var att Umbraco automatiskt lägger till en ny nod längst ned i nodlistan. Ofta vill man ju att nya inlägg/noder ska hamna högst upp. Att sortera i omvänd ordning blir ologiskt - noderna bör ju visas på samma sätt i nodlistan som på själva sidan. Problemet med att Umbraco lägger nya noder längst ned gör att man efter varje nytt inlägg måste sorta för att få de nya inlägget/noden högst upp.</p>
<p> </p>
<p>För att komma runt detta och få mina nya noder att hamna högst upp skapade jag en metod som prenumererar på händelsen "umbraco.BusinessLogic.Actions.ActionNew()" som aktiveras när en ny nod har skapats. Läs mer om händelser i på <a href="http://umbraco.org/documentation/books/creating-and-using-an-action-handler" target="_blank">umbraco.org</a>.<br /> <br /> Följande kod gör att en ny nod automatiskt hamnar högst upp i nodlistan istället för tvärtom:</p>
<p> </p>
<div dir="ltr" id="CodeDiv">
<pre class="brush: csharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using umbraco;
using umbraco.interfaces;
 
using umbraco.BusinessLogic.Actions;
using umbraco.BusinessLogic.console;
using umbraco.cms.businesslogic.web;
 
namespace em.umb.sortnewnode
{
   
    public class DefaultValueHandler : umbraco.BusinessLogic.Actions.IActionHandler
    {
        string umbraco.BusinessLogic.Actions.IActionHandler.HandlerName()
        {
            return "em.umb.sortnewnode";
        }
 
        umbraco.interfaces.IAction[] umbraco.BusinessLogic.Actions.IActionHandler.ReturnActions()
        {
            return new umbraco.interfaces.IAction[] { new umbraco.BusinessLogic.Actions.ActionNew() };
        }
 
       
        Boolean umbraco.BusinessLogic.Actions.IActionHandler.Execute(umbraco.cms.businesslogic.web.Document documentObject, umbraco.interfaces.IAction action)
        {
           
 
            // Getting the fist node.
 
            Document.GetChildrenForTree(documentObject.Id);
 
 
 
           // Creating a generic list of Documents
            List&lt;Document&gt; docs = new List&lt;Document&gt;();
 
 
 
            foreach(IconI d in documentObject.Parent.Children) {
                docs.Add(new Document(d.UniqueId));
            }
 

            // Sorting the list by sortOrder using Linq.
 
            var res = (from d in docs
                       orderby d.sortOrder ascending
                       select d);
 
 
 
           // Picking the first node
 
            Document firstDoc = res.First();
 
 
 
           // Setting sortOrder on the new node, by taking the first nod minus 5.
 
            documentObject.sortOrder = firstDoc.sortOrder - 5;
 
 
 
            return true;
 
        }
    }
 
}
</pre>
</div>
<p> </p>
<p>Självklart är jag medveten om att man kanske vill kunna ställa in detta på katalognivå eller kanske confa det i web-config - har dock inte behövt denna funktionalitet. Lovar att återkomma med eventuella uppdateringar.</p>]]></description></item><item><title>Strippa HTML-taggar via XSLT och C-Sharp</title><link>http://www.enkelmedia.se/blogg/2009/3/6/strippa-html-taggar-via-xslt-och-c-sharp.aspx</link><pubDate>Fri, 06 Mar 2009 19:26:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2009/3/6/strippa-html-taggar-via-xslt-och-c-sharp.aspx</guid><description><![CDATA[<p>När innehåll från en html-editor skall visas i listor eller i andra flöden kan det vara smidigt att "stippta" eller radera/filtrera bort HTML-taggar.</p>
<p> </p>
<p>Alltså detta:</p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: xml">&lt;h1&gt;Hello World&lt;/h1&gt;
&lt;p&gt;I´m here&lt;/p&gt;
</pre>
</div>
<p>Blir till:</p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: xml">Hello World
I´m here
</pre>
</div>
<p>Hur gör man då? Faktum är att lösningen är väldigt enkel. Jag skapade en egen c-sharp funktion som kör ett regex och sedan beräknar längden på inlägget för att veta om det skall kortas ned eller inte:</p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE xsl:stylesheet [ &lt;!ENTITY nbsp " "&gt; ]&gt;
&lt;xsl:stylesheet
 version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:msxml="urn:schemas-microsoft-com:xslt"
 xmlns:msxsl="urn:schemas-microsoft-com:xslt"
 xmlns:umbraco.library="urn:umbraco.library"
 xmlns:em="urn:em"
 exclude-result-prefixes="msxml umbraco.library"&gt;


&lt;xsl:output method="xml" omit-xml-declaration="yes" /&gt;

&lt;xsl:param name="currentPage"/&gt;

&lt;!-- ******* SCRIPTS STARTS HERE *********** --&gt;

&lt;msxsl:script language="CSharp" implements-prefix="em"&gt;
&lt;![CDATA[

// Removes all HTML-taggs from parameter-string

public string generatePreview(string strHTML) {
 
 // Setting default string-length
 int intDefaultLength = 200;

// Removing HTML-tags using regex
 strHTML= Regex.Replace(strHTML, "&lt;[^&gt;]*&gt;", String.Empty);

 
 if(strHTML.Length &gt; intDefaultLength) {
  return strHTML.Substring(0,intDefaultLength) + "...";
 }
 else {
  return strHTML;
 }
}

]]&gt;
&lt;/msxsl:script&gt;

 &lt;!-- ******* SCRIPTS ENDSHERE *********** --&gt;

 

&lt;xsl:template match="/"&gt;

&lt;!-- The fun starts here --&gt;

&lt;p&gt;&lt;xsl:value-of 
 select="em:generatePreview($currentPage/data [@alias = 'HTMLContent'])" 
 disable-output-escaping="yes"/&gt;&lt;/p&gt;

 

&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
</pre>
</div>
<p> </p>
<p>Självklart kan man,  om man vill skapa och kompilera sin egen extension till XSLT, då kan man ha med denna funktionalitet i sin extention. Detta är att föredra om man ska använda funktionen på många olika XSLT-mallar.</p>]]></description></item><item><title>Stilmallar/CSS i Umbracos editor</title><link>http://www.enkelmedia.se/blogg/2009/2/23/stilmallarcss-i-umbracos-editor.aspx</link><pubDate>Mon, 23 Feb 2009 16:41:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2009/2/23/stilmallarcss-i-umbracos-editor.aspx</guid><description><![CDATA[<p>När man lägger till en ny stillmall (CSS) i Umbraco viasas den inte automatiskt när du redigerar innehåll i WYSIWYG-editorn TinyMCE.<br /> <br /> För att stillmallen ska "slå igenom" och synas i editorn måste man kryssa för stillmallen i developer-delen.</p>
<p> </p>
<ul>
<li>Gå till Developer</li>
<li>Öppna upp "Data Types" och klicka på "Richtext editor".</li>
<li>Kryssa i de stilmallar du vill ska synas i editorn under "Related stylesheets".</li>
<li>Spara och nu är det bara att köra.</li>
<li>TIPS: Skapa en speciallstillmall om du tex vill ha en annan bakgrund i editorn än på själva sidan. Denna stilmall använder endast i editorn, inte i själva HTML-koden.</li>
</ul>
<p> </p>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/3512/datatypes_richtext_css.jpg" width="493" height="216" alt="Datatypes _richtext _css"/></p>]]></description></item><item><title>Classer i TinyMCE editorns dropdown</title><link>http://www.enkelmedia.se/blogg/2009/2/23/classer-i-tinymce-editorns-dropdown.aspx</link><pubDate>Mon, 23 Feb 2009 16:39:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2009/2/23/classer-i-tinymce-editorns-dropdown.aspx</guid><description><![CDATA[<p>Umbracos inbyggda texteditor "Richtext editor" som baseras på TinyMCE 3 har en dropdown som heter "Choose style".</p>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/3501/choose_style_dropdown.jpg" width="400" height="94" alt="Choose _style _dropdown"/></p>
<p><em>Standardinställningen i TinyMCE är att alla klasser i de stillmallar som är bundna till editorn ska visas i dropdownen. Eftersom det oftast finns massa klasser i dessa stilmallar som man inte vill ska synas i listan har Umbraco en annan lösning.<br /> <br /> </em> <strong>Så här fixar du en ny klass i listan "Choose style"</strong></p>
<ul>
<li>Klicka dig till "Settings" och expandera "Stylesheets". Välj en av de stillmallar som visas i Umbracos Richtext editor.</li>
<li>Högerklicka och välj "Create" för att skapa en ny under-klass.</li>
<li>Döp den nya stilen till önskat namn, i rutan "styles" kan du sedan skriva CSS-markup.</li>
<li>Denna markup syns inte automatiskt i editor, du måste också lägga till denna markup i din stillmall. I detta fell i mallen screen.</li>
</ul>
<p> </p>
<p><img src="http://www.enkelmedia.se/media/3496/choose_style_propertys.jpg" width="416" height="397" alt="Datatypes _richtext _css"/></p>]]></description></item><item><title>Arbeta med Umbraco i Visual Studio 2008</title><link>http://www.enkelmedia.se/blogg/2009/2/6/arbeta-med-umbraco-i-visual-studio-2008.aspx</link><pubDate>Fri, 06 Feb 2009 21:16:00 GMT</pubDate><guid>http://www.enkelmedia.se/blogg/2009/2/6/arbeta-med-umbraco-i-visual-studio-2008.aspx</guid><description><![CDATA[<p>Ett tips för dig som utvecklar umbraco-lösningar är såklart att använda Visual Studio.<br /> <br /> Umbraco har ju möjligheta att redigera XSLT, CSS, JavaScript och även HTML-mallar i sitt admingränsnitt.<br /> <br /> Däremot missar man ju debugging och mycket annat som kommer tillsammans med Visual Studio.<br /> Om du vill utveckla och debugga med Visual Studio 2008, gör såhär:</p>
<p> </p>
<p>1. Skapa en ny Umbraco-installation</p>
<p>Ställ in databas-koppling, rättigheter osv. Filerna kan tex hamna i c:\inetpub\wwwroot\umbraco</p>
<p> </p>
<p>2. Skapa ett nytt "Website Application Project"</p>
<p>Detta projekt ska skapas i en annan mapp än din umbraco installation.</p>
<p>Lägg till de mappar för de filer du vill kunna arbeta med. Jag har följande:<br /> <br />     * /css<br />     * /scripts<br />     * /xslt<br />     * /masterpages<br />     * /usercontrols</p>
<p> </p>
<p>3. Lägg till ett "Post Build Event"<br /> Detta körs efter att projektet har kompilerats. Syftet är att vi ska kopiera filerna från vår Web Application till vår Umbraco installation.<br /> <br /> Klicka på "Soulution&gt;Properties&gt;Build Events" och lägg till följande kod under "Post Build Events" - alltså det som sker när projektet är kompilerat.</p>
<div id="CodeDiv" dir="ltr">
<pre class="brush: xml">XCOPY "$(ProjectDir)bin\$(ProjectName)*.*" "C:\Inetpub\soundforce - umbraco4\bin\" /y /S
XCOPY "$(ProjectDir)usercontrols\*.ascx" "C:\Inetpub\soundforce - umbraco4\usercontrols\" /y /S
XCOPY "$(ProjectDir)xslt\*.xslt" "C:\Inetpub\umbraco4\xslt\" /y /S
XCOPY "$(ProjectDir)css\*.css" "C:\Inetpub\umbraco4\css\" /y /S
XCOPY "$(ProjectDir)scripts\*.js" "C:\Inetpub\umbraco4\scripts\" /y /S
XCOPY "$(ProjectDir)\*.pbd" "C:\Inetpub\umbraco4\" /y /S
</pre>
</div>
<p> </p>
<p>Parametern /y gör att filer skrivs över, och /S att även underkataloger inkluderas.</p>
<p> </p>
<p>4. För att debuga<br /> <br />     * Öppna siten i din webbläsrae<br />     * I Visual Studio väljer du Debug &gt; Attach to Process och väljer w3wp.exe från listan. (På IIS on XP/2000 heter proccesen asp_net.exe).<br />     * Var noga med att *.pbd-filerna kopieras till umbraco-installationen.<br />     * Debugga för fulla muggar!</p>]]></description></item></channel></rss>  

