<?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/"
	>

<channel>
	<title>devmoz's blog</title>
	<atom:link href="http://www.devmoz.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.devmoz.com/blog</link>
	<description>Devmoz's blog</description>
	<pubDate>Mon, 30 Mar 2009 16:25:30 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>paginating ad-hoc joins in CakePHP</title>
		<link>http://www.devmoz.com/blog/2009/03/28/paginating-ad-hoc-joins-in-cakephp/</link>
		<comments>http://www.devmoz.com/blog/2009/03/28/paginating-ad-hoc-joins-in-cakephp/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 13:36:16 +0000</pubDate>
		<dc:creator>oth</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<category><![CDATA[ad-hoc joins]]></category>

		<category><![CDATA[joins]]></category>

		<category><![CDATA[paginate]]></category>

		<category><![CDATA[pagination]]></category>

		<guid isPermaLink="false">http://www.devmoz.com/blog/?p=30</guid>
		<description><![CDATA[Couple months ago, Nate published a quick tip to do what he called ad-hoc joins in cakephp find()
Basically the trick was to use the <em>joins</em> parameter of the method find() to define the associations.
I have noticed a lot of people asking about how to paginate the result. 
So This tutorial is exactly for doing that]]></description>
			<content:encoded><![CDATA[<p>Couple months ago, Nate published in the bakery a quick tip to do what he called <a href="http://bakery.cakephp.org/articles/view/quick-tip-doing-ad-hoc-joins-in-model-find">ad-hoc joins in cakephp</a>&#8217;s find()<br />
Basically the trick was to use the <em>joins</em> parameter of the method find() to define the associations.<br />
I have noticed a lot of people asking about how to paginate the results.<br />
So This post is exactly for doing that..</p>
<p>I&#8217;ll be using the modified version found <a href="http://bakery.cakephp.org/articles/view/quick-tip-doing-ad-hoc-joins-in-model-find#comment-3410">in the comments by Bambou</a></p>
<p>Basically His version allows to define the type of find() using a parameter called <em>operation</em></p>
<p>just copy it to your AppModel, or the model that you want to do ad-hoc joins on: </p>
<p>Now for pagination to work with the new &#8216;matches&#8217; type, you&#8217;ll have to write a custom <em>paginateCount()</em><br />
copy this to your AppModel or the model in question:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> &nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> paginateCount<span class="br0">&#40;</span><span class="re0">$conditions</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>, <span class="re0">$recursive</span> = <span class="nu0">0</span>, <span class="re0">$extra</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$parameters</span> = <a href="http://www.php.net/compact"><span class="kw3">compact</span></a><span class="br0">&#40;</span><span class="st0">&#8216;conditions&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$recursive</span> != <span class="re0">$this</span>-&gt;<span class="me1">recursive</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$parameters</span><span class="br0">&#91;</span><span class="st0">&#8216;recursive&#8217;</span><span class="br0">&#93;</span> = <span class="re0">$recursive</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$extra</span><span class="br0">&#91;</span><span class="st0">&#8216;type&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> &amp;&amp; <span class="br0">&#40;</span><span class="re0">$extra</span><span class="br0">&#91;</span><span class="st0">&#8216;type&#8217;</span><span class="br0">&#93;</span> == <span class="st0">&#8216;matches&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$extra</span><span class="br0">&#91;</span><span class="st0">&#8216;operation&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&#8216;count&#8217;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$this</span>-&gt;<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;matches&#8217;</span>, <a href="http://www.php.net/array_merge"><span class="kw3">array_merge</span></a><span class="br0">&#40;</span><span class="re0">$parameters</span>, <span class="re0">$extra</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$this</span>-&gt;<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;count&#8217;</span>, <a href="http://www.php.net/array_merge"><span class="kw3">array_merge</span></a><span class="br0">&#40;</span><span class="re0">$parameters</span>, <span class="re0">$extra</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Usage is nearly identical to the normal paginate() except that instead of doing:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> &nbsp;<span class="re0">$markers</span> = <span class="re0">$this</span>-&gt;<span class="me1">Marker</span>-&gt;<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;matches&#8217;</span>, <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#8216;operation&#8217;</span> =&gt; <span class="st0">&#8216;all&#8217;</span>, </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;model&#8217;</span> =&gt; <span class="st0">&#8216;Tag&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8217;scope&#8217;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;Tag.tag&#8217;</span> =&gt; <span class="re0">$tags</span><span class="br0">&#41;</span> </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>You&#8217;ll do:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> &nbsp;<a href="http://www.php.net/array_unshift"><span class="kw3">array_unshift</span></a><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">paginate</span>, <span class="st0">&#8216;matches&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$this</span>-&gt;<span class="me1">paginate</span><span class="br0">&#91;</span><span class="st0">&#8216;model&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&#8216;Tag&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$this</span>-&gt;<span class="me1">paginate</span><span class="br0">&#91;</span><span class="st0">&#8216;operation&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&#8216;all&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$this</span>-&gt;<span class="me1">paginate</span><span class="br0">&#91;</span><span class="st0">&#8217;scope&#8217;</span><span class="br0">&#93;</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;Tag.tag&#8217;</span>=&gt;<span class="re0">$tags</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$result</span> = <span class="re0">$this</span>-&gt;<span class="me1">paginate</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>The trick indeed is in <em>array_unshift($this->paginate, &#8216;matches&#8217;);</em><br />
and has to do with how paginate() works internally ( makes the assumption/convention that the first element in the paginate array is the type )</p>
<p>So that&#8217;s it, hopefully this will help some misguided cakephp souls <img src='http://www.devmoz.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.devmoz.com/blog/2009/03/28/paginating-ad-hoc-joins-in-cakephp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>w00t! I&#8217;ve got wordpress spam-hacked!</title>
		<link>http://www.devmoz.com/blog/2009/03/27/w00t-ive-got-wordpress-spam-hacked/</link>
		<comments>http://www.devmoz.com/blog/2009/03/27/w00t-ive-got-wordpress-spam-hacked/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 01:39:21 +0000</pubDate>
		<dc:creator>oth</dc:creator>
		
		<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://www.devmoz.com/blog/?p=26</guid>
		<description><![CDATA[It&#8217;s been a while ( like really really a while, since I looked here )
I won&#8217;t get on the details of what-why, mainly family, sickness and a lot of other work experiments.
Anyhow, I apologize for not being here, answering comments and posting new stuff.
But no worries I&#8217;m back on the rails and hope to be [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a while ( like really really a while, since I looked here )<br />
I won&#8217;t get on the details of what-why, mainly family, sickness and a lot of other work experiments.<br />
Anyhow, I apologize for not being here, answering comments and posting new stuff.<br />
But no worries I&#8217;m back on the rails and hope to be able to post some new exciting stuff</p>
<p>Today I&#8217;ve got an email from google telling me that this blog is scheduled for removal from their indexes, whaaat!<br />
Here is the complete email:</p>
<blockquote><p>
Dear site owner or webmaster of devmoz.com,</p>
<p>While we were indexing your webpages, we detected that some of your pages were using techniques that are outside our quality guidelines, which can be found here: http://www.google.com/support/webmasters/bin/answer.py?answer=35769&#038;hl=en. This appears to be because your site has been modified by a third party. Typically, the offending party gains access to an insecure directory that has open permissions. Many times, they will upload files or modify existing ones, which then show up as spam in our index.</p>
<p>The following is some example hidden text we found at http://www.devmoz.com/blog/category/cakephp/:</p>
<p><strong>[bunch of spam words here]</strong></p>
<p>In order to preserve the quality of our search engine, pages from devmoz.com are scheduled to be removed temporarily from our search results for at least 30 days.</p>
<p>We would prefer to keep your pages in Google&#8217;s index. If you wish to be reconsidered, please correct or remove all pages (may not be limited to the examples provided) that are outside our quality guidelines. One potential remedy is to contact your web host technical support for assistance. For more information about security for webmasters, see http://googlewebmastercentral.blogspot.com/2008/04/my-sites-been-hacked-now-what.html. When such changes have been made, please visit https://www.google.com/webmasters/tools/reconsideration?hl=en to learn more and submit your site for reconsideration.</p>
<p>Sincerely, Google Search Quality Team<br />
Note: if you have an account in Google&#8217;s Webmaster Tools, you can verify the authenticity of this message by logging into https://www.google.com/webmasters/tools/siteoverview?hl=en and going to the Message Center.</p></blockquote>
<p>I&#8217;ve got really shocked ! I do <strong>HATE </strong>spam so how can this be possible.<br />
I&#8217;ve looked at the page and found indeed a hidden div containing tons of links pointing to some spam websites. It was clear I&#8217;ve got <strong>SPAM HACKED</strong>.<br />
I quickly ssh-ed to the wordpress files, run through the web logs, some greps.. and found out the links in footer.php, I removed the huge list of links, chmod-ed the file to readonly.<br />
I was running wordpress version 2.2.1 or something, haven&#8217;t had any plugins installed other than akismet, openid and dean&#8217;s code highlighter. so must have been a vulnerability in the version of wordpress I was running.<br />
Well since I haven&#8217;t been here in a while I couldn&#8217;t upgrade, duh!</p>
<p>I looked through <a href="http://codex.wordpress.org/Upgrading_WordPress_Extended">http://codex.wordpress.org/Upgrading_WordPress_Extended</a> to get me an idea on how to upgrade to the latest version of wordpress, and to patch my custom made theme. I was anxious but I could upgrade in less than 15min.<br />
I logged into the google webmaster tool&#8217;s thingy and sent google a nice message, I just hope they&#8217;ll reconsider the removal <img src='http://www.devmoz.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>So people moral of the story is, upgrade your <em>open source software</em> often!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devmoz.com/blog/2009/03/27/w00t-ive-got-wordpress-spam-hacked/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MailingBaker: a cakePHP newsletter manager plugin</title>
		<link>http://www.devmoz.com/blog/2007/06/28/mailingbaker-a-cakephp-newsletter-manager-plugin/</link>
		<comments>http://www.devmoz.com/blog/2007/06/28/mailingbaker-a-cakephp-newsletter-manager-plugin/#comments</comments>
		<pubDate>Thu, 28 Jun 2007 06:49:49 +0000</pubDate>
		<dc:creator>oth</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false">http://www.devmoz.com/blog/2007/06/28/mailingbaker-a-cakephp-newsletter-manager-plugin/</guid>
		<description><![CDATA[Not news for those who track new projects at cakeforge but I&#8217;ve started a new plugin for cakePHP, it&#8217;s called MailingBaker and as the name says, it&#8217;s a newsletter manager plugin.
MailingBaker has multi-lists, WYSIWYG newsletter editing (html/plain), layouts, opt-in, opt-out and more. Mailing Baker doesn&#8217;t aim to be a standalone application, rather, be hooked in [...]]]></description>
			<content:encoded><![CDATA[<p>Not news for those who track new projects at <a href="http://www.cakeforge.org">cakeforge</a> but I&#8217;ve started a new plugin for cakePHP, it&#8217;s called <a href="http://cakeforge.org/projects/mailingbaker/">MailingBaker</a> and as the name says, it&#8217;s a newsletter manager plugin.<br />
MailingBaker has multi-lists, WYSIWYG newsletter editing (html/plain), layouts, opt-in, opt-out and more. Mailing Baker doesn&#8217;t aim to be a standalone application, rather, be hooked in your applications..well a plugin duh.<br />
there is already working code in <a href="http://cakeforge.org/scm/?group_id=178">the svn repo</a><br />
Currently MB is not setup as a plugin in code, it&#8217;s just a normal app, when the functionality is stable we&#8217;ll package it as a plugin and make a release.</p>
<p>MailingBaker uses a new version of my <a href="http://www.swiftmailer.org">SwiftMailer</a> <a href="http://bakery.cakephp.org/articles/view/swiftmailer-component-tutorial">Component</a> (compatible with version 3 yes).</p>
<p>If you are interested in joining the project, please <a href="https://cakeforge.org/project/request.php?group_id=178">don&#8217;t hesitate</a>, as it&#8217;s for the benefit of everyone. Whenever you will need a newsletter/mailing list functionality in your cake applications you can plug-in MB and get done.</p>
<p>Cake!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devmoz.com/blog/2007/06/28/mailingbaker-a-cakephp-newsletter-manager-plugin/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Introducing TohDoh Yet Another CakePHP AJAX Todo-List Demo</title>
		<link>http://www.devmoz.com/blog/2007/04/14/introducing-tohdoh-yet-another-cakephp-ajax-todo-list-demo/</link>
		<comments>http://www.devmoz.com/blog/2007/04/14/introducing-tohdoh-yet-another-cakephp-ajax-todo-list-demo/#comments</comments>
		<pubDate>Sat, 14 Apr 2007 01:08:17 +0000</pubDate>
		<dc:creator>oth</dc:creator>
		
		<category><![CDATA[AJAX]]></category>

		<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false">http://www.devmoz.com/blog/2007/04/14/introducing-tohdoh-yet-another-cakephp-ajax-todo-list-demo/</guid>
		<description><![CDATA[TohDoh is YET ANOTHER CAKEPHP AJAX TODO LIST DEMO or YACATLD, a 100% ajax threaded todo list. It&#8217;s both a showcase and an opportunity for new bakers to learn from.
TohDoh has some features like:

Threaded, so you have tasks and sub tasks.
You can add, edit in-place and delete tasks
Drag &#38; Drop to sort tasks
And of course [...]]]></description>
			<content:encoded><![CDATA[<p>TohDoh is YET ANOTHER CAKEPHP AJAX TODO LIST DEMO or YACATLD, a 100% ajax threaded todo list. It&#8217;s both a showcase and an opportunity for new bakers to learn from.<br />
TohDoh has some features like:</p>
<ul class="list">
<li>Threaded, so you have tasks and sub tasks.</li>
<li>You can add, edit in-place and delete tasks</li>
<li>Drag &amp; Drop to sort tasks</li>
<li>And of course you can done &amp; and undone tasks <img src='http://www.devmoz.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>You can see <a href="http://www.devmoz.com/tohdoh/nodes/">the demo running here</a>. The code is available at <a href="https://cakeforge.org/projects/tohdoh/">cakeforge</a></p>
<p><span id="more-23"></span></p>
<h2>How to install TohDoh</h2>
<ul class="list">
<li>Run the SQL file provided or use phpMyAdmin</li>
<li>Copy the content of the app folder over your app folder. </li>
<li>Download http://script.aculo.us/downloads and put the files in webroot/js/</li>
<li>Create a connection in your database.php config file and name it tohdoh. Or change the name to default in app/plugins/tohdoh/models/node.php <br/>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$tohdoh</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;driver&#8217;</span> =&gt; <span class="st0">&#8216;mysql&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;persistent&#8217;</span> =&gt; <span class="kw2">false</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;host&#8217;</span> =&gt; <span class="st0">&#8216;localhost&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;login&#8217;</span> =&gt; <span class="st0">&#8216;root&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;password&#8217;</span> =&gt; <span class="st0">&#8216;123456&#8242;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;database&#8217;</span> =&gt; <span class="st0">&#8216;devmoz&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;prefix&#8217;</span> =&gt; <span class="st0">&#8216;tohdoh_&#8217;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Notice the &#8216;prefix&#8217;. if you don&#8217;t want that, change the table name.</li>
<li>Go to yourhost.tld/tohdoh/nodes/ and start adding tasks.</li>
</ul>
<p>I assumed you have cake version 1.2.<br />
You might need to change some minor things for it to work in 1.1, the form creation $form->create()<br />
to something like (not tested) &lt;form method=&#8221;post&#8221; action=&#8221;&lt;?php echo $html->url(&#8217;/tohdoh/nodes/add&#8217;) ?&gt;&#8221;&gt;<br />
Also I use the array syntax when specifying URLs, so you need to change things like<br />
array(&#8217;action&#8217;=>&#8217;x',$param) to &#8216;/tohdoh/nodes/x/&#8217;.$param etc..</p>
<p>Let me all think what you think of it..</p>
<p>Cake!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devmoz.com/blog/2007/04/14/introducing-tohdoh-yet-another-cakephp-ajax-todo-list-demo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Update to the Conf Component</title>
		<link>http://www.devmoz.com/blog/2007/04/05/update-to-the-conf-component/</link>
		<comments>http://www.devmoz.com/blog/2007/04/05/update-to-the-conf-component/#comments</comments>
		<pubDate>Thu, 05 Apr 2007 00:31:38 +0000</pubDate>
		<dc:creator>oth</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false">http://www.devmoz.com/blog/2007/04/05/update-to-the-conf-component/</guid>
		<description><![CDATA[Not so long ago I&#8217;ve created a component to handle DB based configuration and settings. It was pretty clean and slim. Some features however were needed ( requested ), so the component got some updates.

First of all, the way you set and get values have changed, instead of two parameters:



&#160;


$value = $this-&#62;get&#40;&#8216;category&#8217;,&#8216;key&#8217;&#41;;


$this-&#62;set&#40;&#8216;category&#8217;,&#8216;key&#8217;,$val&#41;;


&#160;



You now do:



&#160;


$value = [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.devmoz.com/blog/2007/02/16/confcomponent-db-based-configuration/">Not so long ago</a> I&#8217;ve created a component to handle DB based configuration and settings. It was pretty clean and slim. Some features however were needed ( requested ), so the component got some updates.<br />
<span id="more-22"></span><br />
First of all, the way you set and get values have changed, instead of two parameters:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$value</span> = <span class="re0">$this</span>-&gt;<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#8216;category&#8217;</span>,<span class="st0">&#8216;key&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$this</span>-&gt;<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&#8216;category&#8217;</span>,<span class="st0">&#8216;key&#8217;</span>,<span class="re0">$val</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>You now do:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$value</span> = <span class="re0">$this</span>-&gt;<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#8216;category.key&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$this</span>-&gt;<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&#8216;category.key&#8217;</span>,<span class="re0">$val</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>This is more cake-ish indeed.<br />
get() also has new parameters, one is the default value returned if the requested value doesn&#8217;t exist (kudos to biesbjerg). Another parameter has to deal with boolean values. Basically it converts &#8216;true&#8217; and &#8216;false&#8217; to true and false if you set it to true.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// return &#8216;defaultValue&#8217; if key doesn&#8217;t exist</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$value</span> &nbsp; = <span class="re0">$this</span>-&gt;<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#8216;category.key&#8217;</span>,<span class="st0">&#8216;defaultValue&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// return true if key doesn&#8217;t exist. Also convert boolean values</span></div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$value2</span> = <span class="re0">$this</span>-&gt;<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#8216;category.key2&#8242;</span>,<span class="kw2">true</span>,<span class="kw2">true</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// get all category values</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$all</span> = <span class="re0">$this</span>-&gt;<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#8216;category.*&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Caching has been introduced to minimize db hits. hmm what else, I&#8217;ll let you <a href="http://bakery.cakephp.org/articles/view/243">read the tutorial</a>. Don&#8217;t forget to <a href="http://bakery.cakephp.org/articles/view/242">grab the new version from bakery</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.devmoz.com/blog/2007/04/05/update-to-the-conf-component/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CakePHP: Update a select box using ajax</title>
		<link>http://www.devmoz.com/blog/2007/04/04/cakephp-update-a-select-box-using-ajax/</link>
		<comments>http://www.devmoz.com/blog/2007/04/04/cakephp-update-a-select-box-using-ajax/#comments</comments>
		<pubDate>Wed, 04 Apr 2007 01:00:03 +0000</pubDate>
		<dc:creator>oth</dc:creator>
		
		<category><![CDATA[AJAX]]></category>

		<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false">http://www.devmoz.com/blog/2007/04/04/cakephp-update-a-select-box-using-ajax/</guid>
		<description><![CDATA[I noticed a lot of new comers asking this question: I want a select box to be updated using ajax when I change the current item in another select box .

So this is a quick tutorial on how to do exactly that.]]></description>
			<content:encoded><![CDATA[<p>I noticed a lot of new comers asking this question: I want a select box to be updated using ajax when I change the current item in another select box .</p>
<p>So this is a quick tutorial on how to do exactly that.</p>
<p><span id="more-21"></span></p>
<p>Here is the scenario: We have a select box filled with categories, when we select a category, another select box is updated with article titles. Fair enough ?</p>
<p>First thing to do is create the DB tables:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> categories <span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">id INT <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">AUTO_INCREMENT</span> <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span> ,</div>
</li>
<li class="li1">
<div class="de1">name VARCHAR<span class="br0">&#40;</span> <span class="nu0">30</span> <span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> </div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> articles <span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">id INT <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">AUTO_INCREMENT</span> <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span> ,</div>
</li>
<li class="li1">
<div class="de1">title VARCHAR<span class="br0">&#40;</span> <span class="nu0">30</span> <span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> ,</div>
</li>
<li class="li2">
<div class="de2">category_id INT <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> ,</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">INDEX</span> <span class="br0">&#40;</span> category_id <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Ok next create the models, put them in <em>app/models</em> of course.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// category.php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Category <span class="kw2">extends</span> AppModel <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">var</span> <span class="re0">$name</span> = <span class="st0">&#8216;Category&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// article.php</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">class</span> Article <span class="kw2">extends</span> AppModel <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> <span class="re0">$name</span> = <span class="st0">&#8216;Article&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> <span class="re0">$belongsTo</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;Category&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>now comes the articles&#8217; controller, we&#8217;ll have an action <em>index</em> where we&#8217;ll display the select boxes.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// app/controllers/articles_controller.php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> ArticlesController <span class="kw2">extends</span> AppController <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> <span class="re0">$name</span> = <span class="st0">&#8216;Articles&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> <span class="re0">$helpers</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;Html&#8217;</span>,<span class="st0">&#8216;Form&#8217;</span>,<span class="st0">&#8216;Javascript&#8217;</span>,<span class="st0">&#8216;Ajax&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> <span class="re0">$components</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;RequestHandler&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw2">function</span> index<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&#8216;categories&#8217;</span>, <span class="re0">$this</span>-&gt;<span class="me1">Article</span>-&gt;<span class="me1">Category</span>-&gt;<span class="me1">generateList</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Nothing fancy for the moment, we add the Javascript and Ajax helpers to the list of helpers that will be available in the view domain ( layout + views ).<br />
We use the RequestHandler component, it will detect ajax requests and set proper header and layout for us, sweet isn&#8217;t it!</p>
<p>Our next step is to create a layout, we could just use the default layout but we need to include the prototype and scriptaculous libraries. make sure you <a href="http://script.aculo.us/downloads">downloaded</a> the files and put them in webroot/js </p>
<p>Add these two lines in the head section of your layout:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$javascript</span>-&gt;<span class="me1">link</span><span class="br0">&#40;</span><span class="st0">&#8216;prototype&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$javascript</span>-&gt;<span class="me1">link</span><span class="br0">&#40;</span><span class="st0">&#8217;scriptaculous&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>If you&#8217;re using 1.2 ( not sure it&#8217;s available in 1.1 ) you can write it in one line of code:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$javascript</span>-&gt;<span class="me1">link</span><span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;prototype&#8217;</span>,<span class="st0">&#8217;scriptaculous&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>To be honest, you don&#8217;t need scriptaculous here, we&#8217;re not going to use it, just include prototype.</p>
<p>All right, all this above was basically just preparation, now here&#8217;s the view file of the index action. Create a folder named articles under app/views. Create a file in it, name it index.ctp if you&#8217;re using 1.2 or index.thtml if you&#8217;re using 1.1 (thtml works in 1.2 too but it&#8217;s depreciated).<br />
Here is its content:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// app/views/articles/index.(thtml|ctp)</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$html</span>-&gt;<span class="me1">selectTag</span><span class="br0">&#40;</span><span class="st0">&#8216;Category/id&#8217;</span>, <span class="re0">$categories</span>, <span class="kw2">null</span>, <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;id&#8217;</span> =&gt; <span class="st0">&#8216;categories&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$html</span>-&gt;<span class="me1">selectTag</span><span class="br0">&#40;</span><span class="st0">&#8216;Article/id&#8217;</span>,<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>, <span class="kw2">null</span>,<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;id&#8217;</span> =&gt;<span class="st0">&#8216;articles&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$options</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;url&#8217;</span> =&gt; <span class="st0">&#8216;update_select&#8217;</span>,<span class="st0">&#8216;update&#8217;</span> =&gt; <span class="st0">&#8216;articles&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$ajax</span>-&gt;<span class="me1">observeField</span><span class="br0">&#40;</span><span class="st0">&#8216;categories&#8217;</span>,<span class="re0">$options</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>In 1.2, selectTag() is depreciated, change it to select().</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$form</span>-&gt;<span class="me1">select</span><span class="br0">&#40;</span><span class="st0">&#8216;Category.id&#8217;</span>, <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;options&#8217;</span>=&gt;<span class="re0">$categories</span><span class="br0">&#41;</span>, <span class="kw2">null</span>, <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;id&#8217;</span> =&gt; <span class="st0">&#8216;categories&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$form</span>-&gt;<span class="me1">select</span><span class="br0">&#40;</span><span class="st0">&#8216;Article.id&#8217;</span>,<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>, <span class="kw2">null</span>, <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;id&#8217;</span> =&gt;<span class="st0">&#8216;articles&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>All right, nothing fancy either, we create two select boxes, we populate one with category names set from the action. We give both selects an id and we call <a href="http://api.cakephp.org/search.php?query=observeField">observeField</a>. This method of the ajax helper basically observes a DOM element for a change, if it occurs, it calls an url and updates a DOM element with the content returned from that url.<br />
Let&#8217;s move on to create the action that we&#8217;ll be requested by observeField.</p>
<p>In the ArticlesController add this code:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> update_select<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!<a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">data</span><span class="br0">&#91;</span><span class="st0">&#8216;Category&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;id&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$cat_id</span> = <span class="br0">&#40;</span>int<span class="br0">&#41;</span><span class="re0">$this</span>-&gt;<span class="me1">data</span><span class="br0">&#91;</span><span class="st0">&#8216;Category&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;id&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="re0">$options</span> = <span class="re0">$this</span>-&gt;<span class="me1">Article</span>-&gt;<span class="me1">generateList</span><span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;category_id&#8217;</span>=&gt;<span class="re0">$cat_id</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&#8216;options&#8217;</span>,<span class="re0">$options</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>and it&#8217;s view..</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// update_select.(ctp|thtml)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span>!<a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">&#40;</span><span class="re0">$options</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$options</span> <span class="kw1">as</span> <span class="re0">$k</span> =&gt; <span class="re0">$v</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;&lt;option value=&#8217;$k&#8217;&gt;$v&lt;/option&gt;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>Fun fun..now populate the db tables with some dummy data and test it out.</p>
<p>This was just one way of doing it, we could return JSON, XML or a script that&#8217;ll get executed.</p>
<p>Easier than that you die.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devmoz.com/blog/2007/04/04/cakephp-update-a-select-box-using-ajax/feed/</wfw:commentRss>
		</item>
		<item>
		<title>a tinymce element for cakePHP</title>
		<link>http://www.devmoz.com/blog/2007/03/29/a-tinymce-element-for-cakephp/</link>
		<comments>http://www.devmoz.com/blog/2007/03/29/a-tinymce-element-for-cakephp/#comments</comments>
		<pubDate>Thu, 29 Mar 2007 16:23:04 +0000</pubDate>
		<dc:creator>oth</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false">http://www.devmoz.com/blog/2007/03/29/a-tinymce-element-for-cakephp/</guid>
		<description><![CDATA[To demonstrate the power of Elements in cakePHP, I&#8217;m going to use as an example TinyMCE. TinyMCE is basically a LGPLed web based Javascript HTML WYSIWYG editor. It has many features but it&#8217;s not the aim of this post to introduce it,  rather to demonstrate how we can use it as an element. TinyMCE [...]]]></description>
			<content:encoded><![CDATA[<p>To demonstrate the power of Elements in cakePHP, I&#8217;m going to use as an example TinyMCE. TinyMCE is basically a LGPLed web based Javascript HTML WYSIWYG editor. It has many features but it&#8217;s not the aim of this post to introduce it,  rather to demonstrate how we can use it as an element. TinyMCE can be used on textareas ( and probably some other tags ) .<br />
<span id="more-20"></span><br />
So we have this scenario: you&#8217;re building a ( yet another ) CMS. In the add, edit forms you decide to give the user the possibility to create/edit the page visually.  So you probably have something that looks like this:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> &nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// cute 1.2 code <img src='http://www.devmoz.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$form</span>-&gt;<span class="me1">create</span><span class="br0">&#40;</span><span class="st0">&#8216;Page&#8217;</span><span class="br0">&#41;</span><span class="kw2">?&gt;</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$form</span>-&gt;<span class="me1">input</span><span class="br0">&#40;</span><span class="st0">&#8216;title&#8217;</span><span class="br0">&#41;</span>;?&gt; </div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">&lt;?php</span> <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$form</span>-&gt;<span class="me1">input</span><span class="br0">&#40;</span><span class="st0">&#8216;description&#8217;</span><span class="br0">&#41;</span>;?&gt; </div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$form</span>-&gt;<span class="me1">input</span><span class="br0">&#40;</span><span class="st0">&#8216;body&#8217;</span><span class="br0">&#41;</span>;?&gt; </div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$form</span>-&gt;<span class="me1">input</span><span class="br0">&#40;</span><span class="st0">&#8216;page_layout_id&#8217;</span>,<span class="re0">$pageLayouts</span><span class="br0">&#41;</span>;?&gt; </div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$form</span>-&gt;<span class="me1">submit</span><span class="br0">&#40;</span><span class="st0">&#8216;Add&#8217;</span><span class="br0">&#41;</span>;?&gt; </div>
</li>
<li class="li1">
<div class="de1">&lt;/form&gt; &nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>Now as a smart guy you create an element, you name tiny_mce.ctp and you put this code in it:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?</span> <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$javascript</span>-&gt;<span class="me1">link</span><span class="br0">&#40;</span><span class="st0">&#8216;tiny_mce/tiny_mce&#8217;</span><span class="br0">&#41;</span><span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;script language</span>=<span class="st0">&quot;javascript&quot;</span> type=<span class="st0">&quot;text/javascript&quot;</span>&gt;</div>
</li>
<li class="li2">
<div class="de2">tinyMCE.init<span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">theme : <span class="st0">&quot;advanced&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">mode : <span class="st0">&quot;textareas&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;/script&gt;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>You call renderElement before the form and you&#8217;re all set.</p>
<p>So what&#8217;s the issue ? Well first of all, I forgot to mention that the description field is a textarea and we don&#8217;t want it to use tinyMCE. You can give &#8216;body&#8217; an id ( in fact the form helper does this ) and hard code it in the element; but then, elements are meant to be reusable. Here comes the time to utilize the power and flexibility they offer: Elements accept arguments. So to make a reusable and flexible element we&#8217;re going to use the element as a black box and tell it what fields we want to edit visually.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?</span> <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$javascript</span>-&gt;<span class="me1">link</span><span class="br0">&#40;</span><span class="st0">&#8216;tiny_mce/tiny_mce&#8217;</span><span class="br0">&#41;</span><span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;script language</span>=<span class="st0">&quot;javascript&quot;</span> type=<span class="st0">&quot;text/javascript&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">tinyMCE.init<span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">theme : <span class="st0">&quot;advanced&quot;</span>,</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">&lt;?php</span> <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/is_array"><span class="kw3">is_array</span></a><span class="br0">&#40;</span><span class="re0">$field</span><span class="br0">&#41;</span><span class="br0">&#41;</span>: <span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$fs</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$field</span> <span class="kw1">as</span> <span class="re0">$f</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$fs</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="st0">&quot;data[$model][$f]&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">endforeach</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">elements :<span class="st0">&quot;&lt;?php echo implode(&quot;</span>,<span class="st0">&quot;,$fs)?&gt;&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> <span class="kw1">else</span>: <span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">elements : <span class="st0">&quot;data[&lt;?php echo $model; ?&gt;][&lt;?php echo $field; ?&gt;]&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> <span class="kw1">endif</span>; <span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;/script&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>And here is how we use it:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$this</span>-&gt;<span class="me1">renderElement</span><span class="br0">&#40;</span><span class="st0">&#8216;tiny_mce&#8217;</span>,<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;model&#8217;</span>=&gt;<span class="st0">&#8216;Page&#8217;</span>,<span class="st0">&#8216;field&#8217;</span>=&gt;<span class="st0">&#8216;body&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>If we later decide we want to edit the description visually too we do this:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$this</span>-&gt;<span class="me1">renderElement</span><span class="br0">&#40;</span><span class="st0">&#8216;tiny_mce&#8217;</span>,<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;model&#8217;</span>=&gt;<span class="st0">&#8216;Page&#8217;</span>,<span class="st0">&#8216;field&#8217;</span>=&gt;array<span class="br0">&#40;</span><span class="st0">&#8216;body&#8217;</span>,<span class="st0">&#8216;description&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>So that&#8217;s it, the second param of renderElement is an array, the keys are the variables names and the values are the values of these variables, cake manages to get them accessible within the element as simple variables. How neat !</p>
<p>Keep in mind this is just an example. if you want to improve it, first, remove script and use $javascript-&gt;block, second, use the second param of $javascript-&gt;link so that it&#8217;s included in the head ( of course you need to have $scripts_for_layout somewhere in the head of the layout) you can also cache that block in an external file if you choose to.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devmoz.com/blog/2007/03/29/a-tinymce-element-for-cakephp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>othAuth 0.5.4</title>
		<link>http://www.devmoz.com/blog/2007/03/29/othauth-054/</link>
		<comments>http://www.devmoz.com/blog/2007/03/29/othauth-054/#comments</comments>
		<pubDate>Thu, 29 Mar 2007 15:39:39 +0000</pubDate>
		<dc:creator>oth</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false">http://www.devmoz.com/blog/2007/03/29/othauth-054/</guid>
		<description><![CDATA[This is mainly a bug fix release.

fixed a bug related to Y-m-d H:i:s
Fixed a bug in loginAttempts reported by PatDaMilla
Added support for parameters sent via url in a traditional way, mainly for redirects, thanks to Ritesh.

What else I&#8217;m not sure but we&#8217;re going towards a more stable system.
the nao mode is broken at the moment, [...]]]></description>
			<content:encoded><![CDATA[<p>This is mainly a bug fix release.</p>
<ul>
<li>fixed a bug related to Y-m-d H:i:s</li>
<li>Fixed a bug in loginAttempts reported by PatDaMilla</li>
<li>Added support for parameters sent via url in a traditional way, mainly for redirects, thanks to Ritesh.</li>
</ul>
<p>What else I&#8217;m not sure but we&#8217;re going towards a more stable system.<br />
the nao mode is broken at the moment, I&#8217;ll fix it when I&#8217;ll have time to write docs for it.</p>
<p><a href="http://bakery.cakephp.org/articles/view/99">Updated Component</a><br />
<a href="http://bakery.cakephp.org/articles/view/148">Docs</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.devmoz.com/blog/2007/03/29/othauth-054/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hello devmoz !</title>
		<link>http://www.devmoz.com/blog/2007/03/06/hello-devmoz/</link>
		<comments>http://www.devmoz.com/blog/2007/03/06/hello-devmoz/#comments</comments>
		<pubDate>Tue, 06 Mar 2007 08:36:42 +0000</pubDate>
		<dc:creator>othman ouahbi</dc:creator>
		
		<category><![CDATA[general]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Hey,
so this is going to be the new othy home, how is the look ?
I imported all the previous posts..the adventure continues here..
stay tuned !
]]></description>
			<content:encoded><![CDATA[<p>Hey,<br />
so this is going to be the new <a href="http://othy.wordpress.com">othy </a>home, how is the look ?<br />
I imported all the previous posts..the adventure continues here..<br />
stay tuned !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devmoz.com/blog/2007/03/06/hello-devmoz/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ConfComponent db Based configuration</title>
		<link>http://www.devmoz.com/blog/2007/02/16/confcomponent-db-based-configuration/</link>
		<comments>http://www.devmoz.com/blog/2007/02/16/confcomponent-db-based-configuration/#comments</comments>
		<pubDate>Fri, 16 Feb 2007 03:54:30 +0000</pubDate>
		<dc:creator>othman ouahbi</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false">http://localhost/devmoz/app/webroot/blog/2007/02/16/confcomponent-db-based-configuration/</guid>
		<description><![CDATA[Hello, it has been some time now. My apologies for that, I&#8217;ve been kinda very busy lately ( whine whine..). But anyway I&#8217;ve found sometime to release something, and oh Ma! it is something! heh well, not really. This time I have a configuration component for you. I hear you saying, but cake already has [...]]]></description>
			<content:encoded><![CDATA[<p>Hello, it has been some time now. My apologies for that, I&#8217;ve been kinda very busy lately ( whine whine..). But anyway I&#8217;ve found sometime to release something, and oh Ma! it is something! heh well, not really. This time I have a configuration component for you. I hear you saying, but cake already has a configuration system. Yes it has, and it&#8217;s very nice. really neat. But it&#8217;s not db based, meaning the configuration files are stored in files in app/config/. it&#8217;s no big deal but in some cases you have to use the db.</p>
<p>So anyway the <a href="http://bakery.cakephp.org/articles/view/242" title="ConfComponent">component</a> is in bakery along with a <a href="http://bakery.cakephp.org/articles/view/243" title="ConfComponent tutorial">tutorial</a>.  check it out.</p>
<p>PS: If the links say the article doesn&#8217;t exist, you gotta wait until a moderator validates them..or write a comment with your email so I can send it to you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devmoz.com/blog/2007/02/16/confcomponent-db-based-configuration/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
