<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Morten Bock</title><link>http://www.mortenbock.dk/</link><description>A feed of new content on my website</description><item><author>Morten Bock</author><category>english</category><category>xml</category><category>xslt</category><category>tip</category><description>
&lt;p&gt;I just discovered this little tip that is quite handy (and
obvious, if you allready know it).&lt;/p&gt;

&lt;p&gt;Imagine you have som xml like this:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;pre&gt;
&amp;lt;message&amp;gt;
Thank god it is friday
&amp;lt;from&amp;gt;Tony&amp;lt;/from&amp;gt;
&amp;lt;/message&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Now, you would like to write out the actual message, and not who
it is from.&lt;/p&gt;

&lt;p&gt;If you use a regular value-of like this:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;pre&gt;
&amp;lt;xsl:value-of select="message" /&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Then you will get "Thank god it is fridayTony", and I don't
really want Tony's name in there. So I will do this instead:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;pre&gt;
&amp;lt;xsl:value-of select="message/text()" /&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;And voila, it only writes out "Thank god it is friday" and
ignores the &amp;lt;from&amp;gt; element.&lt;/p&gt;

&lt;p&gt;EDIT:&lt;/p&gt;

&lt;p&gt;If you wanted to write out only the &amp;lt;from&amp;gt; element, you
would do:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;pre&gt;
&amp;lt;xsl:value-of select="message/from" /&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description><guid isPermaLink="false">1359</guid><link>http://www.mortenbock.dk/blog/2008/06/20/just-a-tiny-xslt-tip.aspx</link><pubDate>Fri, 20 Jun 2008 13:56:55 +0100</pubDate><title>Just a tiny XSLT tip</title></item><item><author>Morten Bock</author><category>english</category><category>umbraco</category><category>xslt</category><description>
&lt;p&gt;I've been modifying &lt;a href="http://www.percipientstudios.com/"
target="_blank"&gt;Douglas Robar's&lt;/a&gt; Umbraco XSLT search for a
project where I need to filter a bunch of pages using some multiple
dropdown lists. This is just a short description of how I've done
it.&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The scenario&lt;/strong&gt; I have a bunch of nodes that are
categorized using some multiple ddl datatypes. For example onde
datatype "Season" with the values "Winter,Spring,Summer,Fall" and
another "Theme" - "Theme1,Theme2,Theme3".&lt;/p&gt;

&lt;p&gt;Now I want the user to filter all of my nodes by selecting some
of the values. The tricky part is that if a node contains
"Winter,Spring" and the user searches for "Spring,Summer" there
should be a match.&lt;/p&gt;

