<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Websmed.dk</title>
	<atom:link href="http://websmed.dk/feed/" rel="self" type="application/rss+xml" />
	<link>http://websmed.dk</link>
	<description>Om udvikling i almindelighed og webudvikling i særdeleshed</description>
	<lastBuildDate>Thu, 27 May 2010 12:13:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Fra PDF til PNG med PHP på Windows</title>
		<link>http://websmed.dk/2010/05/fra-pdf-til-png-med-php-pa-windows/</link>
		<comments>http://websmed.dk/2010/05/fra-pdf-til-png-med-php-pa-windows/#comments</comments>
		<pubDate>Thu, 27 May 2010 12:13:17 +0000</pubDate>
		<dc:creator>Morten Blinksbjerg Nielsen</dc:creator>
				<category><![CDATA[Udvikling]]></category>

		<guid isPermaLink="false">http://websmed.dk/?p=250</guid>
		<description><![CDATA[Her kommer en lille hurtig guide til hvordan man på en Windows maskine får sin PHP-installation til at konvertere PDF&#8217;er til PNG&#8217;er. På http://www.imagemagick.org/download/binaries/ skal man hente og installere ImageMagick-6.6.2-0-Q16-windows-dll.exe Hent php_imagick_dyn-Q16.dll på http://valokuva.org/outside-blog-content/imagick-windows-builds/080709/ og omdøb den til php_imagick.dll og læg den i dit ext-bibliotek under din php-installation Indsæt extension=php_imagick.dll i din php.ini Restart Apache [...]]]></description>
			<content:encoded><![CDATA[<p>Her kommer en lille hurtig guide til hvordan man på en Windows maskine får sin PHP-installation til at konvertere PDF&#8217;er til PNG&#8217;er.</p>
<ul>
<li>På <a href="http://www.imagemagick.org/download/binaries/">http://www.imagemagick.org/download/binaries/</a> skal man hente og installere <code>ImageMagick-6.6.2-0-Q16-windows-dll.exe</code></li>
<li>Hent <code>php_imagick_dyn-Q16.dll</code> på <a href="http://valokuva.org/outside-blog-content/imagick-windows-builds/080709/">http://valokuva.org/outside-blog-content/imagick-windows-builds/080709/</a> og omdøb den til php_imagick.dll og læg den i dit ext-bibliotek under din php-installation</li>
<li>Indsæt <code>extension=php_imagick.dll</code> i din php.ini</li>
<li>Restart Apache</li>
<li>Installer Ghostscript fra <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/gpl871.htm">http://pages.cs.wisc.edu/~ghost/doc/GPL/gpl871.htm</a></li>
</ul>
<p>For at teste at alt er gået godt kan du teste med nedenstående script der konverterer første side af test.pdf om til et billede, og sender det til browseren:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
  <span style="color: #000088;">$im</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Imagick<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$im</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setResolution</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">130</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">130</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$im</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">readImage</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./test.pdf[0]'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$im</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setImageFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;png&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-Type: image/png&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">print</span> <span style="color: #000088;">$im</span><span style="color: #339933;">;</span></pre></div></div>

<p>Bemærk at der kan være kommet nye versioner når du læser dette &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://websmed.dk/2010/05/fra-pdf-til-png-med-php-pa-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Streaming med flowplayer</title>
		<link>http://websmed.dk/2010/03/streaming-med-flowplayer/</link>
		<comments>http://websmed.dk/2010/03/streaming-med-flowplayer/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 10:23:36 +0000</pubDate>
		<dc:creator>Morten Blinksbjerg Nielsen</dc:creator>
				<category><![CDATA[Udvikling]]></category>
		<category><![CDATA[combatclinic.com]]></category>
		<category><![CDATA[flowplayer]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[pseudostreaming]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://websmed.dk/?p=244</guid>
		<description><![CDATA[Viser man video med flowplayer vil den som standard loade hele videoen, før end den begynder at afspille. Har man et 2 min. klip kan det nemt fylde 12 MB i god kvalitet. Det kan betyde at der nemt kan gå 20-30 sek. inden videoen begynder at afspille. Det er man typisk ikke interesseret i. [...]]]></description>
			<content:encoded><![CDATA[<p>Viser man video med <a href="http://flowplayer.org/">flowplayer</a> vil den som standard loade hele videoen, før end den begynder at afspille. Har man et 2 min. klip kan det nemt fylde 12 MB i god kvalitet. Det kan betyde at der nemt kan gå 20-30 sek. inden videoen begynder at afspille. Det er man typisk ikke interesseret i. Har man ikke en rigtig streaming server findes der dog alligevel et trick man kan bruge.</p>
<p>Der findes et <a href="http://h264.code-shop.com/trac/wiki/Mod-H264-Streaming-Apache-Version2">H.264-streaming modul til Apache</a>, som er meget nemt at sætte op. Bare følg de par trin på siden, og modulet virker. Når det er sat op, vil Apache kunne levere video fra vilkårlige steder i klippet.</p>
<p>Næste trin er at sætte flowplayer op til at bruge streaming. Her er det javascript-kode jeg bruger til at afspille med:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
  $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    flowplayer<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;player&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
      src<span style="color: #339933;">:</span><span style="color: #3366CC;">'flowplayer-3.1.5.swf'</span><span style="color: #339933;">,</span>
      wmode<span style="color: #339933;">:</span> <span style="color: #3366CC;">'transparent'</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#123;</span>
      clip<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
        autoPlay<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
        autoBuffering<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
        provider<span style="color: #339933;">:</span> <span style="color: #3366CC;">'stream'</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    plugins<span style="color: #339933;">:</span>  <span style="color: #009900;">&#123;</span>
      stream<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
        url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'flowplayer.pseudostreaming-3.1.3.swf'</span>
      <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
      playlist<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'video.mp4'</span><span style="color: #009900;">&#93;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Det der skal lægges mærke til er <code>provider: 'stream'</code> samt</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">stream<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
  url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'flowplayer.pseudostreaming-3.1.3.swf'</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></pre></td></tr></table></div>

<p>Resten er almindelig brug.</p>
<p>Se mere om <a href="http://flowplayer.org/plugins/streaming/pseudostreaming.html">pseudostreaming på flowplayers hjemmeside</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://websmed.dk/2010/03/streaming-med-flowplayer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sådan fik jeg FFmpeg til at lave H.264</title>
		<link>http://websmed.dk/2010/03/sadan-fik-jeg-ffmpeg-til-at-lave-h-264/</link>
		<comments>http://websmed.dk/2010/03/sadan-fik-jeg-ffmpeg-til-at-lave-h-264/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 00:04:42 +0000</pubDate>
		<dc:creator>Morten Blinksbjerg Nielsen</dc:creator>
				<category><![CDATA[Udvikling]]></category>
		<category><![CDATA[apt-get]]></category>
		<category><![CDATA[combatclinic.com]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[h.264]]></category>
		<category><![CDATA[libx264]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mp4]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[x264]]></category>

		<guid isPermaLink="false">http://websmed.dk/?p=241</guid>
		<description><![CDATA[Til mit nye projekt combatclinic.com, som I sikkert har læst alt om ;-) leverer jeg video i H.264-format, og det encoder jeg med FFmpeg. Det viste sig at være lidt mere besværligt at sætte op end jeg havde regnet med, men her er min opskrift: Tilføje følgende linje i /etc/apt/sources.list deb http://www.debian-multimedia.org lenny main non-free [...]]]></description>
			<content:encoded><![CDATA[<p>Til mit nye projekt <a href="http://www.combatclinic.com/">combatclinic.com</a>, som I sikkert har <a href="http://mbn.dk/2010/03/kommende-projekt-combatclinic-com/">læst alt om</a> ;-) leverer jeg video i <a href="http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC">H.264</a>-format, og det encoder jeg med <a href="http://ffmpeg.org/">FFmpeg</a>. Det viste sig at være lidt mere besværligt at sætte op end jeg havde regnet med, men her er min opskrift:</p>
<p>Tilføje følgende linje i <code>/etc/apt/sources.list</code></p>
<p><code>deb http://www.debian-multimedia.org lenny main non-free</code></p>
<p>Kør <code>apt-get update; apt-get install debian-multimedia-keyring</code> for at opdatere pakkelisten.</p>
<p>Nu kan du installere FFmpeg og x264 ved at køre <code>apt-get install ffmpeg x264</code>.</p>
<p>Når du vil encode dine videoer skal du gøre det på følgende måde:</p>
<p><code>ffmpeg -i input.mov -vcodec libx264 output.mp4</code></p>
<p>Det var en meget hurtig guide, men også mest skrevet for at jeg selv kunne huske det til næste gang jeg skal gøre det :)</p>
]]></content:encoded>
			<wfw:commentRss>http://websmed.dk/2010/03/sadan-fik-jeg-ffmpeg-til-at-lave-h-264/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Undgå at folk linker til billeder</title>
		<link>http://websmed.dk/2010/03/undga-at-folk-linker-til-billeder/</link>
		<comments>http://websmed.dk/2010/03/undga-at-folk-linker-til-billeder/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 20:55:35 +0000</pubDate>
		<dc:creator>Morten Blinksbjerg Nielsen</dc:creator>
				<category><![CDATA[Udvikling]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[mod_rewrite]]></category>

		<guid isPermaLink="false">http://websmed.dk/?p=234</guid>
		<description><![CDATA[Hvis man vil undgå at folk linker til ens billeder eller videoer, kan man med mod_rewrite kigge på Referer-headeren, og se om brugeren kommer fra ens eget domæne Her viser jeg hvordan man nægter adgang til .png-filer hvis folk ikke kommer fra www.example.com 1 2 3 RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://www.example.com/ RewriteRule \.png$ – [F] [...]]]></description>
			<content:encoded><![CDATA[<p>Hvis man vil undgå at folk linker til ens billeder eller videoer, kan man med mod_rewrite kigge på Referer-headeren, og se om brugeren kommer fra ens eget domæne</p>
<p>Her viser jeg hvordan man nægter adgang til .png-filer hvis folk ikke kommer fra www.example.com</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">On</span>
<span style="color: #00007f;">RewriteCond</span>  %{HTTP_REFERER}  !^http://www.<span style="color: #00007f;">example</span>.com/
<span style="color: #00007f;">RewriteRule</span> \.png$ – [F]</pre></td></tr></table></div>

<p>[F] betyder <strong>F</strong>orbidden.</p>
<p>Det hjælper selvfølgelig ikke mod de folk der selv kan finde ud af at sætte Referer-headeren, men det hjælper mod almindelige browsere.</p>
]]></content:encoded>
			<wfw:commentRss>http://websmed.dk/2010/03/undga-at-folk-linker-til-billeder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sortering på tabeller</title>
		<link>http://websmed.dk/2010/03/sortering-pa-tabeller/</link>
		<comments>http://websmed.dk/2010/03/sortering-pa-tabeller/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 02:04:55 +0000</pubDate>
		<dc:creator>Morten Blinksbjerg Nielsen</dc:creator>
				<category><![CDATA[Udvikling]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[sortering]]></category>
		<category><![CDATA[tabel]]></category>

		<guid isPermaLink="false">http://websmed.dk/?p=213</guid>
		<description><![CDATA[Hvis der er en ting jeg hader, så er det at lave trivielle tabeller med sortering. Jeg har dog efterhånden fundet den løsning jeg bedst kan li&#8217;. Typisk vil man ha&#8217; noget html som dette: 1 2 3 4 5 &#60;table&#62; &#60;tr&#62; &#60;th&#62;&#60;a href=&#34;list.php?sort=name&#38;amp;type=asc&#34;&#62;Navn&#60;/a&#62;&#60;/th&#62; &#60;th&#62;&#60;a href=&#34;list.php?sort=age&#38;amp;type=asc&#34;&#62;Alder&#60;/a&#62;&#60;/th&#62; [...] Men det er pænt irriterende at generere linket, [...]]]></description>
			<content:encoded><![CDATA[<p>Hvis der er en ting jeg hader, så er det at lave trivielle tabeller med sortering. Jeg har dog efterhånden fundet den løsning jeg bedst kan li&#8217;.</p>
<p>Typisk vil man ha&#8217; noget html som dette:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">table</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">tr</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">th</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;list.php?sort=name&amp;amp;type=asc&quot;</span>&gt;</span>Navn<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">th</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">th</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;list.php?sort=age&amp;amp;type=asc&quot;</span>&gt;</span>Alder<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">th</span>&gt;</span>
[...]</pre></td></tr></table></div>

<p>Men det er pænt irriterende at generere linket, samt holde styr på om man sorterer stigende eller faldende, og der kommer sikkert også andre parametre med ind i URL&#8217;en. Så det har man ikke lyst til. Jeg ved godt at der findes Javascripts der kan sortere tabeller, men det virker kun hvis man ser hele tabellen, og ikke hvis der er flere sider.</p>
<p>Min løsning er at lave en form med nogle skjulte felter, og med manipulere den med jQuery når man klikker på th&#8217;erne.</p>
<p>Min tabel vil så se sådan ud:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">table</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">tr</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">th</span> x:<span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;name&quot;</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;sortable&quot;</span>&gt;</span>Navn<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">th</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">th</span> x:<span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;age&quot;</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;sortable&quot;</span>&gt;</span>Alder<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">th</span>&gt;</span>
[...]</pre></td></tr></table></div>

<p>I mit stylesheet har jeg selvfølgelig en</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="css" style="font-family:monospace;">table th<span style="color: #6666ff;">.sortable</span> <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">cursor</span><span style="color: #00AA00;">:</span><span style="color: #993333;">pointer</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>Og måske en <code>text-decoration:underline</code> så man kan se at man kan trykke på feltet.</p>
<p>Så laver jeg en form med to skjulte felter jeg bruger til at sortere med:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;list.php&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;get&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;form&quot;</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hidden&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;order_by&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;order_by&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&lt;{$smarty.get.order_by|escape|default:&quot;</span><span style="color: #000066;">name</span><span style="color: #ff0000;">&quot;}&gt;</span></span>&quot;/&gt;
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hidden&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;order_type&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;order_type&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&lt;{$smarty.get.order_type|escape|default:&quot;</span>asc<span style="color: #ff0000;">&quot;}&gt;</span></span>&quot;/&gt;
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">form</span>&gt;</span></pre></td></tr></table></div>

<p>Derefter noget jQuery:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;th.sortable&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#order_by&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;x:name&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#order_type&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#order_type&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;desc&quot;</span> <span style="color: #339933;">?</span> <span style="color: #3366CC;">&quot;asc&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;desc&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#form&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">submit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://websmed.dk/2010/03/sortering-pa-tabeller/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Komprimer dit site og øg hastigheden</title>
		<link>http://websmed.dk/2010/01/komprimer-dit-site-og-%c3%b8g-hastigheden/</link>
		<comments>http://websmed.dk/2010/01/komprimer-dit-site-og-%c3%b8g-hastigheden/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 02:02:43 +0000</pubDate>
		<dc:creator>Morten Blinksbjerg Nielsen</dc:creator>
				<category><![CDATA[Udvikling]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[mod_deflate]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zip]]></category>

		<guid isPermaLink="false">http://websmed.dk/?p=203</guid>
		<description><![CDATA[Apache har et lille lækkert modul der hedder mod_deflate, der gør det muligt at gzippe sine sider inden de sendes til brugeren. Det sparer båndbredte og øger hastigheden. På et testsite fyldte forsiden til at begynde med 309 KB. Efter jeg tilføjede mod_deflate til min .htaccess fik jeg sitet ned på 143 KB. Hvilket betyder [...]]]></description>
			<content:encoded><![CDATA[<p>Apache har et lille lækkert modul der hedder <a href="http://httpd.apache.org/docs/2.0/mod/mod_deflate.html">mod_deflate</a>, der gør det muligt at gzippe sine sider inden de sendes til brugeren. Det sparer båndbredte og øger hastigheden.</p>
<p>På et testsite fyldte forsiden til at begynde med 309 KB. Efter jeg tilføjede mod_deflate til min .htaccess fik jeg sitet ned på 143 KB. Hvilket betyder rigtig meget hvis ens site har et stort load. Det kan også have betydning ift. ens placering i søgemaskiner. Da loadtiden bl.a. kan indgå i søgemaskinens vurdering af, hvilken placering siden skal have.</p>
<p>For at bruge mod_deflate skal man indsætte følgende i sin .htaccess:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="apache" style="font-family:monospace;">&lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_deflate.c&gt;
        AddOutputFilterByType DEFLATE text/html text/css
&lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;</pre></td></tr></table></div>

<p>Hvilket aktiverer mod_deflate for text/html og text/css. Man kan selvfølgelig tilføje alle de typer man vil. Det er nok meget nærliggende også at tilføje <code>text/plain</code>, <code>text/xml</code> og <code>application/javascript</code>.</p>
<p>(Bemærk at javascript ikke er <code>text/javascript</code>)</p>
<p>Hvis man er på jagt efter en udelukkende php-løsning kan man tilføje</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">ob_start</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ob_gzhandler&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>I toppen af sine php-filer (eller i en include-fil der inkluderes på alle siderne), men mod_deflate har samme virkning og er nemmere at implementere. Det kræver dog, som med alt andet, at serveren understøtter det. Hvis man laver en</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">phpinfo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Vil man under &#8220;Loaded Modules&#8221; kunne se om modulet er tilgængeligt.</p>
<p>For flere hastighedstips se <a href="/2008/10/nem-caching-af-statiske-filer/">mit indlæg om mod_expires</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://websmed.dk/2010/01/komprimer-dit-site-og-%c3%b8g-hastigheden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spore hvilke links brugeren trykker på</title>
		<link>http://websmed.dk/2010/01/spore-hvilke-links-brugeren-trykker-pa/</link>
		<comments>http://websmed.dk/2010/01/spore-hvilke-links-brugeren-trykker-pa/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 21:48:30 +0000</pubDate>
		<dc:creator>Morten Blinksbjerg Nielsen</dc:creator>
				<category><![CDATA[Udvikling]]></category>
		<category><![CDATA[click]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[mousedown]]></category>

		<guid isPermaLink="false">http://websmed.dk/?p=186</guid>
		<description><![CDATA[I nogen tilfælde vil jeg holde styr på hvilke links brugeren trykker på når vedkommende forlader min side. Normalt vil jeg løse dette ved at tilføje et proxy-script der sender videre. Fx: &#60;a href=&#34;redir.php?url=http://mbn.dk&#34;&#62;mbn.dk&#60;/a&#62; Det gi&#8217;r dog nogle grimme adresser, og problemer hvis brugeren fx vil kopiere adressen og bruge den andre steder. En løsning [...]]]></description>
			<content:encoded><![CDATA[<p>I nogen tilfælde vil jeg holde styr på hvilke links brugeren trykker på når vedkommende forlader min side. Normalt vil jeg løse dette ved at tilføje et proxy-script der sender videre. Fx:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;redir.php?url=http://mbn.dk&quot;</span>&gt;</span>mbn.dk<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span></pre></div></div>

<p>Det gi&#8217;r dog nogle grimme adresser, og problemer hvis brugeren fx vil kopiere adressen og bruge den andre steder.</p>
<p>En løsning som jeg synes er pænere er at bruge noget Javascript der kigger på de events browseren fyrer af når man trykker på et link. Eks:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
  $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a[target=_blank]&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">mousedown</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      $.<span style="color: #660066;">post</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;link_tracker.php&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span> url<span style="color: #339933;">:</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;href&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Efterfølgende skal link_tracker.php samle $_POST['url'] op og behandle den &#8230;</p>
<p>Bemærk at jeg kun matcher de events hvor target-attributten er sat til &#8220;_blank&#8221;. Jeg kan måske ved fordel matche på alle links, og så checke om de starter med &#8220;http://&#8221;. Jeg matcher på mousedown og ikke click af den simple årsag at mousedown matcher mere. Fx midterklik. Dog matcher den ikke hvis man trykker på linket via tastatur, men koden kan nemt udvides til at tage højde for de senarier.</p>
<p>Ovenstående kræver jQuery som jeg loader via:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span></span>
<span style="color: #009900;">        <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.google.com/jsapi&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;</span>
  google.load(&quot;jquery&quot;, &quot;1.3&quot;);
  google.load(&quot;jqueryui&quot;, &quot;1.7&quot;);
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://websmed.dk/2010/01/spore-hvilke-links-brugeren-trykker-pa/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Sprog i Smarty</title>
		<link>http://websmed.dk/2009/12/sprog-i-smarty/</link>
		<comments>http://websmed.dk/2009/12/sprog-i-smarty/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 22:00:07 +0000</pubDate>
		<dc:creator>Morten Blinksbjerg Nielsen</dc:creator>
				<category><![CDATA[Udvikling]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[sprog]]></category>

		<guid isPermaLink="false">http://websmed.dk/?p=166</guid>
		<description><![CDATA[I forlængelse at mit forrige indlæg vil jeg komme med nogle idéer til hvordan man kan tilføje sprogsupport i Smarty. Det jeg gerne vil ende med er en løsning hvor jeg i mine templates kan skrive noget lignende: 1 &#60;h1&#62;&#123;translate&#125;Welcome to my site&#123;/translate&#125;&#60;/h1&#62; Men også 1 &#60;title&#62;&#123;$title&#124;translate&#125;&#60;/title&#62; Jeg vil også kunne angive sproget direkte, fx: [...]]]></description>
			<content:encoded><![CDATA[<p>I forlængelse at mit <a href="/2009/12/sprogstyring-via-mod_rewrite/">forrige indlæg</a> vil jeg komme med nogle idéer til hvordan man kan tilføje sprogsupport i <a href="http://www.smarty.net/">Smarty</a>.</p>
<p>Det jeg gerne vil ende med er en løsning hvor jeg i mine templates kan skrive noget lignende:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="smarty" style="font-family:monospace;"><span style="color: #009000;">&lt;h1&gt;</span><span style="color: #D36900;">&#123;</span>translate<span style="color: #D36900;">&#125;</span>Welcome to my site<span style="color: #D36900;">&#123;</span><span style="color: #D36900;">/</span>translate<span style="color: #D36900;">&#125;</span><span style="color: #009000;">&lt;/h1&gt;</span></pre></td></tr></table></div>

<p>Men også</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="smarty" style="font-family:monospace;"><span style="color: #009000;">&lt;title&gt;</span><span style="color: #D36900;">&#123;</span><span style="color: #00aaff;">$title</span>|translate<span style="color: #D36900;">&#125;</span><span style="color: #009000;">&lt;/title&gt;</span></pre></td></tr></table></div>

<p>Jeg vil også kunne angive sproget direkte, fx:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="smarty" style="font-family:monospace;"><span style="color: #009000;">&lt;html&gt;</span>
&nbsp;
<span style="color: #009000;">&lt;head&gt;</span>
<span style="color: #009000;">&lt;title&gt;</span><span style="color: #D36900;">&#123;</span><span style="color: #00aaff;">$title</span>|translate:<span style="color: #ff0000;">&quot;fr&quot;</span><span style="color: #D36900;">&#125;</span><span style="color: #009000;">&lt;/title&gt;</span>
<span style="color: #009000;">&lt;/head&gt;</span>
&nbsp;
<span style="color: #009000;">&lt;body&gt;</span>
&nbsp;
<span style="color: #009000;">&lt;h1&gt;</span><span style="color: #D36900;">&#123;</span>translate lang<span style="color: #D36900;">=</span><span style="color: #ff0000;">&quot;fr&quot;</span><span style="color: #D36900;">&#125;</span>Welcome to my site<span style="color: #D36900;">&#123;</span><span style="color: #D36900;">/</span>translate<span style="color: #D36900;">&#125;</span><span style="color: #009000;">&lt;/h1&gt;</span>
&nbsp;
<span style="color: #009000;">&lt;/body&gt;</span>
&nbsp;
<span style="color: #009000;">&lt;/html&gt;</span></pre></td></tr></table></div>

<p>Jeg vil aldrig kalde Smarty direkte, men altid via min egen klasse som extend&#8217;er Smarty. Det gør det bl.a. nemmere at sætte diverse indstillinger op. I min egen klasse vil jeg, for at understøtte sprog, tilføje en block og en modifier. Det gør jeg på følgende måde:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> mbnSmarty <span style="color: #000000; font-weight: bold;">extends</span> Smarty <span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">register_modifier</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'translate'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'smarty_m_translate'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">register_block</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'translate'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'smarty_b_translate'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Bagefter skal jeg skrive de to funktioner hhv. <code>smarty_b_translate</code> og <code>smarty_m_translate</code>.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> smarty_b_translate<span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #339933;">,</span> <span style="color: #000088;">$str</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span><span style="color: #000088;">$smarty</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span><span style="color: #000088;">$repeat</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$repeat</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$text</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Text<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$text</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$text</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">translate</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'lang'</span><span style="color: #009900;">&#93;</span> ? <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'lang'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> LANG<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> smarty_m_translate<span style="color: #009900;">&#40;</span><span style="color: #000088;">$str</span><span style="color: #339933;">,</span> <span style="color: #000088;">$lang</span> <span style="color: #339933;">=</span> LANG<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$text</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Text<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$text</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$str</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$text</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">translate</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$lang</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Jeg har i mine eksempler gået ud fra, at der er defineret en LANG-konstant på følgende måde:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;LANG&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;da&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Jeg bruger også en Text-klasse, som I selv må lave :)</p>
]]></content:encoded>
			<wfw:commentRss>http://websmed.dk/2009/12/sprog-i-smarty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sprogstyring via mod_rewrite</title>
		<link>http://websmed.dk/2009/12/sprogstyring-via-mod_rewrite/</link>
		<comments>http://websmed.dk/2009/12/sprogstyring-via-mod_rewrite/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 20:00:05 +0000</pubDate>
		<dc:creator>Morten Blinksbjerg Nielsen</dc:creator>
				<category><![CDATA[Udvikling]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sprog]]></category>

		<guid isPermaLink="false">http://websmed.dk/?p=157</guid>
		<description><![CDATA[En lille idé til hvordan man kan styre sprog via Apaches mod_rewrite. Normalt definerer jeg en konstant ved navn URL der indeholder den absolutte adresse til forsiden af mit website. Fx: 1 define&#40;&#34;URL&#34;, &#34;http://www.example.com&#34;&#41;; Hver gang jeg skal linke i HTML/Smarty eller sende videre via PHP bruger jeg konstanten. Nu vil jeg tilføje sprog som [...]]]></description>
			<content:encoded><![CDATA[<p>En lille idé til hvordan man kan styre sprog via Apaches <a href="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html">mod_rewrite</a>.</p>
<p>Normalt definerer jeg en konstant ved navn URL der indeholder den absolutte adresse til forsiden af mit website. Fx:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;URL&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;http://www.example.com&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Hver gang jeg skal linke i HTML/Smarty eller sende videre via PHP bruger jeg konstanten.</p>
<p>Nu vil jeg tilføje sprog som et ekstra &#8220;lag&#8221; på mine adresser, så jeg fremover kalder example.com/en/about.php for den engelske udgave, og example.com/fr/about.php for den fanske udgave af about.php; men jeg vil ikke have to versioner af about.php liggende.</p>
<p>Derfor laver jeg en lille rewrite-regl der omskriver førnævnte adresser til example.com/about.php?lang=en og example.com/about.php?lang=fr.</p>
<p>Reglen kan ses herunder. Bemærk at jeg kun checker på to a-z og ikke på de tilladte sprog. Det burde man måske gøre.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">On</span>
<span style="color: #00007f;">RewriteRule</span>  ^([a-z]{<span style="color: #ff0000;">2</span>})/(.*)$  $<span style="color: #ff0000;">2</span>?lang=$<span style="color: #ff0000;">1</span> [QSA]</pre></td></tr></table></div>

<p>Jeg tilføjer QSA som betyder <strong>q</strong>uery <strong>s</strong>tring <strong>a</strong>ppend, hvilket gør at eventuelle andre parametre til siden stadig kommer med.</p>
<p>Næste trin bliver at lave noget PHP der behandler ovenstående. Jeg vil typisk sætte min URL-konstant på i en header-fil der bliver inkluderet på alle sider. Før jeg definerer min konstant, laver jeg et check på $_GET['lang'] for at se om den er på listen over tilladte sprog. Er den det liver den tilføjet til konstanten, og på den måde vil alle mine linke indeholde sprogangivelsen.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$valid_languages</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;en&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;de&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;fr&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;da&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'lang'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$valid_languages</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;URL&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;http://www.example.com/&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'lang'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;URL&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;http://www.example.com&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Det kan måske være meget smart at have to konstanter til URL&#8217;en. Én med sprog, og en uden, da det ikke er alle steder man vil angive sprog &#8211; fx billeder, stylesheets og javascript m.m.</p>
]]></content:encoded>
			<wfw:commentRss>http://websmed.dk/2009/12/sprogstyring-via-mod_rewrite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E_NOTICE i PHP</title>
		<link>http://websmed.dk/2009/12/e_notice-i-php/</link>
		<comments>http://websmed.dk/2009/12/e_notice-i-php/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 12:28:20 +0000</pubDate>
		<dc:creator>Morten Blinksbjerg Nielsen</dc:creator>
				<category><![CDATA[Udvikling]]></category>
		<category><![CDATA[error_reporting]]></category>
		<category><![CDATA[e_notice]]></category>
		<category><![CDATA[fejlbehandling]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://websmed.dk/?p=151</guid>
		<description><![CDATA[Jeg ender altid med at kommer i slåskamp med andre php-udviklere omkring notices i koden, fordi min kode laver typisk mange. Hvis man lige har lært at slå notices til i php, vil man måske opfatte en notice som en fejl, men det er det ikke. Hvilket man også kan aflede af navnet &#8211; fejl [...]]]></description>
			<content:encoded><![CDATA[<p>Jeg ender altid med at kommer i slåskamp med andre php-udviklere omkring notices i koden, fordi min kode laver typisk mange. Hvis man lige har lært at slå notices til i php, vil man måske opfatte en notice som en fejl, men det er det ikke. Hvilket man også kan aflede af navnet &#8211; fejl plejer at hedde noget med error.</p>
<p>Jeg gør det typisk altid i if-sætninger for at gøre koden mere overskuelig og letlæselig. Nedenstående to eksempler viser først hvordan jeg plejer at lave mine if-sætninger, og sidste viser hvordan man skal skrive samme kode for at undgå en E_NOTICE.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">is_numeric</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$id</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Man opnår det samme med de to stykker kode, men jeg vil mene at første er noget nemmere at læse.</p>
]]></content:encoded>
			<wfw:commentRss>http://websmed.dk/2009/12/e_notice-i-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
