<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <channel>
    
    <title>Low Weblog</title>
    <link>http://loweblog.com/</link>
    <description>Developer blog by Lodewijk Schutte ~ Low, about ExpressionEngine and more.</description>
    <dc:language>en</dc:language>
    <dc:creator>Low</dc:creator>
    <dc:rights>Copyright 2010</dc:rights>
    <dc:date>2010-02-02T11:33:28+00:00</dc:date>
    <admin:generatorAgent rdf:resource="http://expressionengine.com/" />
    

    <item>
      <title>Custom images with Low Variables</title>
      <link>http://loweblog.com/feeder/?FeederAction=clicked&amp;feed=Dev&amp;seed=http%3A%2F%2Floweblog.com%2Ffreelance%2Farticle%2Fcustom-images-with-low-variables%2F&amp;seed_title=Custom+images+with+Low+Variables</link>
      <guid>http://loweblog.com/freelance/article/custom&#45;images&#45;with&#45;low&#45;variables/</guid>
      <description>If you need to give your users the ability to change the header or masthead image of their site, then Low Variables for ExpressionEngine comes in handy once again. And as an added bonus, if you throw in the Low Random plugin, creating rotating headers or mastheads is a piece of cake.</description>
      <dc:subject>Add&#45;Ons, ExpressionEngine, Low Variables</dc:subject>
      <content:encoded><![CDATA[<p>If you need to give your users the ability to change the header or masthead image of their site, then <a href="http://loweblog.com/software/low-variables/">Low Variables</a> for <a href="http://expressionengine.com/index.php?affiliate=lodewijk">ExpressionEngine</a> comes in handy once again. And as an added bonus, if you throw in the <a href="http://loweblog.com/software/low-random/">Low Random plugin</a>, creating rotating headers or mastheads is a piece of cake.</p>
<h2>Custom header image</h2>
<p>In this example, we&#8217;ve defined the default header image in a CSS file. We&#8217;ll override that by adding a <code>&#60;style&#62;</code> block to our templates. But first, we need to create a variable with type &#8216;Select Files&#8217;. Let&#8217;s name the variable <code>&#123;my_custom_header&#125;</code>. Select the upload destination(s) that the user can choose images from and check the &#8216;Allow uploads&#8217; checkbox.</p>
<p><a href="http://loweblog.com/images/lvex4_imgvar.png" rel="lightbox[lvex]" title="Low Variables: Select Files variable type"><img src="http://loweblog.com/images/lvex4_imgvar_thumb.png" width="151" height="100" alt="Low Variables: Edit Variable form for Select Files variable type" /></a></p>
<p>Then, just add this code to your templates:</p>
<pre><code>&#60;style type="text/css"&#62;
	#header &#123;background-image:url(&#123;my_custom_header&#125;)&#125;
&#60;/style&#62;</code></pre>
<h2>Random masthead image</h2>
<p>For a random image, create a similar variable, for example <code>&#123;my_custom_masthead&#125;</code>. Enable early parsing and allow for multiple files to be selected. We need early parsing to be enabled, because we&#8217;re using the variable as input for the Low Random plugin.</p>
<p><a href="http://loweblog.com/images/lvex4_imgvar2.png" rel="lightbox[lvex]" title="Low Variables: Multiple Select Files variable type"><img src="http://loweblog.com/images/lvex4_imgvar2_thumb.png" width="229" height="100" alt="Low Variables: screenshot Select Files variable type" /></a></p>
<p>Here&#8217;s how it would look in our templates:</p>
<pre><code>&#60;img src="&#123;exp:low_random:items&#125;&#123;my_custom_masthead&#125;&#123;/exp:low_random:items&#125;" alt="" /&#62;</code></pre>
<p>That&#8217;s all there is to it; custom and random images with <a href="http://loweblog.com/software/low-variables/">Low Variables</a>.</p>
]]></content:encoded>
      <dc:date>2010-02-02T11:33:28+00:00</dc:date>
    </item>

    <item>
      <title>Multiple languages with Low Variables</title>
      <link>http://loweblog.com/feeder/?FeederAction=clicked&amp;feed=Dev&amp;seed=http%3A%2F%2Floweblog.com%2Ffreelance%2Farticle%2Fmultiple-languages-with-low-variables%2F&amp;seed_title=Multiple+languages+with+Low+Variables</link>
      <guid>http://loweblog.com/freelance/article/multiple&#45;languages&#45;with&#45;low&#45;variables/</guid>
      <description>If you&#8217;ve ever built a multilingual website, you know just how many bits of text needs to be translated. In ExpressionEngine, the logical place to put this content, is in weblogs/channels. However, for some data that might not be appropriate. This is where Low Variables comes in handy.</description>
      <dc:subject>Add&#45;Ons, ExpressionEngine, Low Variables</dc:subject>
      <content:encoded><![CDATA[<p>If you&#8217;ve ever built a multilingual website, you know just how many bits of text needs to be translated. In <a href="http://expressionengine.com/index.php?affiliate=lodewijk">ExpressionEngine</a>, the logical place to put this content, is in weblogs/channels. However, for some data that might not be appropriate. This is where <a href="http://loweblog.com/software/low-variables/">Low Variables</a> comes in handy.</p>
<p><a href="http://expressionengine.com/index.php?affiliate=lodewijk&#38;page=/wiki/Multi_language_site_alternative/">Multilingual sites in ExpressionEngine 1.6.x</a> often use a Path.php variable to determine the current language. Something like this, perhaps:</p>
<pre><code>$global_vars['country_code'] = 'es';</code></pre>
<p>Let&#8217;s take this approach and apply it to Low Variables.</p>
<p>Create a variable for each piece of text that needs to be translated. Make sure Early Parsing is turned off for these variables. In my example, I created these: <code>&#123;low_snippets_payoff_en&#125;</code>, <code>&#123;low_snippets_payoff_es&#125;</code>, <code>&#123;low_snippets_footer_en&#125;</code> and <code>&#123;low_snippets_footer_es&#125;</code>.</p>
<p><a href="/images/screenshots/lvex3_multilang.png" rel="lightbox" title="Multiple languages with Low Variables"><img src="/images/screenshots/lvex3_multilang_thumb.png" alt="Screenshot: Low Variables with text inputs" /></a></p>
<p>Then, all you have to do in your templates, is add these variables, combined with the Path.php variable we made earlier:</p>
<pre><code>&#60;p id="payoff"&#62;&#123;low_snippets_payoff_&#123;country_code&#125;&#125;&#60;/p&#62;

&#60;!-- More code --&#62;

&#60;p id="footer"&#62;&#123;low_snippets_footer_&#123;country_code&#125;&#125;&#60;/p&#62;</code></pre>
<p>But don&#8217;t stop there; all static bits of text throughout your templates can be treated like this. Your users will hug you and send you flowers &#8217;cause they can now edit them without the heartache!</p>
]]></content:encoded>
      <dc:date>2010-01-22T11:56:05+00:00</dc:date>
    </item>

    <item>
      <title>Lowcoaholic</title>
      <link>http://loweblog.com/feeder/?FeederAction=clicked&amp;feed=Dev&amp;seed=http%3A%2F%2Floweblog.com%2Ffreelance%2Farticle%2Flowcoaholic%2F&amp;seed_title=Lowcoaholic</link>
      <guid>http://loweblog.com/freelance/article/lowcoaholic/</guid>
      <description>Last Friday I had a chat with friend and fellow ExpressionEngine add&#45;on developer Elwin Zuiderveld (whom you may know as Cocoaholic). Elwin&#8217;s currently very busy developing iPhone apps, which leaves him very little time to take care of his add&#45;ons, let alone migrate them to EE2.0. Some of those, like the Category Checkboxes extension, have become obsolete due to the new Control Panel. Others, like Reeorder and Navigator, can and should be ported to 2.0.
