<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.7.2" -->
<rss version="2.0">
    <channel>
        <title>Dynamic_select_boxes[ Search for &quot;&quot;]</title>
        <description></description>
        <link>http://xataface.com/wiki/index.php?-action=single_record_search&amp;-table=wiki&amp;page_id=%3D90&amp;-cursor=0&amp;-skip=0&amp;-limit=30&amp;-mode=list&amp;--subsearch=</link>
        <lastBuildDate>Sun, 19 May 2013 05:56:25 +0100</lastBuildDate>
        <generator>FeedCreator 1.7.2</generator>
        <item>
            <title>Dynamic_select_boxes</title>
            <link>http://www.xataface.com/wiki/Dynamic_select_boxes</link>
            <description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Field&lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;Page name&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;Dynamic_select_boxes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;Page id&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;90&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;Content&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;
&lt;h2 id=&quot;toc0&quot;&gt;Dynamic select boxes&lt;/h2&gt;
&lt;p&gt;To create two select boxes whose one is dependent (slave) of the other (master), we need to use some javascript with Jason.&lt;/p&gt;

&lt;p&gt;Create the valuelists.ini: 
&lt;pre&gt;&lt;code&gt;
;valuelist for the slave
[slaves_list]
__sql__ = &amp;quot;select slave_id, slave_name, master_id from slaves&amp;quot;

; valuelist for the masters
[masters_list]
__sql__ = &amp;quot;select master_id,master_name from masters&amp;quot;&lt;/code&gt;&lt;/pre&gt;

&lt;/p&gt;

&lt;p&gt;fields.ini: 
&lt;pre&gt;&lt;code&gt;[master]
vocabulary=masters_list

[slave]
vocabulary=slaves_list&lt;/code&gt;&lt;/pre&gt;

&lt;/p&gt;

&lt;p&gt;delegate class in the table directory : 
&lt;pre&gt;&lt;code&gt;...
function block__after_new_record_form(){
echo &amp;lt;&amp;lt;&amp;lt;END
&amp;lt;script language=&amp;quot;javascript&amp;quot;&amp;gt;&amp;lt;!--
var slave_field= document.getElementById('slave');
var master_field = document.getElementById('master');
END;
// Let's get all the slaves available.
$app =&amp;amp; Dataface_Application::getInstance();
$query =&amp;amp; $app-&amp;gt;getQuery();
$table =&amp;amp; Dataface_Table::loadTable($query['-table']);
$slaves = $table-&amp;gt;getValuelist('slaves_list');
$slave_masters = $table-&amp;gt;getValuelist('slaves_list__meta');
// Note that the slaves_list__meta valuelist is automatically created
// because we had three columns in the slaves valuelist.
// The first and third columns effectively create a 2nd valuelist
// named 'slaves_list__meta'

// $slaves is an array with keys slave_id and values slave_name
// slave_masters is an array with keys slave_id and values master_id

import('Services/JSON.php');
$json =&amp;amp; new Services_JSON(); // A JSON encoder to allow us to easily
// convert PHP arrays to javascript arrays.
echo '
var slaves_options = '.$json-&amp;gt;encode($slaves).';
var slaves_master = '.$json-&amp;gt;encode($slave_masters).';
';

echo &amp;lt;&amp;lt;&amp;lt;END
master_field.onchange = function(){
var selected_master = master_field.options[master_field.selectedIndex].value;
slave_field.options.length = 0;
var index = 0;
for ( slave_id in slaves_options){
if ( selected_master == slaves_master[slave_id] ){
slave_field.options[index++] = new Option(slaves_options[slave_id], slave_id);
}
}
};
//--&amp;gt;&amp;lt;/script&amp;gt;
END;
}

// Also place this javascript after an edit record form...
function block__after_edit_record_form(){
return $this-&amp;gt;block__after_new_record_form();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/p&gt;

&lt;p&gt;The 2.0 version has a &lt;a href=&quot;http://xataface.com/dox/modules/depselect/latest&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt; depselect module&lt;/a&gt; to produce cascading dynamic select boxes very simply.&lt;/p&gt;

&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;Language&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;en&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description>
            <author>Dynamic_select_boxes</author>
        </item>
    </channel>
</rss>