&lt;p&gt;I added a javascript function to the XSLT:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;pre&gt;
&amp;lt;msxsl:script language="JavaScript" implements-prefix="ps"&amp;gt;
&amp;lt;![CDATA[
// Here is a lot of functions from the original XSLT&lt;br /&gt;
// My new function
function CompareParams(params, values){
  var par = params.split(",");
  var vals = values.split(",");
  var score = 0;
  var i = 0;
  for(i = 0; i &amp;lt; par.length; i++){
    var j = 0;
    for(j = 0; j &amp;lt; vals.length; j++){
 &lt;span&gt;  &lt;/span&gt;    if(par[i] == vals[j]){
 &lt;span&gt;      &lt;/span&gt;    score = score + 1;
 &lt;span&gt;  &lt;/span&gt;    }
    }
  }
  if(values == ''){
    return true;
  } else {
    if(score &amp;gt; 0){
 &lt;span&gt;  &lt;/span&gt;    return true;
    } else {
 &lt;span&gt;  &lt;/span&gt;    return false;
    }
  }
}
]]&amp;gt;
&amp;lt;/msxsl:script&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Then I added this to my Xpath:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;pre&gt;
&amp;lt;xsl:variable name="itemsSeason" select="$itemsRefined[ps:CompareParams(string(./data[@alias = 'season']),$season) = 'true'
and ps:CompareParams(string(./data[@alias = 'theme']),$theme) = 'true'
and @nodeTypeAlias = 'Aktivitet']" /&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating the search form&lt;/strong&gt; The next step was to
create the search form using the datatypes. Luckily Umbraco has a
neat little funtion for that. GetPreValues:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;pre&gt;
&amp;lt;xsl:template match="/"&amp;gt;&lt;br /&gt;
&amp;lt;!-- start writing XSLT --&amp;gt;&lt;br /&gt;
&amp;lt;form action="?" method="GET"&amp;gt;
  &amp;lt;select multiple="multiple" name="season"&amp;gt;
  &amp;lt;xsl:for-each select="umbraco.library:GetPreValues('1042')/node()"&amp;gt;
    &amp;lt;option&amp;gt;
 &lt;span&gt;  &lt;/span&gt;    &amp;lt;xsl:attribute name="value"&amp;gt;
 &lt;span&gt;      &lt;/span&gt;    &amp;lt;xsl:value-of select="."/&amp;gt;
 &lt;span&gt;  &lt;/span&gt;    &amp;lt;/xsl:attribute&amp;gt;
 &lt;span&gt;  &lt;/span&gt;    &amp;lt;xsl:if test="contains(umbraco.library:RequestQueryString('season'),./node())"&amp;gt;
 &lt;span&gt;      &lt;/span&gt;    &amp;lt;xsl:attribute name="selected"&amp;gt;selected&amp;lt;/xsl:attribute&amp;gt;
 &lt;span&gt;  &lt;/span&gt;    &amp;lt;/xsl:if&amp;gt;
 &lt;span&gt;  &lt;/span&gt;    &amp;lt;xsl:value-of select="."/&amp;gt;
    &amp;lt;/option&amp;gt;
  &amp;lt;/xsl:for-each&amp;gt;
  &amp;lt;/select&amp;gt;
  &amp;lt;select multiple="multiple" name="theme"&amp;gt;
  &amp;lt;xsl:for-each select="umbraco.library:GetPreValues('1043')/node()"&amp;gt;
    &amp;lt;option&amp;gt;
 &lt;span&gt;  &lt;/span&gt;    &amp;lt;xsl:attribute name="value"&amp;gt;
 &lt;span&gt;      &lt;/span&gt;    &amp;lt;xsl:value-of select="."/&amp;gt;
 &lt;span&gt;  &lt;/span&gt;    &amp;lt;/xsl:attribute&amp;gt;
 &lt;span&gt;  &lt;/span&gt;    &amp;lt;xsl:if test="contains(umbraco.library:RequestQueryString('theme'),./node())"&amp;gt;
 &lt;span&gt;      &lt;/span&gt;    &amp;lt;xsl:attribute name="selected"&amp;gt;selected&amp;lt;/xsl:attribute&amp;gt;
 &lt;span&gt;  &lt;/span&gt;    &amp;lt;/xsl:if&amp;gt;
 &lt;span&gt;  &lt;/span&gt;    &amp;lt;xsl:value-of select="."/&amp;gt;
    &amp;lt;/option&amp;gt;
  &amp;lt;/xsl:for-each&amp;gt;
  &amp;lt;/select&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:variable name="searchstring" select="umbraco.library:RequestQueryString('search')" /&amp;gt;
  &amp;lt;input type="text" name="search" value="{$searchstring}" /&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/xsl:template&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;I hope you all can use this :-)&lt;/p&gt;