Elwin and I have agreed that I will take over development for these add&#45;ons. I&#8217;m not sure exactly when, but you can expect something like a Low Reeorder or Low Navigator in the near future. If you&#8217;re using any of Elwin&#8217;s add&#45;ons and want to see them ported to 2.0, let me know, along with any feature requests. I&#8217;ll do my best to add a little Low&#45;sauce while I&#8217;m at it. Thanks to Elwin for not letting his work wither and die &#8212; there&#8217;s a bottle of Pouilly&#45;Fuiss&#233; here with your name on it, buddy!</description>
      <dc:subject>Add&#45;Ons, Announcements, ExpressionEngine</dc:subject>
      <content:encoded><![CDATA[<p>Last Friday I had a chat with friend and fellow <a href="http://expressionengine.com/index.php?affiliate=lodewijk">ExpressionEngine</a> add-on developer <a href="http://elwinzuiderveld.nl/">Elwin Zuiderveld</a> (whom you may know as <a href="http://twitter.com/Cocoaholic">Cocoaholic</a>). Elwin&#8217;s currently very busy developing iPhone apps, which leaves him very little time to take care of <a href="http://devot-ee.com/developers/ee/cocoaholic/">his add-ons</a>, let alone migrate them to EE2.0. Some of those, like the <a href="http://devot-ee.com/add-ons/extensions/category-checkboxes/">Category Checkboxes</a> extension, have become obsolete due to the new Control Panel. Others, like <a href="http://devot-ee.com/add-ons/modules/reeorder/">Reeorder</a> and <a href="http://devot-ee.com/add-ons/modules/navigator/">Navigator</a>, can and should be ported to 2.0.</p>
<p>Elwin and I have agreed that I will take over development for these add-ons. I&#8217;m not sure exactly when, but you can expect something like a Low Reeorder or Low Navigator in the near future. If you&#8217;re using any of Elwin&#8217;s add-ons and want to see them ported to 2.0, let me know, along with any feature requests. I&#8217;ll do my best to add a little Low-sauce while I&#8217;m at it. Thanks to Elwin for not letting his work wither and die &#8212; there&#8217;s a bottle of Pouilly-Fuiss&#233; here with your name on it, buddy!</p>
]]></content:encoded>
      <dc:date>2010-01-18T13:04:16+00:00</dc:date>
    </item>

    <item>
      <title>Customize tags with Low Variables</title>
      <link>http://loweblog.com/feeder/?FeederAction=clicked&amp;feed=Dev&amp;seed=http%3A%2F%2Floweblog.com%2Ffreelance%2Farticle%2Fcustomize-tags-with-low-variables%2F&amp;seed_title=Customize+tags+with+Low+Variables</link>
      <guid>http://loweblog.com/freelance/article/customize&#45;tags&#45;with&#45;low&#45;variables/</guid>
      <description>In this second example on how to use Low Variables to your advantage, I&#8217;ll show you how to use it to control your ExpressionEngine tags. In this case, it will result in a customizable home page, where you can change the type and number of articles shown, whether to show a sidebar or not and the ability to edit bits of text otherwise hardcoded in your templates.</description>
      <dc:subject>Add&#45;Ons, ExpressionEngine, Low Variables</dc:subject>
      <content:encoded><![CDATA[<p>In this second example on how to use <a href="http://loweblog.com/software/low-variables/">Low Variables</a> to your advantage, I&#8217;ll show you how to use it to control your <a href="http://expressionengine.com/index.php?affiliate=lodewijk">ExpressionEngine</a> tags. In this case, it will result in a customizable home page, where you can change the type and number of articles shown, whether to show a sidebar or not and the ability to edit bits of text otherwise hardcoded in your templates.</p>
<p><a href="/images/screenshots/lvex2_home.png" title="Sandbox home page" rel="lightbox[lvex]"><img src="/images/screenshots/lvex2_home_thumb.png" width="150" height="123" alt="Sandbox site" /></a></p>
<p>Let&#8217;s take a look at the current home page of the sandbox site. There&#8217;s a heading that reads &#8220;Latest news&#8221;. Below that are two articles. There&#8217;s also a sidebar with some contact information. In order to customize the home page, we&#8217;ll need to add a couple of variables. Here&#8217;s what I added:</p>
<ul class="spaced">
<li><code>&#123;low_home_heading&#125;</code>: to edit the heading. Variable type: Text Input.</li>
<li><code>&#123;low_home_categories&#125;</code>: so the user can select categories from which to pull entries. Variable type: Select Categories (see image below).</li>
<li><code>&#123;low_home_status&#125;</code>: so the user can select the statuses of entries to show. Variable type: Checkbox group.</li>
<li><code>&#123;low_home_limit&#125;</code>: so the user can select how many entries are shown on the home page. Variable type: Radio group.</li>
<li><code>&#123;low_home_no_results&#125;</code>: the message shown if no entries match the given criteria. Variable type: Textarea.</li>
<li><code>&#123;low_home_sidebar&#125;</code>: option to show or hide the sidebar. Variable type: Checkbox.</li>
</ul>
<p><a href="/images/screenshots/lvex2_catvar.png" title="Low Variables: Select Categories variable type" rel="lightbox[lvex]"><img src="/images/screenshots/lvex2_catvar_thumb.png" width="150" height="123" alt="Edit Variable screen" /></a> <a href="/images/screenshots/lvex2_homevars.png" title="Low Variables: variables grouped as Home" rel="lightbox[lvex]"><img src="/images/screenshots/lvex2_homevars_thumb.png" width="150" height="123" alt="Low Variables home screen, group Home" /></a></p>
<p><code>&#123;low_home_heading&#125;</code> and <code>&#123;low_home_no_results&#125;</code> do not need <a href="http://loweblog.com/software/low-variables/#manage">early parsing</a> to be enabled, but the others do. They are used as input for the &#123;exp:weblog:entries&#125; tag in the template. <code>&#123;low_home_sidebar&#125;</code> is used as a global conditional. Here&#8217;s how the template might look:</p>
<pre><code>&#60;div id="content"&#62;

	&#60;div id="primary"&#62;
		&#60;h2&#62;&#123;low_home_heading&#125;&#60;/h2&#62;
		&#123;exp:weblog:entries category="&#123;low_home_categories&#125;" status="&#123;low_home_status&#125;" limit="&#123;low_home_limit&#125;"&#125;
			&#60;div class="article"&#62;
				&#60;h3&#62;&#123;title&#125;&#60;/h3&#62;
				&#123;body&#125;
			&#60;/div&#62;
			&#123;if no_results&#125;
				&#60;p&#62;&#123;low_home_no_results&#125;&#60;/p&#62;
			&#123;/if&#125;
		&#123;/exp:weblog:entries&#125;
	&#60;/div&#62;

	&#123;if low_home_sidebar == 'y'&#125;
	&#60;div id="aside"&#62;
		&#60;!-- Sidebar here --&#62;
	&#60;/div&#62;
	&#123;/if&#125;

&#60;/div&#62;</code></pre>
<p>There you go! You can use <a href="http://loweblog.com/software/low-variables/">Low Variables</a> to customize your template tags without the heartache!</p>
]]></content:encoded>
      <dc:date>2010-01-14T15:32:13+00:00</dc:date>
    </item>

    <item>
      <title>Manage contact data with Low Variables</title>
      <link>http://loweblog.com/feeder/?FeederAction=clicked&amp;feed=Dev&amp;seed=http%3A%2F%2Floweblog.com%2Ffreelance%2Farticle%2Fmanage-contact-data-with-low-variables%2F&amp;seed_title=Manage+contact+data+with+Low+Variables</link>
      <guid>http://loweblog.com/freelance/article/manage&#45;contact&#45;data&#45;with&#45;low&#45;variables/</guid>
      <description>This is the first in a series of posts where I give you some examples on how to use Low Variables to your advantage. In this example, I&#8217;ll explain how Low Variables can be used to manage contact data in ExpressionEngine.</description>
      <dc:subject>Add&#45;Ons, ExpressionEngine, Low Variables</dc:subject>
      <content:encoded><![CDATA[<p>This is the first in a series of posts where I give you some examples on how to use <a href="http://loweblog.com/software/low-variables/">Low Variables</a> to your advantage. In this example, I&#8217;ll explain how <a href="http://loweblog.com/software/low-variables/">Low Variables</a> can be used to manage contact data in <a href="http://expressionengine.com/index.php?affiliate=lodewijk">ExpressionEngine</a>.</p>
<p>Say you want the company name, address and other contact data displayed on the site. Basically, this is vCard information, which you might want to re-use. On my sandbox site, I&#8217;m using the company name in the footer, the full address on the contact page, marked up using the <a href="http://microformats.org/wiki/hcard">hCard microformat</a>, and the email address is also used as the contact form recipient.</p>
<p><a href="/images/screenshots/lvex_contact.png" title="Contact page on Sandbox site" rel="lightbox[lvex1]"><img src="/images/screenshots/lvex_contact-thumb.png" width="150" height="128" alt="Example contact page" /></a></p>
<p>In order to re-use the data properly, we&#8217;ll create four variables: <code>&#123;low_contact_fn&#125;</code>, <code>&#123;low_contact_street-address&#125;</code>, <code>&#123;low_contact_locality&#125;</code> and <code>&#123;low_contact_email&#125;</code>. I&#8217;m using the prefix <code>low</code>, so regular users can edit them. The middle part of the variable name, <code>contact</code> groups them in the same group (you might also want to check out my <a href="http://www.youtube.com/watch?v=O1WwgmOrXtU">Introduction to Low Variables screencast on YouTube</a>). I&#8217;ve changed the type of each variable to Text Input. For <code>&#123;low_contact_email&#125;</code>, I enabled Early Parsing (so I can use it as input for other tags) and I&#8217;ve added a regular expression to the Pattern field, so only valid email addresses can be saved.</p>
<p><a href="/images/screenshots/lvex_contact_vars.png" title="Low Variables: Contact group" rel="lightbox[lvex1]"><img src="/images/screenshots/lvex_contact_vars-thumb.png" width="150" height="128" alt="Contact variables" /></a> <a href="/images/screenshots/lvex_email_var.png" title="Low Variables: email variable details" rel="lightbox[lvex1]"><img src="/images/screenshots/lvex_email_var-thumb.png" width="150" height="128" alt="" /></a></p>
<p>That only leaves the template bit. Here&#8217;s how that might look:</p>
<pre><code>&#60;div id="footer"&#62;&#38;copy; &#123;current_time format="%Y"&#125; - &#123;low_contact_fn&#125;&#60;/div&#62;</code></pre>
<pre><code>&#60;div class="vcard"&#62;
	&#60;span class="fn"&#62;&#123;low_contact_fn&#125;&#60;/span&#62;&#60;br /&#62;
	&#60;span class="street-address"&#62;&#123;low_contact_street-address&#125;&#60;/span&#62;&#60;br /&#62;
	&#60;span class="locality"&#62;&#123;low_contact_locality&#125;&#60;/span&#62;&#60;br /&#62;
	&#60;a class="email" href="mailto:&#123;low_contact_email&#125;"&#62;&#123;low_contact_email&#125;&#60;/a&#62;
&#60;/div&#62;</code></pre>
<pre><code>&#123;exp:email:contact_form recipients="&#123;low_contact_email&#125;"&#125;
	&#60;!-- the contact form --&#62;
&#123;/exp:email:contact_form&#125;</code></pre>
<p>That&#8217;s it! You can now use <a href="http://loweblog.com/software/low-variables/">Low Variables</a> to manage contact data without the heartache!</p>
]]></content:encoded>
      <dc:date>2010-01-08T16:21:21+00:00</dc:date>
    </item>

    <item>
      <title>Introducing Low Variables</title>
      <link>http://loweblog.com/feeder/?FeederAction=clicked&amp;feed=Dev&amp;seed=http%3A%2F%2Floweblog.com%2Ffreelance%2Farticle%2Fintroducing-low-variables%2F&amp;seed_title=Introducing+Low+Variables</link>
      <guid>http://loweblog.com/freelance/article/introducing&#45;low&#45;variables/</guid>
      <description>Footer text, logo, the recipient of a contact form, the number of articles on the home page, selection of rotating header images&#8230; These are but a few examples of site&#45;wide content and settings you might encounter when building a web site. Settings you also might want to modify every now and then. Using our CMS of choice &#8212; ExpressionEngine &#8212; there are a couple of ways to set this up, but none of them ever felt right to me. But now, there&#8217;s another option.</description>
      <dc:subject>Add&#45;Ons, Announcements, ExpressionEngine, Low Variables</dc:subject>
      <content:encoded><![CDATA[<p>Footer text, logo, the recipient of a contact form, the number of articles on the home page, selection of rotating header images&#8230; These are but a few examples of site-wide content and settings you might encounter when building a web site. Settings you also might want to modify every now and then. Using our <abbr title="Content Management System">CMS</abbr> of choice &#8212; <a href="http://expressionengine.com/index.php?affiliate=lodewijk">ExpressionEngine</a> &#8212; there are a couple of ways to set this up, but none of them ever felt right to me. But now, there&#8217;s another option.</p>
<h2>Birth</h2>
<p>As most EE Add-ons, <strong>Low Variables</strong> was born out of necessity. I wanted to give regular users access to the <a href="http://expressionengine.com/docs/templates/globals/user_defined.html">User Defined Global Variables</a>, without giving them access to the Templates section. Basically, I&#8217;d be giving them the ability to edit static bits of content throughout the site. <a href="http://twitter.com/low/status/5823120447">I asked</a> if it was a good idea and I got enough response to go ahead with my plan.</p>
<h2>Baby steps</h2>
<p>Completely ignoring <a href="http://twitter.com/reedmaniac">Paul Burdick</a>&#8217;s <a href="http://www.slideshare.net/reedmaniac/addon-development-ee-expects-that-every-developer-will-do-his-duty-2494809/39">advice</a>, I just started coding, thinking it would be a small job. And it was, at first. I had a very basic version of what I had in mind up and running in no time. But then it hit me: with a bit more effort, I could take it a step further. And with even more effort, I could take it a <em>lot</em> further. Gotta love your own, self-induced scope creep.</p>
<h2>Adolescence</h2>
<p>Inspired by <a href="http://devot-ee.com/add-ons/extensions/fieldframe/">the most popular EE Add-on</a>, I started to rebuild the basic structure of the module, allowing for <em>Variable Types</em>. Before I knew it, I had a handful of different Types and a setup that would allow for many more. Then it hit me again: people might pay for this. <a href="http://twitter.com/brandonkelly">Brandon Kelly</a>&#8217;s presentation at <a href="http://www.eeci2009.com/">EECI2009</a> had already <a href="http://www.slideshare.net/brandonkelly212/make-a-market-out-of-our-community-the-whys-and-hows-of-selling-addons-2493262/33">nudged me</a> in that direction, so I decided I&#8217;d make this my first commercial add-on.</p>
<h2>Adulthood, almost</h2>
<p><strong>Low Variables</strong> could well be the answer to Life, the Universe, and Everything EE, so I thought a price tag of 42 USD would be appropriate. However, it turned out that selling software online <a href="http://twitter.com/low/status/6006448557">isn&#8217;t as easy</a> as it seems, especially if you want to do it right for the Dutch/European tax laws. Eventually, I caved in and settled for a price in Euros instead: 29.75 (which, depending on the rates, is about 42 bucks).</p>
<p>So there you have it. Available today, for the bargain price of &#8364;29.75: <a href="http://loweblog.com/software/low-variables/"><strong>Low Variables</strong></a>. An ExpressionEngine add-on that takes User Defined Global Variables, Fresh Variables and FieldFrame and puts them in a blender to make a shiny new smoothee.</p>
<h2>Be gentle&#8230; It&#8217;s my first time</h2>
<p>PayPal is used to handle the purchases and refunds are given within 30 days. Please note that, since it&#8217;s the first time I actually sell stuff online, things might not go as planned. If that&#8217;s the case, please let me know, and I&#8217;ll sort things out. As for support, I&#8217;m giving <a href="http://getsatisfaction.com/low/products/low_low_variables">Get Satisfaction</a> a go, so go there for bug reports, questions and ideas.</p>
<h2>Future plans</h2>
<p>The current version of <a href="http://loweblog.com/software/low-variables/">Low Variables</a> is compatible with <strong>EE 1.6.8</strong>. There will also be a 2.x compatible version available later. As soon as it is, a single license will allow you to use either the 1.6.8 or the 2.x compatible version, in the same way EllisLab is doing with EE 2.0 PB at the moment.</p>
<p>Many thanks to <a href="http://brandon-kelly.com/">Brandon Kelly</a>, <a href="http://twitter.com/jamiepittock">Jamie Pittock</a>, <a href="http://www.stookstudio.com/">Erwin Heiser</a>, <a href="http://whoooz.nl/">Robert Eerhart</a> and <a href="http://twitter.com/lbrt">Albert de Klein</a> for their help and suggestions.</p>
]]></content:encoded>
      <dc:date>2009-12-17T13:19:03+00:00</dc:date>
    </item>

    <item>
      <title>Introducing the Software Section</title>
      <link>http://loweblog.com/feeder/?FeederAction=clicked&amp;feed=Dev&amp;seed=http%3A%2F%2Floweblog.com%2Ffreelance%2Farticle%2Fintroducing-the-software-section%2F&amp;seed_title=Introducing+the+Software+Section</link>
      <guid>http://loweblog.com/freelance/article/introducing&#45;the&#45;software&#45;section/</guid>
      <description>Things have been set in motion. The 2.0 Public Beta version of ExpressionEngine has been released, and I have been working on a little something, too. If things go well, I&#8217;ll release my newest creation later this month. In the meantime, I&#8217;ve shuffled things around here. My add&#45;ons have their own section (channel, even!) now, with better docs, change logs and even some screenshots. As an example, take a look at the new Low NoSpam page. That&#8217;s it for now &#8212; back to TextMate. Developing can be addictive!</description>
      <dc:subject>Announcements, ExpressionEngine</dc:subject>
      <content:encoded><![CDATA[<p>Things have been set in motion. The 2.0 Public Beta version of <a href="http://expressionengine.com/index.php?affiliate=lodewijk">ExpressionEngine</a> has been released, and I have been working on <a href="http://twitter.com/low/status/6272959785">a little something</a>, too. If things go well, I&#8217;ll release my newest creation later this month. In the meantime, I&#8217;ve shuffled things around here. My add-ons have <a href="http://loweblog.com/software/">their own section</a> (channel, even!) now, with better docs, change logs and even some screenshots. As an example, take a look at <a href="http://loweblog.com/software/low-nospam/">the new Low NoSpam page</a>. That&#8217;s it for now &#8212; back to TextMate. Developing can be addictive!</p>
]]></content:encoded>
      <dc:date>2009-12-03T16:54:31+00:00</dc:date>
    </item>

    <item>
      <title>My ExpressionEngine 2.0 Add&#45;on roadmap</title>
      <link>http://loweblog.com/feeder/?FeederAction=clicked&amp;feed=Dev&amp;seed=http%3A%2F%2Floweblog.com%2Ffreelance%2Farticle%2Fee20-addon-roadmap%2F&amp;seed_title=My+ExpressionEngine+2.0+Add-on+roadmap</link>
      <guid>http://loweblog.com/freelance/article/ee20&#45;addon&#45;roadmap/</guid>
      <description>Now that ExpressionEngine 2.0 is coming December 1st, you might be wondering what third party add&#45;ons will be available. I&#8217;ve been part of the developer preview since the beginning, so I had an early start to convert some of mine to 2.0. To give you a better idea of what&#8217;s in store on my part, I&#8217;ll give you a roadmap of my add&#45;on compatibility, just like Brandon Kelly did earlier.</description>
      <dc:subject>Announcements, ExpressionEngine</dc:subject>
      <content:encoded><![CDATA[<p>Now that <a href="http://expressionengine.com/index.php?affiliate=lodewijk">ExpressionEngine</a> 2.0 is coming December 1st, you might be wondering what third party add-ons will be available. I&#8217;ve been part of the developer preview since the beginning, so I had an early start to convert some of mine to 2.0. To give you a better idea of what&#8217;s in store on my part, I&#8217;ll give you a roadmap of my add-on compatibility, just like <a href="http://brandon-kelly.com/blog/transitions">Brandon Kelly</a> did earlier.</p>
<h2>Roadmap</h2>
<table class="roadmap">
	<colgroup>
		<col class="item" />
		<col class="target" />
	</colgroup>
	<thead>
		<tr>
			<th>Add-on</th>
			<th>Target date</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td><a href="http://loweblog.com/software/low-random/">Low Random plugin</a></td>
			<td>December 1st</td>
		</tr>
		<tr>
			<td><a href="http://loweblog.com/software/low-seg2cat/">Low Seg2Cat extension</a></td>
			<td>December 1st</td>
		</tr>
		<tr>
			<td><a href="http://loweblog.com/software/low-safe-encode/">Safe Encode extension</a></td>
			<td>December 1st</td>
		</tr>
		<tr>
			<td><a href="http://loweblog.com/software/low-title/">Title plugin</a></td>
			<td>December 1st</td>
		</tr>
		<tr>
			<td><a href="http://loweblog.com/software/low-nice-date/">Nice Date plugin</a></td>
			<td>December 1st</td>
		</tr>
		<tr>
			<td><a href="http://loweblog.com/software/low-widont/">Widon&#8217;t plugin</a></td>
			<td>December 1st</td>
		</tr>
		<tr>
			<td><a href="http://loweblog.com/software/low-replace/">Find and Replace plugin</a></td>
			<td>December 1st</td>
		</tr>
		<tr>
			<td><a href="http://loweblog.com/software/low-yearly-archives/">Yearly Archives plugin</a></td>
			<td>December</td>
		</tr>
		<tr>
			<td><a href="http://loweblog.com/software/low-nospam/">Low NoSpam</a></td>
			<td>January</td>
		</tr>
		<tr>
			<td><a href="http://loweblog.com/software/low-google-search/">Google Mini Plugin</a></td>
			<td>March</td>
		</tr>
	</tbody>
</table>

<p>I&#8217;m planning on adding Google Site Search to the <a href="http://loweblog.com/software/low-google-search/">Google Mini Plugin</a>, hence the later date. Also, you might notice that some of my add-ons aren&#8217;t present in this table. Those are being discontinued.</p>

<h2>Discontinued</h2>

<ul>
 <li><a href="http://loweblog.com/freelance/article/akismet-for-expression-engine/">Akismet for ExpressionEngine</a> (replaced by <a href="http://loweblog.com/software/low-nospam/">Low NoSpam</a>)</li>
 <li><a href="http://loweblog.com/software/file-manager/">File Manager Module</a> (due to new spiffy native file manager in EE2.0)</li>
 <li><a href="http://loweblog.com/software/low-cp/">Low CP extension</a> (due to new control panel)</li>
 <li><a href="http://loweblog.com/freelance/article/ee-allow-php-plugin/">Allow PHP plugin</a></li>
 <li><a href="http://loweblog.com/freelance/article/ee-exif-plugin/">Exif plugin</a></li>
</ul>

<p>These add-ons will not be ported to EE2.0, but will still be available for the 1.6.x branch.</p>]]></content:encoded>
      <dc:date>2009-11-10T11:15:31+00:00</dc:date>
    </item>

    <item>
      <title>Like a hotdog</title>
      <link>http://loweblog.com/feeder/?FeederAction=clicked&amp;feed=Dev&amp;seed=http%3A%2F%2Floweblog.com%2Ffreelance%2Farticle%2Flike-a-hotdog%2F&amp;seed_title=Like+a+hotdog</link>
      <guid>http://loweblog.com/freelance/article/like&#45;a&#45;hotdog/</guid>
      <description>It is now Sunday afternoon, and I&#8217;m still recovering from EECI2009, the first European (or was it global) ExpressionEngine and CodeIgniter conference, held in my home town: Leiden. Robert Eerhart and his posse did an excellent job organising their first event, and many would agree. The past few days surely have been like a hotdog.</description>
      <dc:subject>Ajax, CodeIgniter, Conferences, ExpressionEngine</dc:subject>
      <content:encoded><![CDATA[<p>It is now Sunday afternoon, and I&#8217;m still recovering from <a href="http://www.eeci2009.com/">EECI2009</a>, the first European (or was it global) ExpressionEngine and CodeIgniter conference, held in my home town: Leiden. <a href="http://www.whoooz.nl">Robert Eerhart and his posse</a> did an excellent job organising their first event, and many <a href="http://twitter.com/vpieters/status/5120242192">would agree</a>. The past few days surely have been <a href="http://www.youtube.com/watch?v=0rYT0YvQ3hs">like a hotdog</a>.</p>
<h2>Ajax &#038; EE/CI: the Hi road &#038; the Low road workshop</h2>
<p>EECI2009 also gave me the opportunity to be on stage as a speaker for the first time. I talked about using Ajax responsibly with <a href="http://expressionengine.com/index.php?affiliate=lodewijk">ExpressionEngine</a> or <a href="http://codeigniter.com/">CodeIgniter</a>. It being a workshop, I considered giving some exercises to the audience, but I decided against it due to practical reasons and just went through a bunch of code instead. That way, I hoped non-developers would get the general idea of what was going on, and proper geeks might pick up a thing or two along the way.</p>
<p><a href="http://www.slideshare.net/lodewijkschutte/ajax-eeci-the-hi-road-the-low-road">The slides are available on SlideShare</a> and the example site <a href="http://www.geluksdruif.nl/">is live right now</a>, so you can look at the code in action and order a bottle of wine while you&#8217;re at it. ;-)</p>
<h2>Another one, please</h2>
<p>It&#8217;s been fantastic to speak with so many EE/CI-superstars and even better to be able to invite some of them to my home. Actually, I&#8217;m still having a hard time believing it! All this has made me hungry for more. I think I heard Robert saying that he&#8217;s planning on putting together another shindig like this, and if he does, I&#8217;ll be the first in line.</p>
]]></content:encoded>
      <dc:date>2009-10-25T15:55:44+00:00</dc:date>
    </item>

    <item>
      <title>FOWD, EE and a little tip</title>
      <link>http://loweblog.com/feeder/?FeederAction=clicked&amp;feed=Dev&amp;seed=http%3A%2F%2Floweblog.com%2Ffreelance%2Farticle%2Ffowd-ee-and-a-little-tip%2F&amp;seed_title=FOWD%2C+EE+and+a+little+tip</link>
      <guid>http://loweblog.com/freelance/article/fowd&#45;ee&#45;and&#45;a&#45;little&#45;tip/</guid>
      <description>One of the main reasons why I went to this year&#8217;s Future Of Web Design conference, was to attend Jamie Pittock&#8217;s workshop on ExpressionEngine. As a freelancer, I only see my own EE implementations, so I jumped at the opportunity to see how others use it to deploy sites. The workshop turned out to be both fun and inspirational &#8212; path.php will never be the same again. Kudos to Jamie for putting it together.
