<?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>qvister &#187; jquery</title>
	<atom:link href="http://qvister.se/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://qvister.se</link>
	<description></description>
	<lastBuildDate>Tue, 01 Nov 2011 12:56:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Beckers Group</title>
		<link>http://qvister.se/2010/11/25/beckers-group/</link>
		<comments>http://qvister.se/2010/11/25/beckers-group/#comments</comments>
		<pubDate>Thu, 25 Nov 2010 12:17:57 +0000</pubDate>
		<dc:creator>Anton Lindqvist</dc:creator>
				<category><![CDATA[Beckers Group]]></category>
		<category><![CDATA[Uppdrag]]></category>
		<category><![CDATA[960gs]]></category>
		<category><![CDATA[bkcsthlm]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://qvister.se/?p=1027</guid>
		<description><![CDATA[Nyligen lanserades Beckers Group nya webbplats där jag har ansvarat all frontend-kod (HTML, CSS och JavaScript). Till detta projekt använde jag mig delvis av 960gs, jQuery och jCarousel. Sajten drivs på baksidan av EPiServer. Koncept, form och programmering (backend) togs fram av BKC STHLM.]]></description>
			<content:encoded><![CDATA[
<p>Nyligen lanserades <a href="http://www.becker.se/" target="_blank">Beckers Group</a> nya webbplats där jag har ansvarat all frontend-kod (HTML, CSS och JavaScript).<span id="more-1027"></span></p>
<p>Till detta projekt använde jag mig delvis av <a href="http://qvister.se/tag/960gs/">960gs</a>, <a href="http://qvister.se/tag/jquery/">jQuery</a> och <a href="http://sorgalla.com/jcarousel/" target="_blank">jCarousel</a>. Sajten drivs på baksidan av EPiServer.</p>
<p>Koncept, form och programmering (backend) togs fram av <a href="http://www.bkcsthlm.se/ny-site-at-beckersgruppen/" target="_blank">BKC STHLM</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://qvister.se/2010/11/25/beckers-group/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PRI Pensionsgarantis webbtjänst</title>
		<link>http://qvister.se/2010/04/12/pri-pensionsgarantis-webbtjanst/</link>
		<comments>http://qvister.se/2010/04/12/pri-pensionsgarantis-webbtjanst/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 19:17:20 +0000</pubDate>
		<dc:creator>Anton Lindqvist</dc:creator>
				<category><![CDATA[PRI Pensionstjänst]]></category>
		<category><![CDATA[Uppdrag]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[applikation]]></category>
		<category><![CDATA[bkcsthlm]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://qvister.se/?p=803</guid>
		<description><![CDATA[Tillsammans med BKC STHLM och Fredrik Hansson har vi vidareutvecklat PRI Pensionsgarantis webbtjänst. Webbtjänsten baseras på EPiServer i grund och botten. Detta kompletteras med en proxy som sköter kommunikationen mellan PRIs databas och klienten (slutanvändaren). Min uppgift i det hela var att ta fram HTML-mallar, CSS samt en del JavaScript. Vi använde givetvis jQuery som [...]]]></description>
			<content:encoded><![CDATA[
<p>Tillsammans med <a href="http://www.bkcsthlm.se/uppdatering-av-pri-pensionsgarantis-webbtjanst/" target="_blank">BKC STHLM</a> och <a href="http://se.linkedin.com/in/fredrikhanssonsthlm" target="_blank">Fredrik Hansson</a> har vi vidareutvecklat PRI Pensionsgarantis webbtjänst.<span id="more-803"></span></p>
<p>Webbtjänsten baseras på EPiServer i grund och botten. Detta kompletteras med en proxy som sköter kommunikationen mellan PRIs databas och klienten (slutanvändaren).</p>
<p>Min uppgift i det hela var att ta fram HTML-mallar, CSS samt en del JavaScript. Vi använde givetvis jQuery som grund och skrev en hel del funktioner på detta gedigna bibliotek.</p>
<p>Utvecklingen har skett med projektmodellen SCRUM, tillsammans med PRIs egna utvecklare som har ansvarat för utvecklingen av tjänsterna som proxyn i sin tur kommunicerar med.</p>
<p>Är du sugen på att pröva på slutresultat så finns det ett <a href="https://www.pri.se/demo" target="_blank">demo</a> tillgängligt. Logga in med användarnamnet &#8220;<em>exempel</em>&#8221; och lösenordet &#8220;<em>exempel</em>&#8220;.</p>
]]></content:encoded>
			<wfw:commentRss>http://qvister.se/2010/04/12/pri-pensionsgarantis-webbtjanst/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fem saker jag gillar med jQuery 1.4</title>
		<link>http://qvister.se/2010/01/15/fem-saker-jag-gillar-med-jquery-1-4/</link>
		<comments>http://qvister.se/2010/01/15/fem-saker-jag-gillar-med-jquery-1-4/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 15:39:04 +0000</pubDate>
		<dc:creator>Anton Lindqvist</dc:creator>
				<category><![CDATA[Blogg]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://qvister.se/?p=583</guid>
		<description><![CDATA[I dagarna släpptes äntligen version 1.4 av JavaScript-biblioteket jQuery. Denna version är fullmatad med nya funktioner och förbättringar. En oerhört finslipad release om du frågar mig. Jag tog mig tiden att läsa igenom loggen med ändringar. Nedan följer en lista över mina fem favoriter. Smidigare konstruktion av element Vid konstruktion av ett nytt element kan [...]]]></description>
			<content:encoded><![CDATA[
<p>I dagarna släpptes äntligen version 1.4 av JavaScript-biblioteket jQuery. Denna version är fullmatad med nya funktioner och förbättringar. En oerhört finslipad release om du frågar mig.<span id="more-583"></span></p>
<p>Jag tog mig tiden att läsa igenom loggen med ändringar. Nedan följer en lista över mina fem favoriter.</p>
<ol>
<li>
<strong>Smidigare konstruktion av element</strong><br />
Vid konstruktion av ett nytt element kan du nu skicka med ett objekt innehållandes egenskaper.</p>
<p><script src="http://gist.github.com/278098.js?file=jquery.construct.js"></script>
</li>
<li>
<strong>Enklare attribut manipulation</strong><br />
Funktioner för att manipulera element så som .<a href="http://api.jquery.com/css">css()</a>, <a href="http://api.jquery.com/attr">.attr()</a>, <a href="http://api.jquery.com/val">.val()</a> och <a href="http://api.jquery.com/html">.html()</a> kan nu ta en funktion som andra parameter. I funktionen kan du enkelt komma åt det befintliga attributets värde.</p>
<p><script src="http://gist.github.com/278098.js?file=jquery.attr.js"></script>
</li>
<li>
<strong>Unik easing metod per egenskap</strong><br />
Det är nu möjligt att definiera en <a href="http://gsgd.co.uk/sandbox/jquery/easing/">easing</a> metod för enskilda egenskaper.</p>
<p><script src="http://gist.github.com/278098.js?file=jquery.easing.js"></script>
</li>
<li>
<strong>Äntligen en riktig delay funktion</strong><br />
Nu är du inte längre tvungen att &#8220;<em>fulhacka</em>&#8221; för att skapa en delay effekt.</p>
<p><script src="http://gist.github.com/278098.js?file=jquery.delay.js"></script>
</li>
<li>
<strong>Ajax anrop tar hänsyn till Last-Modified headern</strong><br />
Tidigare har alla ajax funktioner ignorerat Last-Modified headern. I syfte att ignorera eventuellt cache från webbläsaren. Genom att sätta ifModified till true tvingas jQuery att läsa från webbläsarens cache (förutsagt att något finns).</p>
<p><script src="http://gist.github.com/278098.js?file=jquery.ajax.js"></script>
</li>
</ol>
<p>Om du är sugen på att grotta dig ännu djupare finns en bra redovisning av de nya funktionerna och förbättringarna på kampanjsajten <a href="http://jquery14.com/day-01/jquery-14">14 Days of jQuery</a>.</p>
<p>I sedvanlig ordning tillhandahåller Google <a href="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js">jQuery 1.4</a> (minifierad och gzippad) på deras supersnabba CDN.</p>
<p><em>Bilden tillhörande detta inlägg är lånad ifrån <a href="http://www.flickr.com/photos/equanimity/">Eric Miraglia</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://qvister.se/2010/01/15/fem-saker-jag-gillar-med-jquery-1-4/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>mipi.se, frågan är fri</title>
		<link>http://qvister.se/2009/11/01/mipi-se-fragan-ar-fri/</link>
		<comments>http://qvister.se/2009/11/01/mipi-se-fragan-ar-fri/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 16:15:11 +0000</pubDate>
		<dc:creator>Anton Lindqvist</dc:creator>
				<category><![CDATA[Blogg]]></category>
		<category><![CDATA[24hbc]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://qvister.se/?p=473</guid>
		<description><![CDATA[24 Hour Business Camp är ett underbart initiativ från Ted Valentin och SSES sida. Det hela går ut på att skapa en webbtjänst på 24 timmar i Yasuragis rofyllda miljö. Förra året deltog jag på distans och skapade tillsammans med Morris Packer, Herman Olsson och Rickard Thorman moco.se på garanterat mindre än 24 timmar. Denna [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://www.24hbc.com/">24 Hour Business Camp</a> är ett underbart initiativ från <a href="http://www.tedvalentin.com/">Ted Valentin</a> och <a href="http://www.sses.se/">SSES</a> sida. Det hela går ut på att skapa en webbtjänst på 24 timmar i <a href="http://www.yasuragi.se/">Yasuragis</a> rofyllda miljö. Förra året deltog jag på distans och skapade tillsammans med Morris Packer, Herman Olsson och Rickard Thorman <a href="http://moco.se/">moco.se</a> på garanterat mindre än 24 timmar. Denna gång befann jag mig tillskillnad från förra gången på plats.<span id="more-473"></span></p>
<p>Idéen till projektet <a href="http://mipi.se/">mipi.se</a> spånades redan fram på konferensen <a href="http://qvister.se/2009/06/30/reboot11/">Reboot</a> av mig och Morris Packer. Grundidéen var helt enkelt att kunna skapa en frågeställning för att sedan skicka ut den till en så stor publik som möjligt. Med andra ord frågan är fri.</p>
<p>Under mina 24 timmar skapade jag ett webbaserat gränssnitt för att skapa frågor och se resultatet som uppdateras i realtid. Användningsområdena är redan så här initialt många. Tänk t. ex. om du anordnar en konferens och vill ha din deltagares svar på en viss fråga. Skapa frågan och visa resultatet en storskärm medhjälp av en projektor. Deltagarna kommer på så sätt kunna följa utvecklingen i realtid.</p>
<p>Det hela byggdes i ramverket <a href="http://codeigniter.com/">Codeigniter</a> som jag verkligen har fattat tycke för den senaste tiden. Plus en hel del JavaScript med <a href="http://qvister.se/tag/jquery/">jQuery</a> som grund.</p>
<p>Framtiden för detta projekt ser ljus ut. <a href="http://www.appcorn.se/">Appcorn</a> har sedan en tid tillbaka tagit fram en &#8220;<em>proof of concept</em>&#8221; iPhone applikation som använder sig av Push-protokollet för att skicka ut frågor.</p>
<p>Gillar mipi.se får du gärna <a href="http://www.24hbc.com/2009/10/rosta-pa-dina-favoriter-fran-24hbc.html">rösta på oss</a>. Eller läs mer om <a href="http://www.24hbc.com/2009/10/mipise.html">bakgrunden</a> till detta projekt.</p>
]]></content:encoded>
			<wfw:commentRss>http://qvister.se/2009/11/01/mipi-se-fragan-ar-fri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Några jQuery plugins</title>
		<link>http://qvister.se/2009/09/23/nagra-jquery-plugins/</link>
		<comments>http://qvister.se/2009/09/23/nagra-jquery-plugins/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 05:45:02 +0000</pubDate>
		<dc:creator>Anton Lindqvist</dc:creator>
				<category><![CDATA[Blogg]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://qvister.se/?p=125</guid>
		<description><![CDATA[jQuery är ett JavaScript-bibliotek som verkligen gör allt berörande javascript-utveckling till en ren fröjd. Inte minst p.g.a. all inbyggd funktionalitet i kärnan och den uppsjö av plugins som finns. Beskrivningen på jQuerys officiella hemsida fångar det jag försöker beskriva. jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and [...]]]></description>
			<content:encoded><![CDATA[<p>jQuery är ett JavaScript-bibliotek som verkligen gör allt berörande javascript-utveckling till en ren fröjd. Inte minst p.g.a. all inbyggd funktionalitet i kärnan och den uppsjö av plugins som finns.<span id="more-125"></span></p>
<p>Beskrivningen på <a href="http://jquery.com/">jQuerys</a> officiella hemsida fångar det jag försöker beskriva.</p>
<blockquote><p>jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript.</p></blockquote>
<p>Även jag har dragit mitt strå till stacken genom att dela med mig av några små plugins som jag har utvecklat på egenhand.</p>
<h3>jContact</h3>
<p>En plugin som kan används för att presentera kontaktinfo eller annan viktig information på ett snyggt sätt.</p>
<p><a href="http://qvister.se/wp-content/uploads/jquery/?script=jcontact">Exempel #1</a><br />
<a href="http://drip.se/">Exempel #2</a><br />
<a href="http://github.com/mptre/jcontact/tree/master">Ladda ner jContact</a></p>
<h3>jFields</h3>
<p>Låter dig ge textfält (inputs och textareas) standardvärden som beskriver vad fältet ska innehålla. Detta standardvärde försvinner så fort fältet markeras eller blir aktivt. Denna plugin är användbar om du inte vill använda dig av labels p.g.a. platsbrist eller av estetiska skäl.</p>
<p><a href="http://qvister.se/wp-content/uploads/jquery/?script=jfields">Exempel #1</a><br />
<a href="http://github.com/mptre/jquery-jfields/tree/master">Ladda ner jFields</a></p>
<h3>jCountUp</h3>
<p>Tillåter dig att räkna upp ett elements värde på ett snyggt sätt. Kan vara användbart när man bygger en årtals-navigation eller liknande. Det finns även gott om inställningar så som t ex. hastighet, värde och en callback.</p>
<p><a href="http://qvister.se/wp-content/uploads/jquery/?script=jcountup">Exempel #1</a><br />
<a href="http://vastracity.se/">Exempel #2</a><br />
<a href="http://github.com/mptre/jquery-jcountup/tree/master">Ladda ner jCountUp</a></p>
<h3>jPreloader</h3>
<p>Ersätter submit-knappen med en valfri preloader när en AJAX request utförs. I dagsläget fungerar endast denna plugin med formulär och används tillfördel med <a href="#link-me-up">jForm</a>.</p>
<p><a href="http://qvister.se/wp-content/uploads/jquery/?script=jpreloader">Exempel #1</a><br />
<a href="http://github.com/mptre/jquery-jpreloader/">Ladda ner jPreloader</a></p>
<h3>SimpleBlock</h3>
<p>Till ett kundjobb behövde jag blockera (göra dem &#8220;<em>oklickbara</em>&#8220;) några element under en bestämd tid. Det finns redan en del plugins som löser detta. Dock kändes de allt för tunga i detta fall. Därav skrev jag ihop SimpleBlock som låter dig blockera ett eller flera element under en given tid.</p>
<p><a href="http://qvister.se/wp-content/uploads/jquery/?script=simpleblock">Exempel #1</a><br />
<a href="http://github.com/mptre/jquery-simpleblock/tree/master">Ladda ner SimpleBlock</a></p>
<p>Alla plugins finns tillgängliga på GitHub och är koden är helt och hållet fri. Vilket i praktiken innebär att du har tillåtelse att använda dem och modifiera dem bäst du vill. Har du hittat en bugg eller sitter på lite feedback? Lämna då gärna en kommentar.</p>
<p>Om du själv är sugen på att börja skriva riktiga plugins till jQuery rekommenderar jag denna guide från <a href="http://net.tutsplus.com/videos/screencasts/learn-how-to-create-a-jquery-plugin/">Nettuts</a> och en från <a href="http://www.sitepoint.com/blogs/2009/07/22/how-to-develop-a-jquery-plugin/">SitePoint</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://qvister.se/2009/09/23/nagra-jquery-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bygg kampanjsajter med WordPress</title>
		<link>http://qvister.se/2009/08/06/bygg-kampanjsajter-med-wordpress/</link>
		<comments>http://qvister.se/2009/08/06/bygg-kampanjsajter-med-wordpress/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 10:05:41 +0000</pubDate>
		<dc:creator>Anton Lindqvist</dc:creator>
				<category><![CDATA[Blogg]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[kampanj]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://qvister.se/?p=266</guid>
		<description><![CDATA[Som webbutvecklare har man med stor sannolikhet byggt en del kampanjsajter genom åren. Många kampanjsajter kretsar kring någon form av tävling eller användargenererat innehåll på ett eller annat sätt. Till min glädje har jag på den senaste tiden upptäck att WordPress fungerar som en perfekt grund till dessa sajter. I detta inlägg tänkte jag visa [...]]]></description>
			<content:encoded><![CDATA[<p>Som webbutvecklare har man med stor sannolikhet byggt en del kampanjsajter genom åren. Många kampanjsajter kretsar kring någon form av tävling eller användargenererat innehåll på ett eller annat sätt. Till min glädje har jag på den senaste tiden upptäck att WordPress fungerar som en perfekt grund till dessa sajter. I detta inlägg tänkte jag visa hur man kan gå tillväga, därav kommer det bli mycket teknisk &#8220;<em>mumbo-jumbo</em>&#8221; för den oinvigde.<span id="more-266"></span></p>
<p>Till både <a href="http://qvister.se/2009/05/11/inga-lojliga-bilresor/">inga löjliga bilresor</a> och <a href="http://qvister.se/2009/07/17/sveriges-basta-place-brand-2009/">place brand</a> har jag använt denna metod som beskrivs nedan. Visst kan man istället använda sig av t ex, <a href="http://wordpress.org/extend/plugins/tdo-mini-forms">TDO Mini Forms</a> men jag gillar att ha full kontroll över processen.</p>
<p>Jag är övertygad över att fler än jag har valt WordPress som verktyg till kampanjsajter, t ex. <a href="http://www.tubemusic.se/">Nokia Tube music</a> och <a href="http://www.telefonjacknejtack.se/">Telefonjack? Nej tack</a>. Hjälp mig gärna med att fylla på listan!</p>
<p>Principen är ganska enkel. Vad vi vill åstadkomma är att gemene besökare ska kunna posta ett inlägg (eller tävlingsbidrag) utan att behöva logga in. Detta inlägg ska sedan sparas ned som ett helt vanligt inlägg plus information om användaren. Inlägget sparas som ett utkast per automatik så att administratörerna kan granska det innan publicering. På detta vill vi gärna ha ett skydd emot elak spam och någon form av validering av datan. Så här kan flödet beskrivas.</p>

<p><strong>1. Användaren skickar in sitt bidrag.</strong><br />
Utifrån formuläret vi har skapat skickar användaren in sitt bidrag för granskning.</p>
<p><strong>2. Bidraget körs via Akismet.</strong><br />
All data vi får in ifrån användaren körs via <a href="http://akismet.com/">Akismet</a> för att avgöra om det är spam eller ej. Om det visar sig vara spam avfärdar vi helt enkelt användaren. Om inte går vi vidare till nästa steg.</p>
<p><strong>3. Spara ned bidrag som ett utkast.</strong><br />
Allt verkar stå rätt till och vi sparar slutligen ner bidraget i vår databas på servern.</p>
<p><strong>4. Meddela användaren att bidraget har tagits emot.</strong><br />
Meddela användaren att bidraget har tagits emot på ett eller annat sätt. Detta kan man göra på flera sätt, ett simpel meddelande som presenteras för användaren eller per e-post.</p>
<p>Nu när vi har en bra överbild över vad vi vill åstadkomma är det dags att skrida till verket.</p>
<p>Vad vi först behöver är ett formulär som användaren kan använda för att posta sitt bidrag. Vi behöver en titel och motivering plus lite information om användaren, som t ex. namn, e-post och telefonnummer. Formuläret nedan innehåller allt vi behöver. Tyvärr så strippar WordPress bort <a href="http://sv.wikipedia.org/wiki/Indentering">indenteringen</a>.</p>
<pre>&lt;form action="" method="post"&gt;
 &lt;fieldset&gt;
 &lt;p&gt;
 &lt;legend&gt;Ditt bidrag&lt;/legend&gt;
 &lt;/p&gt;
 &lt;p&gt;
 &lt;label for="campaign-post_title"&gt;Titel&lt;/label&gt;
 &lt;input type="text" name="campaign[post_title]" id="campaign-post_title" /&gt;
 &lt;/p&gt;
 &lt;p&gt;
 &lt;label for="campaign-post_content"&gt;Motivering&lt;/label&gt;
 &lt;textarea name="campaign[post_content]" id="campaign-post_content" rows="8" cols="40"&gt;&lt;/textarea&gt;
 &lt;/p&gt;
 &lt;/fieldset&gt;
 &lt;fieldset&gt;
 &lt;p&gt;
 &lt;legend&gt;Om dig&lt;/legend&gt;
 &lt;/p&gt;
 &lt;p&gt;
 &lt;label for="campaign-post_author_name"&gt;Namn&lt;/label&gt;
 &lt;input type="text" name="campaign[post_author_name]" id="campaign-post_author_name" /&gt;
 &lt;/p&gt;
 &lt;p&gt;
 &lt;label for="campaign-post_author_email"&gt;Email&lt;/label&gt;
 &lt;input type="text" name="campaign[post_author_email]" id="campaign-post_author_email" /&gt;
 &lt;/p&gt;
 &lt;p&gt;
 &lt;label for="campaign-post_author_phone"&gt;Telefon&lt;/label&gt;
 &lt;input type="text" name="campaign[post_author_phone]" id="campaign-post_author_phone" /&gt;
 &lt;/p&gt;
 &lt;/fieldset&gt;
 &lt;p&gt;
 &lt;input type="submit" name="campaign[submit]" value="Posta" id="campaign-submit" /&gt;
 &lt;/p&gt;
&lt;/form&gt;</pre>
<p>Postdatan som skickas när användaren klickar på &#8220;<em>Posta</em>&#8221; måste behandlas av en funktion eller dylikt. I detta fall använder vi oss av en funktion. Personligen föredrar jag att placera denna funktion i functions.php tillhörande temat. Vad funktionen gör är att kolla av om någon har fyllt i formuläret och skickat in uppgifterna. Denna kontroll utförs vid varje pageload med hjälp av WordPress egna funktion <a href="http://codex.wordpress.org/Function_Reference/add_action">add_action</a> som gör det möjligt att binda en funktion till en viss händelse (en s.k. hook). I detta fall binder vi funktionen till &#8220;<em>init</em>&#8221; som står för initialisering (pageload). Det första funktionen gör är att stämma av om postdatan vi söker verkligen har skickats eller inte. Om inte avbryter vi operationen omgående.</p>
<pre>&lt;?php
function mytheme_add_post() {
    global $micro_akismet;

    if (!isset($_POST['campaign']['submit'])) {
        return;
    }
}
add_action('init', 'mytheme_add_post');
?&gt;</pre>
<p>Om man vill kontrollera vissa uppgifter som t ex. att den ifyllda e-postadressen verkligen är en riktig e-postadress ska det ske nu. Förutsagt att man inte gör det innan formuläret skickas med hjälp av JavaScript.</p>
<p>Nästa steg är att kontrollera att uppgifterna vi har fått inte är spam. Detta görs enklast med hjälp av Akismet. Som du säkert redan vet finns det från start ett inbyggt stöd för Akismet när det gäller kommentarerna i WordPress. Dock har jag kommit fram till det är enklare att använda sig <a href="http://vanhegan.net/">Gaby Vanhegans</a> <a href="http://vanhegan.net/software/akismet/">MicroAkismet</a> klass. Jag har själv modifierat klassen lite för att göra det enklare att använda sig av den i WordPress. Denna plugin finns tillgänglig för nedladdning på <a href="http://github.com/mptre/wp-microakismet">GitHub</a>. Observera att denna plugin kräver att du har Akismet pluginen aktiverad och konfigurerad. Efter att både Akismet och MicroAkismet pluggarna är aktiverade och klara kan vi äntligen göra en bedömning om uppgifterna vi fått är spam eller ej.</p>
<pre>$post_data = $_POST['campaign'];
$vars = array(
    'comment_content' =&gt; $post_data['post_content'],
    'comment_author' =&gt; $post_data['post_author_name'],
    'comment_author_email' =&gt; $post_data['post_author_email']
);

if ($micro_akismet-&gt;is_spam($vars)) {
    // We caught a spammer.
} else {
    // Everything's alright.
}</pre>
<p>Om allt är frid och fröjd (ingen spam) kan vi spara ned uppgifterna som ett inlägg med hjälp av funktionen <a href="http://codex.wordpress.org/Function_Reference/wp_insert_post">wp_insert_post</a>. Denna funktion tar en array innehållandes en massa argument som första och enda parameter. Vi vill spara inlägget men inte publicera det på direkten för att ge administratörerna en chans att bedöma om inlägget ska publiceras eller inte. Värt att notera är att  vi inte behöver escape:a den inkommande datan eftersom wp_insert_post gör det i syfte att skydda mot <a href="http://en.wikipedia.org/wiki/Sql_injections">SQL-injektioner</a> och annat otyg.</p>
<pre>$new_post = array(
    'post_title' =&gt; $post_data['post_title'],
    'post_content' =&gt; $post_data['post_content'],
    'post_status' =&gt; 'pending',
    'post_author' =&gt; 2,
    'post_category' =&gt; array(10)
);

if ($post_id = (int)wp_insert_post($new_post)) {
    // Post inserted successfully.
} else {
    // Something went wrong.
}</pre>
<p>Det kan vara bra att sätta upp ett användarkonto som får agera skribent åt alla bidrag. Byt ut post_author värde mot användarens id-nummer. Detsamma gäller även kategorier. Man vill med stor sannolikhet tilldela inlägget kategorin Tävling eller liknande. Notera att post_category argumentet alltid måste vara en array, även fast det bara handlar om en kategori. Byt ut post_category&#8217;s värde mot id-numret på din eller dina kategorier. För en fullständig dokumentation över alla tillgängliga argument rekommenderar jag dig att läsa igenom dokumentation för funktionen hos <a href="http://codex.wordpress.org/Function_Reference/wp_insert_post">WordPress</a>.</p>
<p>Nu när inlägget är har sparats vill vi också spara ner uppgifterna om skribenten. Detta gör vi enklast med hjälp av WordPress egna <a href="http://codex.wordpress.org/Custom_Fields">custom fields</a>. På så sätt försäkrar vi oss om att uppgifterna endast tillhör vårt nyligen sparade inlägg.</p>
<pre>&lt;?php
$post_author = array(
    'post_author_name' =&gt; $post_data['post_author_name'],
    'post_author_email' =&gt; $post_data['post_author_email'],
    'post_author_phone' =&gt; $post_data['post_author_phone']
);

foreach ($post_author as $key =&gt; $val) {
    add_post_meta($post_id, $key, $val);
}
?&gt;</pre>
<p>Om du sedan i ditt tema vill visa upp t ex. skribentens namn kan du använda dig av funktionen <a href="http://codex.wordpress.org/Custom_Fields">get_post_meta</a>. Notera denna funktion måste användas innanför <a href="http://codex.wordpress.org/The_Loop">post-loopen</a>.</p>
<pre>&lt;?php echo get_post_meta($post-&gt;ID, 'post_author_name', TRUE); ?&gt;</pre>
<p>Då var det (nästan) klart! Personligen föredrar jag att &#8220;<em>ajax:ifera</em>&#8221; mina formulär för att skapa en trevligare upplevelse. Detta görs enklast med hjälp av <a href="http://jquery.com/">jQuery</a> och <a href="http://malsup.com/jquery/form/">jForm</a>. Om du bestämmer dig för att använda Ajax är det bra att skicka tillbaka en respons lätt kan tolkas med JavaScript. JSON är rätt det rätta valet för detta jobb. Så här kan en respons se ut i vår funktion.</p>
<pre>&lt;?php
$response = array(
    'status' =&gt; 1,
    'message' =&gt; 'Your post has been submitted!'
);

die(print(json_encode($response)));
?&gt;</pre>
<p>Jag har satt ihop ett demo med all kod ovan, baserat på WordPress default tema. Glöm inte heller att installera <a href="http://github.com/mptre/wp-microakismet">MicroAkismet</a> pluginen innan.</p>
<p><a href="http://qvister.se/wp-content/uploads/qvister_campaign_theme.zip">Ladda ner demot här</a></p>
<p>Det här är min första renodlade guide. Därav uppskattas all form av feedback och konstruktiv kritik. Gör gärna din röst hörd bland kommentarerna om du har synpunkter eller frågor.</p>
<p><em>Thumbnailen tillhörande detta inlägg är lånad ifrån <a href="http://www.flickr.com/photos/jeremygetscash/2648946793/">jmaclynn</a>.<br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://qvister.se/2009/08/06/bygg-kampanjsajter-med-wordpress/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Spåra utgående länkar med Google Analytics</title>
		<link>http://qvister.se/2008/11/12/spara-utgaende-lankar-med-google-analytics/</link>
		<comments>http://qvister.se/2008/11/12/spara-utgaende-lankar-med-google-analytics/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 08:24:37 +0000</pubDate>
		<dc:creator>Anton Lindqvist</dc:creator>
				<category><![CDATA[Blogg]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://qvister.se/?p=106</guid>
		<description><![CDATA[Ibland kan det vara intressant eller rent ut sagt nödvändigt att se hur många som klickar på ens utgående länkar. Detta är givetvis möjligt med Google Analytics, dock är det inget som sker från start. Utan man behöver lägga till ett onClick-attribut på varje utgående länk. Att göra det här &#8220;manuellt&#8221; är inget jag vill [...]]]></description>
			<content:encoded><![CDATA[<p>Ibland kan det vara intressant eller rent ut sagt nödvändigt att se hur många som klickar på ens utgående länkar. Detta är givetvis möjligt med Google Analytics, dock är det inget som sker från start. Utan man behöver lägga till ett onClick-attribut på varje utgående länk. Att göra det här &#8220;<em>manuellt</em>&#8221; är inget jag vill ödsla tid på. Istället kan man lösa det med en liten bit JavaScript.<span id="more-106"></span></p>
<p>Personligen föredrar jag att använda mig JavaScript-biblioteket <a rel="external" href="http://jquery.com/">jQuery</a>.</p>
<p>Principen är den att varje gång någon för musen över en länk som har attributen rel=external (d.v.s en utgående länk) läggs onClick-attributen på så att den kan spåras via Google Analytics. OBS Google Analytics koden måste komma före alla utgående länkar, annars kommer inga klick registreras. Förslagsvis lägger du Google Analytics koden precis innan body:n avslutas.</p>
<pre>$(document).ready(function() {
    $('a[rel=external]').hover(function() {
        var href = $(this).attr('href');
        $(this).attr('onClick', 'javascript: pageTracker._trackPageview(\'/outgoing/' + href + '\');');

        return false;
    },function() {
    return false;
    });
});</pre>
<p>Notera att det kan upp till 24-48 timmar innan dina utgående länkar dyker upp i Google Analytics. De utgående länkarna kommer du sedan hitta under Content &gt; Top Content. T ex. kommer länken www.example.com listas som /outgoing/www.example.com i Google Analytics. Läs mer om utgående länkar hos <a onclick="javascript: pageTracker._trackPageview('/outgoing/http://www.google.com/support/analytics/bin/answer.py?hl=en&amp;answer=55527');" rel="external" href="http://www.google.com/support/analytics/bin/answer.py?hl=en&amp;answer=55527" target="_blank">Google</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://qvister.se/2008/11/12/spara-utgaende-lankar-med-google-analytics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