&lt;p&gt;&lt;a
href="/amino/xsltSearchWithMultipleDropdown.zip"&gt;
Download the complete files here&lt;/a&gt;&lt;/p&gt;
</description><guid isPermaLink="false">1166</guid><link>http://www.mortenbock.dk/blog/2007/02/08/using-xslt-search-with-multiple-dropdowns.aspx</link><pubDate>Thu, 08 Feb 2007 10:24:06 +0100</pubDate><title>Using XSLT search with multiple dropdowns</title></item><item><author>Morten Bock</author><category>net</category><category>dynamicweb</category><category>plugin</category><category>seo</category><category>xslt</category><description>&lt;p&gt;Onsdag var jeg en tur i Odense til Dynamicweb's partnerkonference for at høre lidt om planerne for fremtiden samt få lidt tips og tricks omring implementering af websites i &lt;a target="_blank" href="http://www.dynamicweb.dk/"&gt;Dynamicweb CMS&lt;/a&gt;. Desuden blev vores implementering af &lt;a target="_blank" title="Legetøj" href="http://www.legeskab.dk/"&gt;Legeskab.dk &lt;/a&gt;gennemgået som case da det er den første shop lanceret i Dynamicweb's nye eCommerce pakke. Her kommer lidt af det jeg synes var mest interessant på dagen.&lt;!--more--&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Nye moduler&lt;/strong&gt;
Der er en masse ny moduler på vej. Der kommer bla. Blog, Forum, Survey og integrations- og publiceringsmodul til databaser. Derudover kommer der også opdateringer til en del af de lidt ældre moduler som Formularer og Nyhedsbrev. Og så var der præsentation af noget jeg var ret spændt på at se, nemlig deres nye SEO modul. Frygten for et dommedagsmodul der spytter kode ud til højre og venstre og laver et have af doorwaypages blev heldigvis gjort til skamme, og i stedet blev vi præsenteret for et ganske imponerende analyseværktøj der gennemgik side for side på grundlag af udvalgte søgeord. Her får man så er overblik over hvordan man kan optimere sin tekst yderligere. Ydermere var der en ret smart funktion der gennem Googles API fandt de 10 sider der ligger bedst placeret på det søgeord man nu prøver at optimere på, og så kan man sammenligne parametre for hvordan konkurrenten har benyttet sine nøgleord. Det er en rigtig smart måde at få et overblik over hvad der skal til for at rykke længere op ad listen. &lt;em&gt;(EDIT: &lt;a target="_blank" title="Dynamicweb SEO" href="http://www.computerworld.dk/art/37634"&gt;Nu også i ComputerWorld&lt;/a&gt;)&lt;/em&gt;
&lt;strong&gt;.NET 2.0
&lt;/strong&gt;I februar lanceres den næste opdatering, og der vil Dynamiweb CMS køre fuldt ud i .NET 2.0 kode. Samtidig er der snak om at få åbnet mere op for API'et og dokumentere det bedre så det bliver nemmere at lave moduler der integrerer fuldt ud med resten af Dynamicweb.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Developer forum&lt;/strong&gt;
Der blev også lanceret et forum til solution partnere hvor man kan diskutere implementering osv. med andre udviklere og ikke mindst med kerneudviklerne fra Dynamicweb. Jeg håber personligt at det bliver et velbesøgt område så der kommer noget dynamik og vidensdeling ud af det, så hele platformen på den måde får et løft.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Hearsay
&lt;/strong&gt;Der blev luftet lidt idéer om måske at indføre XSLT templates til modulerne i stedet for de traditionelle templatetags der godt kan være lidt tunge at arbejde med. Det håber jeg i hvert fald ikke går i glemmebogen, for det ville gøre livet meget nemmere på mange områder.&lt;/p&gt;</description><guid isPermaLink="false">1163</guid><link>http://www.mortenbock.dk/blog/2007/01/25/dynamicweb-partnerkonference.aspx</link><pubDate>Thu, 25 Jan 2007 18:43:11 +0100</pubDate><title>Dynamicweb partnerkonference</title></item><item><author>Morten Bock</author><category>synkron-via</category><category>umbraco</category><category>xml</category><category>xslt</category><description>&lt;p&gt;Jeg har i et stykke tid glædet mig til at få fingrene ned i &lt;a title="Synkron Via" href="http://synkronvia.com/"&gt;Synkron Via&lt;/a&gt;, og nu ser det ud til at jeg bliver inviet i hemmelighederne på mandag. Det jeg glæder mig mest til er at se hvordan hele datastrukturen fungerer, også selvfølgelig ikke mindst hvordan template mekanismen hænger sammen.&lt;!--more--&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Dokumenttyper
&lt;/strong&gt;I Via er man gået over til at adskille sidetræet komplet fra dokument håndteringen. Du træker altså dokumenter fra dokumenttræet ind i dit side træ, og kan dermed arbejde med single source dokumenter der optræder flere steder på websitet. Det smukke ved dokumenttyper er jo så at man kan definere dem helt frit gennem et XML-Schema. Man er altså ikke længere fastlåst i de felter som systemet tilbyder, men kan i stedet definere dine egne der passer præcis til de produkttyper du har brug for. Første gang jeg stiftede bekendtskab med denne fremgangsmetode var i &lt;a title="Umbraco CMS" href="http://www.umbraco.org/"&gt;Umbraco&lt;/a&gt; der dog kun arbejder med én træstruktur, hvor man så kan placere forskellige sidetyper i.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Regelstyring
&lt;/strong&gt;Der er ofte store problemer med at implementere en datastruktur i et CMS. F.eks. ser man tit at redaktørerne ikke har styr på hvilke dokumenttyper der skal oprettes hvor, og hvilket moduler der kan fungere i hvilken sammenhæng. Det skulle der nu være mulighed for at få styr på i Via, siger de. Samtidig kan man oprette regler for hvad der skal ske når man opretter et nyt dokument. F.eks. kan du bestemme at når der bliver oprettet et nyt dokument af typen "Nyhed" så bliver den publiceret på de rette sider med det samme. Ret smart.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Channels&lt;/strong&gt;
Forskellige publiceringskanaler. Dvs. genbrug af sidestruktur, men forskellig rendering af indhold alt efter hvilken kanal man tilgår siden på. Lyder smart, men jeg glæder mig til at se hvordan det fungerer i praksis. Betyder det at den samme url bruges til både din browser og din RSS aggregator? Og hvordan opdager den det? Er det &lt;a title="Wikipedias beskrivelse af Cloaking" href="http://en.wikipedia.org/wiki/Cloaking"&gt;Cloaking&lt;/a&gt;? Og kan det bruges til &lt;abbr title="Search engine optimization"&gt;SEO&lt;/abbr&gt; formål?&lt;/p&gt;&lt;p&gt;Nå, men jeg glæder mig i hvert fald til at blive klogere på det her system, og håber at jeg kan genbruge nogle af de XSLT features der også findes i Umbraco.&lt;/p&gt;</description><guid isPermaLink="false">1093</guid><link>http://www.mortenbock.dk/blog/2006/08/19/tid-til-synkron-via.aspx</link><pubDate>Sat, 19 Aug 2006 16:28:59 +0100</pubDate><title>Tid til Synkron Via</title></item></channel></rss>