The second workshop I attended was about JavaScript by Stuart Langridge. Between the jokes and the put&#45;downs, Stuart had his class do a couple of exercises. I managed to help out my neighbour a bit, who turned out to be an EE enthusiast herself and had recently used one of my add&#45;ons.</description>
      <dc:subject>Conferences, ExpressionEngine, PHP</dc:subject>
      <content:encoded><![CDATA[<p>One of the main reasons why I went to this year&#8217;s <a href="http://events.carsonified.com/fowd/2009/london/content">Future Of Web Design</a> conference, was to attend <a href="http://twitter.com/jamiepittock">Jamie Pittock</a>&#8217;s workshop on <a href="http://expressionengine.com/index.php?affiliate=lodewijk">ExpressionEngine</a>. As a freelancer, I only see my own <abbr>EE</abbr> implementations, so I jumped at the opportunity to see how others use it to deploy sites. The workshop turned out to be both fun and inspirational &#8212; path.php will never be the same again. Kudos to Jamie for putting it together.</p>
<p>The second workshop I attended was about JavaScript by <a href="http://www.kryogenix.org/">Stuart Langridge</a>. Between the jokes and the put-downs, Stuart had his class do a couple of exercises. I managed to help out my neighbour a bit, who turned out to be an <abbr>EE</abbr> enthusiast herself and had recently used <a href="http://loweblog.com/freelance/article/ee-yearly-archives-plugin/">one of my add-ons</a>.</p>
<p>I promised <a href="http://twitter.com/gradualist">Emily</a> I&#8217;d write a blog post about a little trick I sometimes use to retrieve certain entries from the database when the default weblog:entries tag won&#8217;t let you. In her case, she needed to get all entries from a given month, <em>regardless of the year</em>. She ended up using categories, which is fine, but here&#8217;s an approach you could also use.</p>
<h2>Check the database</h2>
<p>Weblog entries are stored in the table <code>exp_weblog_titles</code>. In that table you&#8217;ll find values for <code>year</code>, <code>month</code> and <code>day</code>. This means we can filter entries per month, regardless of the year, albeit not with regular EE tags. We&#8217;ll need to get them manually.</p>
<h2>Set up a template, use PHP</h2>
<p>Create a template (for example: <code>archives/month</code>) and turn on PHP <strong>on input</strong>. We&#8217;re going to use PHP to fetch all entry ids for any given month. In this case, a <em>numeric</em> value of the month will be available in <code>&#123;segment_3&#125;</code>: <code>http://domain.com/archives/month/5</code>. The PHP will look something like this:</p>
<pre><code>&#60;?php
global $IN, $DB;

// get database-safe segment
$seg3 = $DB-&#62;escape_str($IN-&#62;fetch_uri_segment(3));

// query to get all entry_ids for a given month
$query = $DB-&#62;query("SELECT entry_id FROM exp_weblog_titles WHERE month = '&#123;$seg3&#125;'");

// initiate ids array
$ids = array();

// loop through results, populate array
foreach ($query->result AS $row):
	$ids[] = $row['entry_id'];
endforeach;
?&#62;</code></pre>
<h2>Use IDs as input for &#123;exp:weblog:entries&#125;</h2>
<p>You now have an array filled with all the right entry_ids. You only need to display them with the <code>&#123;exp:weblog:entries&#125;</code> tag, using the <code>entry_id</code> parameter to limit the entries to the ones you&#8217;ve just retrieved. That would look something like this:</p>
<pre><code>&#123;exp:weblog:entries weblog="articles" entry_id="&#60;?=implode('&#124;', $ids)?&#62;" dynamic="off" disable="pagination"&#125;
	[...]
&#123;/exp:weblog:entries&#125;</code></pre>
<p>You could add further filtering, like statuses or categories, but all the entries will be from the given month, because of the <code>entry_id</code> parameter.</p>
<h2>Remember dynamic=&#8221;off&#8221;</h2>
<p>I&#8217;ve used this approach on many occasions. Use PHP to get the right ids first, then use them as input for your regular EE tags. It works like a charm, but has its down side as well. Because you&#8217;re using the segments in custom way, you&#8217;ll need to set <code>dynamic="off"</code>. This will disable the use of pagination. That might be a bad thing, or on the other hand, it might not matter at all.</p>
]]></content:encoded>
      <dc:date>2009-05-05T08:45:20+00:00</dc:date>
    </item>

    
    </channel>
</rss>