<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Turboweb Developer Blog</title>
	<atom:link href="http://dev.turboweb.co.nz/feed/" rel="self" type="application/rss+xml" />
	<link>http://dev.turboweb.co.nz</link>
	<description>Bridging the Gap between Humans and Geeks</description>
	<lastBuildDate>Tue, 17 Jan 2012 21:40:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Preserve the current working directory in Bash (Linux) when you log off</title>
		<link>http://dev.turboweb.co.nz/2012/01/17/preserve-the-current-working-directory-in-bash-linux-when-you-log-off/</link>
		<comments>http://dev.turboweb.co.nz/2012/01/17/preserve-the-current-working-directory-in-bash-linux-when-you-log-off/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 21:40:08 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[CLI]]></category>

		<guid isPermaLink="false">http://dev.turboweb.co.nz/?p=136</guid>
		<description><![CDATA[We manage quite a few servers, and probably double the number of virtual machines as well (for testing, local provisioning etc). Sometimes it&#8217;s a pain that when you log off from one of these servers that you log back into your home directory (e.g. /home/bob) instead of the path that you wanted to be in. [...]]]></description>
			<content:encoded><![CDATA[<p>We manage quite a few servers, and probably double the number of virtual machines as well (for testing, local provisioning etc). Sometimes it&#8217;s a pain that when you log off from one of these servers that you log back into your home directory (e.g. /home/bob) instead of the path that you wanted to be in.</p>
<p>If the path that you want to be in by default is a certain path, you can simply edit your login script at ~/.bashrc and add a line at the bottom that says &#8220;cd /path/that/you/want/to/go/to&#8221;.</p>
<p>If you want to go back to the last path you were at when you logged out, this is easy enough. What we do is this:</p>
<ol>
<li>On logout, write the current directory name to a file.</li>
<li>On login, read from that file and change to the directory.</li>
</ol>
<p>To do this, add the following lines to the following files:</p>
<p><strong>~/.bash_logout (create if required)</strong></p>
<pre>pwd &gt; ~/.lastdir</pre>
<p><strong>~/.bashrc (create if required, but you probably have one)</strong></p>
<pre>[ -s ~/.lastdir ] &amp;&amp; cd `cat ~/.lastdir`</pre>
<p>To test, log in and change to a directory, log out and then log back in again.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.turboweb.co.nz/2012/01/17/preserve-the-current-working-directory-in-bash-linux-when-you-log-off/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Meta keywords for OpenCart</title>
		<link>http://dev.turboweb.co.nz/2011/11/21/meta-keywords-for-opencart/</link>
		<comments>http://dev.turboweb.co.nz/2011/11/21/meta-keywords-for-opencart/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 01:01:22 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[OpenCart]]></category>

		<guid isPermaLink="false">http://dev.turboweb.co.nz/?p=127</guid>
		<description><![CDATA[OpenCart out of the box does not support meta keywords throughout the system. This is relatively easy to add, but you will need to edit each controller to enable this. In this particular post we&#8217;ll take a look at adding support for meta keywords on the OpenCart home page. There is support already for a [...]]]></description>
			<content:encoded><![CDATA[<p>OpenCart out of the box does not support meta keywords throughout the system. This is relatively easy to add, but you will need to edit each controller to enable this.</p>
<p>In this particular post we&#8217;ll take a look at adding support for meta keywords on the OpenCart home page. There is support already for a meta description and this can be configured in the back end of OpenCart under System » Settings » Store » Meta Tag Description.</p>
<p>Our aim will be to add another field beneath that called &#8220;Meta Tag Keywords&#8221; and have this reflect in the source of the homepage.</p>
<p>There are two parts to this: adding support for editing and storing the meta keywords in the admin, and adding the code to the front of the website so that the value will be used.</p>
<p><span id="more-127"></span></p>
<h2>In the admin:</h2>
<p>There are three things you&#8217;ll need to do to provide support for this in the admin.</p>
<ol>
<li>Edit the setting controller to get the value from the database.</li>
<li>Edit the setting language file to provide labels for the form.</li>
<li>Edit the settings template to provide the HTML for the form.</li>
</ol>
<h3>The Controller</h3>
<div>The admin controller we want is found in the admin/controller/setting/setting.php file. Depending on which version of OpenCart you have, at about line 47 you&#8217;ll find a reference to the entry_meta_description. Simply copy that line and replace the text entry_meta_description with entry_meta_keywords.</div>
<pre>$this-&gt;data['entry_meta_keywords'] = $this-&gt;language-&gt;get('entry_meta_keywords');</pre>
<div>Also, a bit later in the file (search for config_meta_description) we want to add a section which will take care of collecting up the posted results of the form. Use the other sections as a guide:</div>
<div>
<pre>if (isset($this-&gt;request-&gt;post['config_meta_keywords'])) {
	$this-&gt;data['config_meta_keywords'] = $this-&gt;request-&gt;post['config_meta_keywords'];
} else {
	$this-&gt;data['config_meta_keywords'] = $this-&gt;config-&gt;get('config_meta_keywords');
}</pre>
</div>
<h3>The language file</h3>
<p>The language file changes are very simple. Open the file admin/language/english/setting/setting.php and add a line beneath the entry_meta_description line that says:</p>
<pre>$_['entry_meta_keywords']     = 'Meta Tag Keywords:';</pre>
<h3>The settings template (view)</h3>
<p>Oopen the file admin/view/template/setting/setting.tpl, find the config_meta_description and paste this after it. Note that it&#8217;s a HTML table so you&#8217;ll paste this after the closing &lt;/tr&gt; tag of the table row for the meta description:</p>
<pre>&lt;tr&gt;
  &lt;td&gt;&lt;?php echo $entry_meta_keywords; ?&gt;&lt;/td&gt;
  &lt;td&gt;&lt;input type="text" name="config_meta_keywords" value="&lt;?php echo $config_meta_keywords; ?&gt;" /&gt;
    &lt;?php if ($error_entry_meta_keywords) { ?&gt;
    &lt;span class="error"&gt;&lt;?php echo $error_entry_meta_keywords; ?&gt;&lt;/span&gt;
    &lt;?php } ?&gt;&lt;/td&gt;
&lt;/tr&gt;</pre>
<h2>In the front end:</h2>
<p>The front end changes are very straightforward. We need to make changes to the header template and the home controller.</p>
<h3>The header template</h3>
<p>Open the file catalog/view/theme/default/template/common/header.tpl and add the following code after the definition of the description meta tag:</p>
<pre>&lt;?php if ($keywords) { ?&gt;
&lt;meta name="keywords" content="&lt;?php echo $keywords; ?&gt;" /&gt;
&lt;?php } ?&gt;</pre>
<h3>The home controller</h3>
<p>Finally, open the home controller (catalog/controller/common/home.php) and find the reference to the config_meta_description. Simply copy that line and change it for the keywords:</p>
<pre>$this-&gt;document-&gt;keywords = $this-&gt;config-&gt;get('config_meta_keywords');</pre>
<h2>Complete</h2>
<p>Now you&#8217;re done &#8211; you should be able to update the keywords in the System » Settings » Store » Meta Tag Keywords and see these in the HTML source.</p>
<p>In addition to this, you&#8217;ve also made a key change to the template so that in any controller you can set $this-&gt;document-&gt;keywords to whatever you like and those keywords will show in the HTML source.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.turboweb.co.nz/2011/11/21/meta-keywords-for-opencart/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Magento 1.4.2.0 Onepage Checkout Save Shipping Address Not Working</title>
		<link>http://dev.turboweb.co.nz/2011/05/05/magento-1-4-2-0-onepage-checkout-save-shipping-address-not-working/</link>
		<comments>http://dev.turboweb.co.nz/2011/05/05/magento-1-4-2-0-onepage-checkout-save-shipping-address-not-working/#comments</comments>
		<pubDate>Thu, 05 May 2011 02:26:46 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[1.4.2.0]]></category>
		<category><![CDATA[Magento]]></category>

		<guid isPermaLink="false">http://dev.turboweb.co.nz/?p=113</guid>
		<description><![CDATA[One of our clients noticed that checking the save shipping address in the magento checkout does not save that address to the customeres addresses. After some investigation I can confirm this is a 1.4.2.0 bug, but have not seen any solutions on the web, so here is my fix: You should override the App/Code/Core/Mage/Checkout/Model/Type/Onepage.php class [...]]]></description>
			<content:encoded><![CDATA[<p>One of our clients noticed that checking the save shipping address in the magento checkout does not save that address to the customeres addresses.<br />
After some investigation I can confirm this is a 1.4.2.0 bug, but have not seen any solutions on the web, so here is my fix:</p>
<p>You should override the App/Code/Core/Mage/Checkout/Model/Type/Onepage.php class in the usual manner, and override the saveShipping method, to be like:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">public</span> <span class="kw2">function</span> saveShipping<span class="br0">&#40;</span><span class="re0">$data</span><span class="sy0">,</span> <span class="re0">$customerAddressId</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">empty</span><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">return</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'error'</span> <span class="sy0">=&gt;</span> <span class="sy0">-</span><span class="nu0">1</span><span class="sy0">,</span> <span class="st_h">'message'</span> <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span>_helper<span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Invalid data.'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="re0">$address</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getQuote</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getShippingAddress</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">empty</span><span class="br0">&#40;</span><span class="re0">$customerAddressId</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       <span class="re0">$customerAddress</span> <span class="sy0">=</span> Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span><span class="st_h">'customer/address'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">load</span><span class="br0">&#40;</span><span class="re0">$customerAddressId</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$customerAddress</span><span class="sy0">-&gt;</span><span class="me1">getId</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
             <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$customerAddress</span><span class="sy0">-&gt;</span><span class="me1">getCustomerId</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">!=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getQuote</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getCustomerId</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                 <span class="kw1">return</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'error'</span> <span class="sy0">=&gt;</span> <span class="nu0">1</span><span class="sy0">,</span>
                     <span class="st_h">'message'</span> <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span>_helper<span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Customer Address is not valid.'</span><span class="br0">&#41;</span>
                 <span class="br0">&#41;</span><span class="sy0">;</span>
             <span class="br0">&#125;</span>
             <span class="re0">$address</span><span class="sy0">-&gt;</span><span class="me1">importCustomerAddress</span><span class="br0">&#40;</span><span class="re0">$customerAddress</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
        <span class="coMULTI">/* @var $addressForm Mage_Customer_Model_Form */</span>
        <span class="re0">$addressForm</span>    <span class="sy0">=</span> Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span><span class="st_h">'customer/form'</span><span class="br0">&#41;</span><span class="sy0">;</span> 
        <span class="re0">$addressForm</span><span class="sy0">-&gt;</span><span class="me1">setFormCode</span><span class="br0">&#40;</span><span class="st_h">'customer_address_edit'</span><span class="br0">&#41;</span>
            <span class="sy0">-&gt;</span><span class="me1">setEntity</span><span class="br0">&#40;</span><span class="re0">$address</span><span class="br0">&#41;</span>
            <span class="sy0">-&gt;</span><span class="me1">setEntityType</span><span class="br0">&#40;</span><span class="st_h">'customer_address'</span><span class="br0">&#41;</span>
            <span class="sy0">-&gt;</span><span class="me1">setIsAjaxRequest</span><span class="br0">&#40;</span>Mage<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">isAjax</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="co1">// emulate request object</span>
        <span class="re0">$addressData</span>    <span class="sy0">=</span> <span class="re0">$addressForm</span><span class="sy0">-&gt;</span><span class="me1">extractData</span><span class="br0">&#40;</span><span class="re0">$addressForm</span><span class="sy0">-&gt;</span><span class="me1">prepareRequest</span><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$addressErrors</span>  <span class="sy0">=</span> <span class="re0">$addressForm</span><span class="sy0">-&gt;</span><span class="me1">validateData</span><span class="br0">&#40;</span><span class="re0">$addressData</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$addressErrors</span> <span class="sy0">!==</span> <span class="kw4">true</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <span class="kw1">return</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'error'</span> <span class="sy0">=&gt;</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="st_h">'message'</span> <span class="sy0">=&gt;</span> <span class="re0">$addressErrors</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
        <span class="re0">$addressForm</span><span class="sy0">-&gt;</span><span class="me1">compactData</span><span class="br0">&#40;</span><span class="re0">$addressData</span><span class="br0">&#41;</span><span class="sy0">;</span>
         <span class="co1">//the next 3 lines are the fix!!!</span>
        <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">empty</span><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st_h">'save_in_address_book'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
             <span class="re0">$address</span><span class="sy0">-&gt;</span><span class="me1">setSaveInAddressBook</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="re0">$address</span><span class="sy0">-&gt;</span><span class="me1">implodeStreetAddress</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="re0">$address</span><span class="sy0">-&gt;</span><span class="me1">setCollectShippingRates</span><span class="br0">&#40;</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$validateRes</span> <span class="sy0">=</span> <span class="re0">$address</span><span class="sy0">-&gt;</span><span class="me1">validate</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">!==</span><span class="kw4">true</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">return</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'error'</span> <span class="sy0">=&gt;</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="st_h">'message'</span> <span class="sy0">=&gt;</span> <span class="re0">$validateRes</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
     <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getQuote</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">collectTotals</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">save</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getCheckout</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
        <span class="sy0">-&gt;</span><span class="me1">setStepData</span><span class="br0">&#40;</span><span class="st_h">'shipping'</span><span class="sy0">,</span> <span class="st_h">'complete'</span><span class="sy0">,</span> <span class="kw4">true</span><span class="br0">&#41;</span>
        <span class="sy0">-&gt;</span><span class="me1">setStepData</span><span class="br0">&#40;</span><span class="st_h">'shipping_method'</span><span class="sy0">,</span> <span class="st_h">'allow'</span><span class="sy0">,</span> <span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="kw1">return</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>This now follows a similar logic to the saveBilling address, setting a flag to save the address when the order is saved.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.turboweb.co.nz/2011/05/05/magento-1-4-2-0-onepage-checkout-save-shipping-address-not-working/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Magento: Default Product Listing Sort by not exists on Available Product Listing Sort By</title>
		<link>http://dev.turboweb.co.nz/2011/05/03/magento-default-product-listing-sort-by-not-exists-on-available-product-listing-sort-by/</link>
		<comments>http://dev.turboweb.co.nz/2011/05/03/magento-default-product-listing-sort-by-not-exists-on-available-product-listing-sort-by/#comments</comments>
		<pubDate>Tue, 03 May 2011 10:36:58 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[1.4.2.0]]></category>
		<category><![CDATA[Magento]]></category>

		<guid isPermaLink="false">http://dev.turboweb.co.nz/?p=102</guid>
		<description><![CDATA[We have a system that populates a Magento installation by reading an external database and creating, updating and deleting products and categories. Recently I had been receiving an obscure message when trying to update categories using the Magento API. The message was simply: Default Product Listing Sort by not exists on Available Product Listing Sort [...]]]></description>
			<content:encoded><![CDATA[<p>We have a system that populates a Magento installation by reading an external database and creating, updating and deleting products and categories.  Recently I had been receiving an obscure message when trying to update categories using the Magento API.</p>
<p>The message was simply: <em>Default Product Listing Sort by not exists on Available Product Listing Sort By</em></p>
<p>After Googling around I hadn&#8217;t turned up much, which forced me into the bowels of Magento.  This exception is thrown in the file app/code/core/Mage/Model/Category/Attribute/Backend/Sortby.php on line 81 and 85.  This file is responsible for checking that the Sort By method specified for a category is valid.</p>
<div id="attachment_103" class="wp-caption alignright" style="width: 310px"><a href="http://dev.turboweb.co.nz/wp-content/uploads/2011/05/Selection_003.png"><img class="size-medium wp-image-103 " title="Default Display Settings for a new cateogry" src="http://dev.turboweb.co.nz/wp-content/uploads/2011/05/Selection_003-300x191.png" alt="Default Display Settings for a new cateogry" width="300" height="191" /></a><p class="wp-caption-text">Default Display Settings for a new cateogry</p></div>
<p>When you create a category in Magento using the Admin UI, the values in the Display Settings tab of the category as set as per this screenshot (click to enlarge).  The default values are:</p>
<ul>
<li>Available Product Listing Sort By = Use All Available Attributes</li>
<li>Default Product Listing Sort By = Use Config Settings</li>
</ul>
<p>With this category created, I used the following test script to check to see if I could update the category.  This script simply asks for the information about the category (category 4066 in my case) and attempts to update the category with that information.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>
 	<span class="kw3">define</span><span class="br0">&#40;</span><span class="st_h">'MAGENTO'</span><span class="sy0">,</span> <span class="kw3">getcwd</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><span class="sy0">;</span>
 	<span class="kw3">define</span><span class="br0">&#40;</span><span class="st_h">'CATEGORY_ID'</span><span class="sy0">,</span> <span class="nu0">4066</span> <span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="kw1">require_once</span> MAGENTO <span class="sy0">.</span> <span class="st_h">'/app/Mage.php'</span><span class="sy0">;</span>
	<span class="kw3">umask</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span>
	Mage<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">setCurrentStore</span><span class="br0">&#40;</span>Mage_Core_Model_App<span class="sy0">::</span><span class="me2">ADMIN_STORE_ID</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
	try
	<span class="br0">&#123;</span> 
		<span class="re0">$info</span> <span class="sy0">=</span> Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span><span class="st_h">'catalog/category_api'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">info</span><span class="br0">&#40;</span> CATEGORY_ID <span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw3">var_dump</span><span class="br0">&#40;</span> <span class="re0">$info</span> <span class="br0">&#41;</span><span class="sy0">;</span>
		Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span><span class="st_h">'catalog/category_api'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">update</span><span class="br0">&#40;</span> CATEGORY_ID<span class="sy0">,</span> <span class="re0">$info</span> <span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="kw1">echo</span> <span class="st0">&quot;<span class="es1">\n</span><span class="es1">\n</span>SUCCESS<span class="es1">\n</span><span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
	<span class="br0">&#125;</span>
	catch<span class="br0">&#40;</span> Exception <span class="re0">$e</span> <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		<span class="kw3">var_dump</span><span class="br0">&#40;</span> <span class="re0">$e</span> <span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="br0">&#125;</span>
<span class="sy1">?&gt;</span></pre></div></div></div></div></div></div></div>


<p>When I ran this with the default settings, I received a &#8220;data_invalid&#8221; exception, however tweaking it to use any of the values in the select box for the Default Product Listing Sort By resulted in the exception &#8220;Default Product Listing Sort by not exists on Available Product Listing Sort By&#8221; (tip: it was useful to pipe the output of this script to `less&#8217;).  I then had a test script that I could use to verify when my problem was fixed.</p>
<p>I then fiddled around with the display settings in Magento (which by the way does not suffer from this problem when saving a category) and found that if I set the Available Product Listing Sort By to anything other than using the tick to use all available attributes, and set the Default Product Listing Sort By to anything other than using the tick to use the Config Settings, then things magically started working.</p>
<p>This eventually led to me reworking a bit of code to include specific values for the available_sort_by and default_sort_by attributes when updating the category.  Here&#8217;s my bit of code &#8211; out of context, but you get the idea.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1">    <span class="re0">$result</span> <span class="sy0">=</span> <span class="re0">$api</span><span class="sy0">-&gt;</span><span class="me1">update</span>
    <span class="br0">&#40;</span>
        <span class="re0">$category_id</span><span class="sy0">,</span>
        <span class="kw3">array</span>
        <span class="br0">&#40;</span>
            <span class="st_h">'image'</span> <span class="sy0">=&gt;</span> <span class="re0">$image_path</span><span class="sy0">,</span>
            <span class="st_h">'description'</span> <span class="sy0">=&gt;</span> <span class="re0">$description</span><span class="sy0">,</span>
            <span class="st_h">'meta_description'</span> <span class="sy0">=&gt;</span> <span class="re0">$meta_description</span><span class="sy0">,</span>
            <span class="st_h">'meta_keywords'</span> <span class="sy0">=&gt;</span> <span class="re0">$meta_keywords</span><span class="sy0">,</span>
            <span class="st_h">'available_sort_by'</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span> <span class="st_h">'name'</span> <span class="br0">&#41;</span><span class="sy0">,</span>
            <span class="st_h">'default_sort_by'</span> <span class="sy0">=&gt;</span> <span class="st_h">'name'</span>
        <span class="br0">&#41;</span>
    <span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.turboweb.co.nz/2011/05/03/magento-default-product-listing-sort-by-not-exists-on-available-product-listing-sort-by/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Magento: loadParentProductIds() is deprecated</title>
		<link>http://dev.turboweb.co.nz/2011/04/19/magento-loadparentproductids-is-deprecated/</link>
		<comments>http://dev.turboweb.co.nz/2011/04/19/magento-loadparentproductids-is-deprecated/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 04:41:04 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[1.4.2.0]]></category>
		<category><![CDATA[Magento]]></category>

		<guid isPermaLink="false">http://dev.turboweb.co.nz/?p=99</guid>
		<description><![CDATA[As of Magento 1.4.2.0, the loadParentProductIds() method in the product model has been deprecated and is no longer available. Here&#8217;s an example of it being used: http://www.magentocommerce.com/boards/viewthread/74229 Prior to Magento 1.4.2.0, this would have worked: list&#40; $parentId &#41; = $_product-&#62;loadParentProductIds&#40;&#41;-&#62;getData&#40;'parent_product_ids'&#41;; After Magento 1.4.2.0, this works: list&#40; $parentId &#41; = Mage::getModel&#40; 'catalog/product_type_grouped' &#41;-&#62;getParentIdsByChild&#40; $_product-&#62;getId&#40;&#41; &#41;; Note [...]]]></description>
			<content:encoded><![CDATA[<p>As of Magento 1.4.2.0, the loadParentProductIds() method in the product model has been deprecated and is no longer available.</p>
<p>Here&#8217;s an example of it being used:<br />
<a href="http://www.magentocommerce.com/boards/viewthread/74229">http://www.magentocommerce.com/boards/viewthread/74229</a></p>
<p>Prior to Magento 1.4.2.0, this would have worked:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw3">list</span><span class="br0">&#40;</span> <span class="re0">$parentId</span> <span class="br0">&#41;</span> <span class="sy0">=</span> <span class="re0">$_product</span><span class="sy0">-&gt;</span><span class="me1">loadParentProductIds</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getData</span><span class="br0">&#40;</span><span class="st_h">'parent_product_ids'</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>After Magento 1.4.2.0, this works:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw3">list</span><span class="br0">&#40;</span> <span class="re0">$parentId</span> <span class="br0">&#41;</span> <span class="sy0">=</span> Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span> <span class="st_h">'catalog/product_type_grouped'</span> <span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getParentIdsByChild</span><span class="br0">&#40;</span> <span class="re0">$_product</span><span class="sy0">-&gt;</span><span class="me1">getId</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>Note that the above fetched the parent product ID&#8217;s for a grouped product &#8211; there are also versions for configurable products in the catalog/product_type_configurable model.</p>
<p>Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.turboweb.co.nz/2011/04/19/magento-loadparentproductids-is-deprecated/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Creating a Magento admin fully editable grid</title>
		<link>http://dev.turboweb.co.nz/2011/04/16/creating-a-magento-admin-fully-editable-grid/</link>
		<comments>http://dev.turboweb.co.nz/2011/04/16/creating-a-magento-admin-fully-editable-grid/#comments</comments>
		<pubDate>Sat, 16 Apr 2011 10:52:34 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[1.4.2.0]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[editable]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[module]]></category>

		<guid isPermaLink="false">http://dev.turboweb.co.nz/?p=40</guid>
		<description><![CDATA[Recently I created a custom module for a client, that required a change to the standard UI for the backend data. The standard UI creates a grid of objects (in my case freight weight and size classes) with a button to create a new one, and action column in the grid to let you edit [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I created a custom module for a client, that required a change to the standard UI for the backend data.  The standard UI creates a grid of objects (in my case freight weight and size classes) with a button to create a new one, and action column in the grid to let you edit or delete once that item is loaded.</p>
<p>Having a large number of simple and related values, we changed to a new custom UI, with an editable grid where the last row in the grid is to create a new entry, e.g.:</p>
<div id="attachment_41" class="wp-caption alignnone" style="width: 310px"><a href="http://dev.turboweb.co.nz/wp-content/uploads/2011/04/Selection_041.png"><img class="size-medium wp-image-41" title="Custom editable grid" src="http://dev.turboweb.co.nz/wp-content/uploads/2011/04/Selection_041-300x94.png" alt="Custom editable grid" width="300" height="94" /></a><p class="wp-caption-text">Custom editable grid</p></div>
<p>Our other requirement was that more than one of these tables could be shown in the same tab container (in our example one called weight and one called size).</p>
<h3>Overview:</h3>
<p>To achieve this result, we need to create the following file structure for our custom module:<br />
<span id="more-40"></span></p>
<div style="font-weight: normal; font-family: courier, monospace, sans-serif; color: black; background-color: transparent; line-height: 0.5;">/app/code/local/Namespace/Freight/<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |&#8211; Block<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |   `&#8211; Adminhtml<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |       |&#8211; Axis.php<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |       `&#8211; Freight<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |           `&#8211; Axis<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |               |&#8211; Axis.php<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |               |&#8211; Form.php<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |               |&#8211; Tabs.php<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |               |&#8211; Xgrid.php<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |               `&#8211; Ygrid.php<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |&#8211; controllers<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |   |&#8211; Adminhtml<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |   |   `&#8211; FreightController.php<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |   `&#8211; AxisController.php<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |&#8211; etc<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |   |&#8211; config.xml<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |   `&#8211; system.xml<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |&#8211; Helper<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |   `&#8211; Data.php<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |&#8211; Model<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |   |&#8211; Axis.php<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |   |&#8211; Mysql4<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |   |   |&#8211; Axis<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |   |   |   `&#8211; Collection.php<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |   |   `&#8211; Axis.php<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |   `&#8211; Shipping<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |       `&#8211; Freight.php<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |&#8211; sql<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |   `&#8211; freight_setup<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /> |       `&#8211; mysql4-install-0.1.0.php<br />
<br style="line-height: 1; font-weight: normal; color: black; background-color: transparent;" /></div>
<h3>SQL</h3>
<p>There is nothing special about the setup at all, in our example we assign a few fairly standard columns. (app/code/local/<Namespace>/Freight):</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>
<span class="re0">$installer</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">;</span> <span class="re0">$installer</span><span class="sy0">-&gt;</span>
<span class="me1">startSetup</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$installer</span><span class="sy0">-&gt;</span><span class="me1">run</span><span class="br0">&#40;</span><span class="st0">&quot;
DROP TABLE IF EXISTS {<span class="es4">$this-&gt;getTable</span>('freight_axis')};
CREATE TABLE {<span class="es4">$this-&gt;getTable</span>('freight_axis')} (
`axis_id` int(11) NOT NULL auto_increment,
`name`   varchar(100) collate latin1_general_cs default NULL,
`desc`   varchar(500) collate latin1_general_cs default NULL,
`value`   decimal(15,5) default NULL,
`priority` int(11) NOT NULL,
`type`   varchar(100) collate latin1_general_cs default NULL,
`status` smallint(6) NOT NULL default '0',
PRIMARY KEY  (`axis_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs;
&nbsp;
&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$installer</span><span class="sy0">-&gt;</span><span class="me1">endSetup</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<h3>Models</h3>
<p>The models are also very standard.</p>
<p>Model/Axis.php</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>
&nbsp;
<span class="kw2">class</span> Turboweb_Freight_Model_Axis <span class="kw2">extends</span> Mage_Core_Model_Abstract
<span class="br0">&#123;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> _construct<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        parent<span class="sy0">::</span>_construct<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span>_init<span class="br0">&#40;</span><span class="st_h">'freight/axis'</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Model/Mysql4/Axis.php</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>
&nbsp;
<span class="kw2">class</span> Turboweb_Freight_Model_Mysql4_Axis <span class="kw2">extends</span> Mage_Core_Model_Mysql4_Abstract
<span class="br0">&#123;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> _construct<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span>_init<span class="br0">&#40;</span><span class="st_h">'freight/axis'</span><span class="sy0">,</span> <span class="st_h">'axis_id'</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Model/Mysql4/Axis/Collection.php</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>
<span class="kw2">class</span> Turboweb_Freight_Model_Mysql4_Axis_Collection <span class="kw2">extends</span> Mage_Core_Model_Mysql4_Collection_Abstract
<span class="br0">&#123;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> _construct<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="co1">//parent::__construct();</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span>_init<span class="br0">&#40;</span><span class="st_h">'freight/axis'</span><span class="sy0">,</span> <span class="st_h">'freight/axis'</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> getSize<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">load</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span>_totalRecords <span class="sy0">=</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getItems</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw1">return</span> <span class="kw3">intval</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span>_totalRecords<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>The getSize() method is required as we add an item in our block, but there is a bug where the total number of items does not change.</p>
<h3>Helpers</h3>
<p>Again, no difference here.</p>
<p>Helper/Data.php</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>
<span class="kw2">class</span> Turboweb_Freight_Helper_Data <span class="kw2">extends</span> Mage_Core_Helper_Abstract
<span class="br0">&#123;</span>
&nbsp;
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<h3 lang="php">Blocks</h3>
<p>Here is where things get interesting. The default UI uses the following layout hierarchy:</p>
<p>Widget_Grid_Container - Widget_Grid</p>
<p>Then when edit / create is clicked:</p>
<p>Widget_Form_Container &#8211; Widget_Form &amp; Widget_Tabs &#8211; and finally the individual Widget_Form classes for each tab.</p>
<p>The layout we want is very different:</p>
<p>Widget_Form_Container &#8211; Widget_Tabs -> ajax call -> widget_grid (for each tab)</p>
<p>Lets look at them in turn:</p>
<p>Block/Adminhtml/Axis.php</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>   <span class="kw2">class</span> Turboweb_Freight_Block_Adminhtml_Axis <span class="kw2">extends</span> Mage_Adminhtml_Block_Widget_Form_Container\r\n <span class="br0">&#123;</span>     <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span>     <span class="br0">&#123;</span>         parent<span class="sy0">::</span>__construct<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>                         <span class="re0">$this</span><span class="sy0">-&gt;</span>_objectId <span class="sy0">=</span> <span class="st_h">'id'</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span>_blockGroup <span class="sy0">=</span> <span class="st_h">'freight'</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span>_controller <span class="sy0">=</span> <span class="st_h">'adminhtml_freight'</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span>_mode <span class="sy0">=</span> <span class="st_h">'axis'</span><span class="sy0">;</span>
&nbsp;
        <span class="re0">$this</span><span class="sy0">-&gt;</span>_updateButton<span class="br0">&#40;</span><span class="st_h">'save'</span><span class="sy0">,</span> <span class="st_h">'label'</span><span class="sy0">,</span> Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'freight'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Save'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span>_updateButton<span class="br0">&#40;</span><span class="st_h">'save'</span><span class="sy0">,</span> <span class="st_h">'onclick'</span><span class="sy0">,</span> <span class="st_h">'var a = freight_tabsJsTabs.activeTab.id;
                  if(a == \'freight_tabs_x_section\')editForm.submit(\''</span><span class="sy0">.</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getUrl</span><span class="br0">&#40;</span><span class="st_h">'*/*/savexaxis'</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st_h">'\');
                  else editForm.submit(\''</span><span class="sy0">.</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getUrl</span><span class="br0">&#40;</span><span class="st_h">'*/*/saveyaxis'</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st_h">'\');'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span>_addButton<span class="br0">&#40;</span><span class="st_h">'delete'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span>
            <span class="st_h">'label'</span>     <span class="sy0">=&gt;</span> Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'adminhtml'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Delete Checked'</span><span class="br0">&#41;</span><span class="sy0">,</span>
            <span class="st_h">'class'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'delete'</span><span class="sy0">,</span>
            <span class="st_h">'onclick'</span>   <span class="sy0">=&gt;</span> <span class="st_h">'if(confirm(\''</span><span class="sy0">.</span> Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'adminhtml'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Are you sure you want to do this?'</span><span class="br0">&#41;</span>
                <span class="sy0">.</span><span class="st_h">'\')){
                 var a = freight_tabsJsTabs.activeTab.id;
                  if(a == \'freight_tabs_x_section\')editForm.submit(\''</span><span class="sy0">.</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getUrl</span><span class="br0">&#40;</span><span class="st_h">'*/*/deletexaxis'</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st_h">'\');
                  else editForm.submit(\''</span><span class="sy0">.</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getUrl</span><span class="br0">&#40;</span><span class="st_h">'*/*/deleteyaxis'</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st_h">'\');}'</span><span class="sy0">,</span>
        <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">removeButton</span><span class="br0">&#40;</span><span class="st_h">'back'</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw2">public</span> <span class="kw2">function</span> getHeaderText<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="kw1">return</span> Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'freight'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Freight Classes Configuration'</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Here I add code to switch which controller handles the save function, remove the back button, and add a delete button.</p>
<p>Block/Adminhtml/Freight/Axis/Xgrid.php</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span> <span class="kw2">class</span> Turboweb_Freight_Block_Adminhtml_Freight_Axis_Xgrid <span class="kw2">extends</span> Mage_Adminhtml_Block_Widget_Grid <span class="br0">&#123;</span>     <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span>     <span class="br0">&#123;</span>         parent<span class="sy0">::</span>__construct<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>         <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">setId</span><span class="br0">&#40;</span><span class="st_h">'x'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="co1">// This is the primary key of the database</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">setDefaultSort</span><span class="br0">&#40;</span><span class="st_h">'table_id'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">setDefaultDir</span><span class="br0">&#40;</span><span class="st_h">'ASC'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">setSaveParametersInSession</span><span class="br0">&#40;</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">setSkipGenerateContent</span><span class="br0">&#40;</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">setUseAjax</span><span class="br0">&#40;</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">setPagerVisibility</span><span class="br0">&#40;</span><span class="kw4">false</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">setFilterVisibility</span><span class="br0">&#40;</span><span class="kw4">false</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw2">protected</span> <span class="kw2">function</span> _prepareCollection<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="re0">$collection</span> <span class="sy0">=</span> Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span><span class="st_h">'freight/axis'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getCollection</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$collection</span><span class="sy0">-&gt;</span><span class="me1">addFieldToFilter</span><span class="br0">&#40;</span><span class="st_h">'type'</span><span class="sy0">,</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'eq'</span><span class="sy0">=&gt;</span><span class="st_h">'x'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$collection</span><span class="sy0">-&gt;</span><span class="me1">setOrder</span><span class="br0">&#40;</span><span class="st_h">'priority'</span><span class="sy0">,</span> <span class="st_h">'ASC'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$collection</span><span class="sy0">-&gt;</span><span class="me1">load</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$axis</span> <span class="sy0">=</span> Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span><span class="st_h">'freight/axis'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$axis</span><span class="sy0">-&gt;</span><span class="me1">setId</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$collection</span><span class="sy0">-&gt;</span><span class="me1">addItem</span><span class="br0">&#40;</span><span class="re0">$axis</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">setCollection</span><span class="br0">&#40;</span><span class="re0">$collection</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw1">return</span> parent<span class="sy0">::</span>_prepareCollection<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw2">protected</span> <span class="kw2">function</span> _prepareColumns<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="re0">$column</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">addColumn</span><span class="br0">&#40;</span><span class="st_h">'sizes_select'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span>
            <span class="st_h">'align'</span>     <span class="sy0">=&gt;</span><span class="st_h">'left'</span><span class="sy0">,</span>
            <span class="st_h">'width'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'20px'</span><span class="sy0">,</span>
            <span class="st_h">'field_name'</span> <span class="sy0">=&gt;</span> <span class="st_h">'sizes_select'</span><span class="sy0">,</span>
            <span class="st_h">'values'</span>    <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getSelectedSizes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span>
            <span class="st_h">'index'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'axis_id'</span><span class="sy0">,</span>
            <span class="st_h">'type'</span>		<span class="sy0">=&gt;</span> <span class="st_h">'checkbox'</span><span class="sy0">,</span>
        <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">addColumn</span><span class="br0">&#40;</span><span class="st_h">'xname[]'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span>
            <span class="st_h">'header'</span>    <span class="sy0">=&gt;</span> Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'freight'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Name'</span><span class="br0">&#41;</span><span class="sy0">,</span>
            <span class="st_h">'align'</span>     <span class="sy0">=&gt;</span><span class="st_h">'left'</span><span class="sy0">,</span>
            <span class="st_h">'width'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'20px'</span><span class="sy0">,</span>
            <span class="st_h">'index'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'name'</span><span class="sy0">,</span>
            <span class="st_h">'type'</span>		<span class="sy0">=&gt;</span> <span class="st_h">'input'</span><span class="sy0">,</span>
            <span class="st_h">'name'</span>		<span class="sy0">=&gt;</span> <span class="st_h">'xname[]'</span>
        <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">addColumn</span><span class="br0">&#40;</span><span class="st_h">'xdescription[]'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span>
            <span class="st_h">'header'</span>    <span class="sy0">=&gt;</span> Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'freight'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Description'</span><span class="br0">&#41;</span><span class="sy0">,</span>
            <span class="st_h">'align'</span>     <span class="sy0">=&gt;</span><span class="st_h">'left'</span><span class="sy0">,</span>
            <span class="st_h">'width'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'200px'</span><span class="sy0">,</span>
            <span class="st_h">'index'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'desc'</span><span class="sy0">,</span>
            <span class="st_h">'type'</span>		<span class="sy0">=&gt;</span> <span class="st_h">'input'</span><span class="sy0">,</span>
            <span class="st_h">'name'</span>		<span class="sy0">=&gt;</span> <span class="st_h">'xdescription[]'</span>
        <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">addColumn</span><span class="br0">&#40;</span><span class="st_h">'xvalue[]'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span>
            <span class="st_h">'header'</span>    <span class="sy0">=&gt;</span> Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'freight'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Minimum Value'</span><span class="br0">&#41;</span><span class="sy0">,</span>
            <span class="st_h">'align'</span>     <span class="sy0">=&gt;</span><span class="st_h">'left'</span><span class="sy0">,</span>
            <span class="st_h">'width'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'20px'</span><span class="sy0">,</span>
            <span class="st_h">'index'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'value'</span><span class="sy0">,</span>
            <span class="st_h">'type'</span>		<span class="sy0">=&gt;</span> <span class="st_h">'input'</span><span class="sy0">,</span>
            <span class="st_h">'name'</span>		<span class="sy0">=&gt;</span> <span class="st_h">'xvalue[]'</span>
        <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">addColumn</span><span class="br0">&#40;</span><span class="st_h">'xstatus[]'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span>
            <span class="st_h">'header'</span>    <span class="sy0">=&gt;</span> Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'freight'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Status'</span><span class="br0">&#41;</span><span class="sy0">,</span>
            <span class="st_h">'align'</span>     <span class="sy0">=&gt;</span><span class="st_h">'left'</span><span class="sy0">,</span>
            <span class="st_h">'width'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'50px'</span><span class="sy0">,</span>
            <span class="st_h">'index'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'status'</span><span class="sy0">,</span>
			<span class="st_h">'type'</span>      <span class="sy0">=&gt;</span> <span class="st_h">'select'</span><span class="sy0">,</span>
			<span class="st_h">'options'</span>   <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span>
			    <span class="nu0">1</span> <span class="sy0">=&gt;</span> Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'freight'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Enabled'</span><span class="br0">&#41;</span><span class="sy0">,</span>
			    <span class="nu0">2</span> <span class="sy0">=&gt;</span> Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'freight'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Disabled'</span><span class="br0">&#41;</span><span class="sy0">,</span>
		    <span class="br0">&#41;</span><span class="sy0">,</span>
            <span class="st_h">'editable'</span>	<span class="sy0">=&gt;</span> <span class="kw4">true</span><span class="sy0">,</span>
            <span class="st_h">'name'</span>		<span class="sy0">=&gt;</span> <span class="st_h">'xstatus[]'</span>
        <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">addColumn</span><span class="br0">&#40;</span><span class="st_h">'xpriority[]'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span>
            <span class="st_h">'header'</span>    <span class="sy0">=&gt;</span> Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'freight'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Order'</span><span class="br0">&#41;</span><span class="sy0">,</span>
            <span class="st_h">'align'</span>     <span class="sy0">=&gt;</span><span class="st_h">'left'</span><span class="sy0">,</span>
            <span class="st_h">'width'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'20px'</span><span class="sy0">,</span>
            <span class="st_h">'index'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'priority'</span><span class="sy0">,</span>
            <span class="st_h">'type'</span>		<span class="sy0">=&gt;</span> <span class="st_h">'input'</span><span class="sy0">,</span>
            <span class="st_h">'name'</span>		<span class="sy0">=&gt;</span> <span class="st_h">'xpriority[]'</span>
        <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> getSelectedSizes<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="re0">$sizes</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getSizes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">is_array</span><span class="br0">&#40;</span><span class="re0">$sizes</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <span class="re0">$sizes</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getSelectedSizesGroup</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
        <span class="kw1">return</span> <span class="re0">$sizes</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> getSelectedSizesGroup<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
    	<span class="re0">$sizes</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$collection</span> <span class="sy0">=</span> Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span><span class="st_h">'freight/axis'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getCollection</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$collection</span><span class="sy0">-&gt;</span><span class="me1">addFieldToFilter</span><span class="br0">&#40;</span><span class="st_h">'type'</span><span class="sy0">,</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'eq'</span><span class="sy0">=&gt;</span><span class="st_h">'x'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$collection</span><span class="sy0">-&gt;</span><span class="me1">setOrder</span><span class="br0">&#40;</span><span class="st_h">'priority'</span><span class="sy0">,</span> <span class="st_h">'ASC'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$collection</span><span class="sy0">-&gt;</span><span class="me1">load</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
        <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$collection</span> <span class="kw1">as</span> <span class="re0">$sizeObj</span><span class="br0">&#41;</span>
        <span class="br0">&#123;</span>
        	<span class="re0">$sizes</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$sizeObj</span><span class="sy0">-&gt;</span><span class="me1">getId</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
        <span class="co1">//add create new</span>
        <span class="re0">$sizes</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
    	<span class="kw1">return</span> <span class="re0">$sizes</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> getRowUrl<span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="kw1">return</span> <span class="st_h">''</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> getRowClass<span class="br0">&#40;</span>Varien_Object <span class="re0">$row</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">return</span> <span class="re0">$row</span><span class="sy0">-&gt;</span><span class="me1">getId</span><span class="br0">&#40;</span><span class="br0">&#41;</span> ? <span class="st_h">''</span> <span class="sy0">:</span> <span class="st_h">'new'</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
	<span class="kw2">public</span> <span class="kw2">function</span> setSizesGroup<span class="br0">&#40;</span><span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		<span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">;</span>
	<span class="br0">&#125;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> getGridUrl<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">-&gt;</span>_getData<span class="br0">&#40;</span><span class="st_h">'grid_url'</span><span class="br0">&#41;</span> ? <span class="re0">$this</span><span class="sy0">-&gt;</span>_getData<span class="br0">&#40;</span><span class="st_h">'grid_url'</span><span class="br0">&#41;</span> <span class="sy0">:</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getUrl</span><span class="br0">&#40;</span><span class="st_h">'*/*/sizesGridOnly'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'_current'</span><span class="sy0">=&gt;</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p lang="php">Important to note here is the addItem() call in the _prepareCollection() method. This becomes our create new row.</p>
<p lang="php">To make this row distinguishable we override the getRowClass() to give a class of new if no ID is set!</p>
<p lang="php">The getSelectedSizes intialises our serialised grid, so when we submit we know what is checked and what is not.</p>
<p lang="php">The only other thing to note is the inclusion of the name (eg &#8216;name&#8217; = &#8216;xname[]&#8216;) variable in the add column fields. This creates a useable array of data.</p>
<p>Block/Adminhtml/Freight/Axis/Tabs</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>   <span class="kw2">class</span> Turboweb_Freight_Block_Adminhtml_Freight_Axis_Tabs <span class="kw2">extends</span> Mage_Adminhtml_Block_Widget_Tabs <span class="br0">&#123;</span>       <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span>     <span class="br0">&#123;</span>         parent<span class="sy0">::</span>__construct<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>         <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">setId</span><span class="br0">&#40;</span><span class="st_h">'freight_tabs'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">setDestElementId</span><span class="br0">&#40;</span><span class="st_h">'edit_form'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">setTitle</span><span class="br0">&#40;</span>Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'freight'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Class'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw2">protected</span> <span class="kw2">function</span> _beforeToHtml<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
	    <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">addTab</span><span class="br0">&#40;</span><span class="st_h">'x_section'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span>
	        <span class="st_h">'label'</span>     <span class="sy0">=&gt;</span> Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'freight'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Size'</span><span class="br0">&#41;</span><span class="sy0">,</span>
	        <span class="st_h">'url'</span>       <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getUrl</span><span class="br0">&#40;</span><span class="st_h">'*/*/sizeGrid'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'_current'</span><span class="sy0">=&gt;</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span>
	        <span class="st_h">'class'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'ajax'</span><span class="sy0">,</span>
	    <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
	    <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">addTab</span><span class="br0">&#40;</span><span class="st_h">'y_section'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span>
	        <span class="st_h">'label'</span>     <span class="sy0">=&gt;</span> Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'freight'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Weight'</span><span class="br0">&#41;</span><span class="sy0">,</span>
	        <span class="st_h">'url'</span>       <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getUrl</span><span class="br0">&#40;</span><span class="st_h">'*/*/weightGrid'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'_current'</span><span class="sy0">=&gt;</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span>
	        <span class="st_h">'class'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'ajax'</span><span class="sy0">,</span>
	    <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw1">return</span> parent<span class="sy0">::</span>_beforeToHtml<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p lang="php">This is where we set the tabs to call the ajax requests.</p>
<h2 lang="php">Layout</h2>
<p>To plumb this all together the admin layout is configured to know about the 2 ajax grids, while the controller handles including the tabs.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span><span class="re2">?&gt;</span></span>
<span class="sc3"><span class="re1">&lt;layout</span> <span class="re0">version</span>=<span class="st0">&quot;0.1.0&quot;</span><span class="re2">&gt;</span></span>
    <span class="sc3"><span class="re1">&lt;freight_adminhtml_freight_axis<span class="re2">&gt;</span></span></span>
        <span class="sc3"><span class="re1">&lt;reference</span> <span class="re0">name</span>=<span class="st0">&quot;content&quot;</span><span class="re2">&gt;</span></span>
        	<span class="sc3"><span class="re1">&lt;block</span> <span class="re0">type</span>=<span class="st0">&quot;freight/adminhtml_axis&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;xformcontainer&quot;</span><span class="re2">/&gt;</span></span>
        	<span class="sc-1">&lt;!-- &lt;block type=&quot;freight/adminhtml_xaxis&quot; name=&quot;xformcontainer&quot;/&gt; --&gt;</span>
            <span class="sc-1">&lt;!-- &lt;block type=&quot;freight/adminhtml_yaxis&quot; name=&quot;yformcontainer&quot;/&gt; --&gt;</span>
        <span class="sc3"><span class="re1">&lt;/reference<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;/freight_adminhtml_freight_axis<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;freight_adminhtml_freight_sizegrid<span class="re2">&gt;</span></span></span>
        <span class="sc3"><span class="re1">&lt;block</span> <span class="re0">type</span>=<span class="st0">&quot;core/text_list&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;root&quot;</span> <span class="re0">output</span>=<span class="st0">&quot;toHtml&quot;</span><span class="re2">&gt;</span></span>
            <span class="sc3"><span class="re1">&lt;block</span> <span class="re0">type</span>=<span class="st0">&quot;freight/adminhtml_freight_axis_xgrid&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;freight/adminhtml_freight_axis_xgrid&quot;</span> <span class="re2">/&gt;</span></span>
            <span class="sc3"><span class="re1">&lt;block</span> <span class="re0">type</span>=<span class="st0">&quot;adminhtml/widget_grid_serializer&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;freight_grid_x_serializer&quot;</span><span class="re2">&gt;</span></span>
                <span class="sc3"><span class="re1">&lt;reference</span> <span class="re0">name</span>=<span class="st0">&quot;freight_grid_x_serializer&quot;</span><span class="re2">&gt;</span></span>
                    <span class="sc3"><span class="re1">&lt;action</span> <span class="re0">method</span>=<span class="st0">&quot;initSerializerBlock&quot;</span><span class="re2">&gt;</span></span>
                        <span class="sc3"><span class="re1">&lt;grid_block_name<span class="re2">&gt;</span></span></span>freight/adminhtml_freight_axis_xgrid<span class="sc3"><span class="re1">&lt;/grid_block_name<span class="re2">&gt;</span></span></span>
                        <span class="sc3"><span class="re1">&lt;data_callback<span class="re2">&gt;</span></span></span>getSelectedSizes<span class="sc3"><span class="re1">&lt;/data_callback<span class="re2">&gt;</span></span></span>
                        <span class="sc3"><span class="re1">&lt;hidden_input_name<span class="re2">&gt;</span></span></span>selectedSizes<span class="sc3"><span class="re1">&lt;/hidden_input_name<span class="re2">&gt;</span></span></span>
                        <span class="sc3"><span class="re1">&lt;reload_param_name<span class="re2">&gt;</span></span></span>freight_sizes<span class="sc3"><span class="re1">&lt;/reload_param_name<span class="re2">&gt;</span></span></span>
                    <span class="sc3"><span class="re1">&lt;/action<span class="re2">&gt;</span></span></span>
                <span class="sc3"><span class="re1">&lt;/reference<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;/block<span class="re2">&gt;</span></span></span>
        <span class="sc3"><span class="re1">&lt;/block<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;/freight_adminhtml_freight_sizegrid<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;freight_adminhtml_freight_sizegridonly<span class="re2">&gt;</span></span></span>
        <span class="sc3"><span class="re1">&lt;block</span> <span class="re0">type</span>=<span class="st0">&quot;core/text_list&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;root&quot;</span><span class="re2">&gt;</span></span>
            <span class="sc3"><span class="re1">&lt;block</span> <span class="re0">type</span>=<span class="st0">&quot;freight/adminhtml_freight_axis_xgrid&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;freight/adminhtml_freight_axis_xgrid&quot;</span> <span class="re2">/&gt;</span></span>
        <span class="sc3"><span class="re1">&lt;/block<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;/freight_adminhtml_freight_sizegridonly<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;freight_adminhtml_freight_weightgrid<span class="re2">&gt;</span></span></span>
        <span class="sc3"><span class="re1">&lt;block</span> <span class="re0">type</span>=<span class="st0">&quot;core/text_list&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;root&quot;</span> <span class="re0">output</span>=<span class="st0">&quot;toHtml&quot;</span><span class="re2">&gt;</span></span>
            <span class="sc3"><span class="re1">&lt;block</span> <span class="re0">type</span>=<span class="st0">&quot;freight/adminhtml_freight_axis_ygrid&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;freight/adminhtml_freight_axis_ygrid&quot;</span> <span class="re2">/&gt;</span></span>
            <span class="sc3"><span class="re1">&lt;block</span> <span class="re0">type</span>=<span class="st0">&quot;adminhtml/widget_grid_serializer&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;freight_grid_y_serializer&quot;</span><span class="re2">&gt;</span></span>
                <span class="sc3"><span class="re1">&lt;reference</span> <span class="re0">name</span>=<span class="st0">&quot;freight_grid_y_serializer&quot;</span><span class="re2">&gt;</span></span>
                    <span class="sc3"><span class="re1">&lt;action</span> <span class="re0">method</span>=<span class="st0">&quot;initSerializerBlock&quot;</span><span class="re2">&gt;</span></span>
                        <span class="sc3"><span class="re1">&lt;grid_block_name<span class="re2">&gt;</span></span></span>freight/adminhtml_freight_axis_ygrid<span class="sc3"><span class="re1">&lt;/grid_block_name<span class="re2">&gt;</span></span></span>
                        <span class="sc3"><span class="re1">&lt;data_callback<span class="re2">&gt;</span></span></span>getSelectedWeights<span class="sc3"><span class="re1">&lt;/data_callback<span class="re2">&gt;</span></span></span>
                        <span class="sc3"><span class="re1">&lt;hidden_input_name<span class="re2">&gt;</span></span></span>selectedWeights<span class="sc3"><span class="re1">&lt;/hidden_input_name<span class="re2">&gt;</span></span></span>
                        <span class="sc3"><span class="re1">&lt;reload_param_name<span class="re2">&gt;</span></span></span>freight_weights<span class="sc3"><span class="re1">&lt;/reload_param_name<span class="re2">&gt;</span></span></span>
                    <span class="sc3"><span class="re1">&lt;/action<span class="re2">&gt;</span></span></span>
                <span class="sc3"><span class="re1">&lt;/reference<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;/block<span class="re2">&gt;</span></span></span>
        <span class="sc3"><span class="re1">&lt;/block<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;/freight_adminhtml_freight_weightgrid<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;freight_adminhtml_freight_weightgridonly<span class="re2">&gt;</span></span></span>
        <span class="sc3"><span class="re1">&lt;block</span> <span class="re0">type</span>=<span class="st0">&quot;core/text_list&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;root&quot;</span><span class="re2">&gt;</span></span>
            <span class="sc3"><span class="re1">&lt;block</span> <span class="re0">type</span>=<span class="st0">&quot;freight/adminhtml_freight_axis_ygrid&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;freight/adminhtml_freight_axis_ygrid&quot;</span> <span class="re2">/&gt;</span></span>
        <span class="sc3"><span class="re1">&lt;/block<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;/freight_adminhtml_freight_weightgridonly<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/layout<span class="re2">&gt;</span></span></span></pre></div></div></div></div></div></div></div>


<p>The serialiser is set up for the weight and size grids here.</p>
<h3>Controller</h3>
<p>This is where the magic happens. Basically we need 2 separate save methods, 4 methods for the ajax calls (the whole table, and when filtering/sorting the grid a grid only variation).</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span> <span class="kw2">class</span> Turboweb_Freight_Adminhtml_FreightController <span class="kw2">extends</span> Mage_Adminhtml_Controller_action <span class="br0">&#123;</span>       <span class="kw2">protected</span> <span class="kw2">function</span> _initAction<span class="br0">&#40;</span><span class="br0">&#41;</span>     <span class="br0">&#123;</span>         <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">loadLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
            <span class="sy0">-&gt;</span>_setActiveMenu<span class="br0">&#40;</span><span class="st_h">'freight/freight'</span><span class="br0">&#41;</span>
            <span class="sy0">-&gt;</span>_addBreadcrumb<span class="br0">&#40;</span>Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'adminhtml'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Freight'</span><span class="br0">&#41;</span><span class="sy0">,</span> Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'adminhtml'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Freight'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>   
&nbsp;
    <span class="kw2">public</span> <span class="kw2">function</span> axisAction<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span>_initAction<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span>_addLeft<span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">createBlock</span><span class="br0">&#40;</span><span class="st_h">'freight/adminhtml_freight_axis_tabs'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">renderLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> savexaxisAction<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
    	try <span class="br0">&#123;</span>
			<span class="re0">$postData</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getPost</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="co1">//data is arranged in priority order</span>
		    <span class="re0">$collection</span> <span class="sy0">=</span> Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span><span class="st_h">'freight/axis'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getCollection</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		    <span class="re0">$collection</span><span class="sy0">-&gt;</span><span class="me1">addFieldToFilter</span><span class="br0">&#40;</span><span class="st_h">'type'</span><span class="sy0">,</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'eq'</span><span class="sy0">=&gt;</span><span class="st_h">'x'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		    <span class="re0">$collection</span><span class="sy0">-&gt;</span><span class="me1">setOrder</span><span class="br0">&#40;</span><span class="st_h">'priority'</span><span class="sy0">,</span> <span class="st_h">'ASC'</span><span class="br0">&#41;</span><span class="sy0">;</span>
		    <span class="re0">$collection</span><span class="sy0">-&gt;</span><span class="me1">load</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="re0">$i</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
			<span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$collection</span> <span class="kw1">as</span> <span class="re0">$id</span> <span class="sy0">=&gt;</span> <span class="re0">$size</span><span class="br0">&#41;</span>
			<span class="br0">&#123;</span>
				<span class="re0">$size</span><span class="sy0">-&gt;</span><span class="me1">setName</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'xname'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setDesc</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'xdescription'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setValue</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'xvalue'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setPriority</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'xpriority'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setStatus</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'xstatus'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">save</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
				<span class="re0">$i</span> <span class="sy0">++;</span>
			<span class="br0">&#125;</span>
			<span class="co1">//check if create new</span>
			<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'xname'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span> <span class="sy0">!=</span> <span class="st0">&quot;&quot;</span> <span class="sy0">&amp;</span>amp<span class="sy0">;&amp;</span>amp<span class="sy0">;</span> <span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'xvalue'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span> <span class="sy0">!=</span> <span class="st0">&quot;&quot;</span> <span class="sy0">&amp;</span>amp<span class="sy0">;&amp;</span>amp<span class="sy0">;</span> <span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'xpriority'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span> <span class="sy0">!=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>
			<span class="br0">&#123;</span>
				<span class="re0">$size</span> <span class="sy0">=</span> Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span><span class="st_h">'freight/axis'</span><span class="br0">&#41;</span><span class="sy0">;</span>
				<span class="re0">$size</span><span class="sy0">-&gt;</span><span class="me1">setName</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'xname'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setDesc</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'xdescription'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setValue</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'xvalue'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setPriority</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'xpriority'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="kw3">setType</span><span class="br0">&#40;</span><span class="st_h">'x'</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setStatus</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'xstatus'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">save</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="br0">&#125;</span>
            Mage<span class="sy0">::</span><span class="me2">getSingleton</span><span class="br0">&#40;</span><span class="st_h">'adminhtml/session'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">addSuccess</span><span class="br0">&#40;</span>Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'adminhtml'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Axis was successfully saved'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span> catch <span class="br0">&#40;</span>Exception <span class="re0">$e</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            Mage<span class="sy0">::</span><span class="me2">getSingleton</span><span class="br0">&#40;</span><span class="st_h">'adminhtml/session'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">addError</span><span class="br0">&#40;</span><span class="re0">$e</span><span class="sy0">-&gt;</span><span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="re0">$this</span><span class="sy0">-&gt;</span>_redirect<span class="br0">&#40;</span><span class="st_h">'*/*/axis'</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="kw1">return</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span>_redirect<span class="br0">&#40;</span><span class="st_h">'*/*/axis'</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> saveyaxisAction<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
    	try <span class="br0">&#123;</span>
&nbsp;
			<span class="re0">$postData</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getPost</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="co1">//data is arranged in priority order</span>
		    <span class="re0">$collection</span> <span class="sy0">=</span> Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span><span class="st_h">'freight/axis'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getCollection</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		    <span class="re0">$collection</span><span class="sy0">-&gt;</span><span class="me1">addFieldToFilter</span><span class="br0">&#40;</span><span class="st_h">'type'</span><span class="sy0">,</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'eq'</span><span class="sy0">=&gt;</span><span class="st_h">'y'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		    <span class="re0">$collection</span><span class="sy0">-&gt;</span><span class="me1">setOrder</span><span class="br0">&#40;</span><span class="st_h">'priority'</span><span class="sy0">,</span> <span class="st_h">'ASC'</span><span class="br0">&#41;</span><span class="sy0">;</span>
		    <span class="re0">$collection</span><span class="sy0">-&gt;</span><span class="me1">load</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="re0">$i</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
			<span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$collection</span> <span class="kw1">as</span> <span class="re0">$id</span> <span class="sy0">=&gt;</span> <span class="re0">$weight</span><span class="br0">&#41;</span>
			<span class="br0">&#123;</span>
				<span class="re0">$weight</span><span class="sy0">-&gt;</span><span class="me1">setName</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'yname'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setDesc</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'ydescription'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setValue</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'yvalue'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setPriority</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'ypriority'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setStatus</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'ystatus'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">save</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
				<span class="re0">$i</span> <span class="sy0">++;</span>
			<span class="br0">&#125;</span>
			<span class="co1">//check if create new</span>
			<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'yname'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span> <span class="sy0">!=</span> <span class="st0">&quot;&quot;</span> <span class="sy0">&amp;</span>amp<span class="sy0">;&amp;</span>amp<span class="sy0">;</span> <span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'yvalue'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span> <span class="sy0">!=</span> <span class="st0">&quot;&quot;</span> <span class="sy0">&amp;</span>amp<span class="sy0">;&amp;</span>amp<span class="sy0">;</span> <span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'ypriority'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span> <span class="sy0">!=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>
			<span class="br0">&#123;</span>
				<span class="re0">$weight</span> <span class="sy0">=</span> Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span><span class="st_h">'freight/axis'</span><span class="br0">&#41;</span><span class="sy0">;</span>
				<span class="re0">$weight</span><span class="sy0">-&gt;</span><span class="me1">setName</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'yname'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setDesc</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'ydescription'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setValue</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'yvalue'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setPriority</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'ypriority'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="kw3">setType</span><span class="br0">&#40;</span><span class="st_h">'y'</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">setStatus</span><span class="br0">&#40;</span><span class="re0">$postData</span><span class="br0">&#91;</span><span class="st_h">'ystatus'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
						<span class="sy0">-&gt;</span><span class="me1">save</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="br0">&#125;</span>
            Mage<span class="sy0">::</span><span class="me2">getSingleton</span><span class="br0">&#40;</span><span class="st_h">'adminhtml/session'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">addSuccess</span><span class="br0">&#40;</span>Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'adminhtml'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Axis was successfully saved'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span> catch <span class="br0">&#40;</span>Exception <span class="re0">$e</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            Mage<span class="sy0">::</span><span class="me2">getSingleton</span><span class="br0">&#40;</span><span class="st_h">'adminhtml/session'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">addError</span><span class="br0">&#40;</span><span class="re0">$e</span><span class="sy0">-&gt;</span><span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            Mage<span class="sy0">::</span><span class="me2">getSingleton</span><span class="br0">&#40;</span><span class="st_h">'adminhtml/session'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">setRecruitmentData</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getPost</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="re0">$this</span><span class="sy0">-&gt;</span>_redirect<span class="br0">&#40;</span><span class="st_h">'*/*/axis'</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="kw1">return</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span>_redirect<span class="br0">&#40;</span><span class="st_h">'*/*/axis'</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> deletexaxisAction<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        try <span class="br0">&#123;</span>
	    	<span class="re0">$postDataIds</span> <span class="sy0">=</span> <span class="kw3">explode</span><span class="br0">&#40;</span><span class="st_h">'&amp;amp;'</span><span class="sy0">,</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getPost</span><span class="br0">&#40;</span><span class="st_h">'selectedSizes'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$postDataIds</span> <span class="kw1">as</span> <span class="re0">$id</span><span class="br0">&#41;</span>
			<span class="br0">&#123;</span>
				<span class="co1">//only delete non zeros</span>
				<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span>
				<span class="br0">&#123;</span>
					Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span><span class="st_h">'freight/axis'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">setId</span><span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">delete</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
				<span class="br0">&#125;</span>
			<span class="br0">&#125;</span>
		    Mage<span class="sy0">::</span><span class="me2">getSingleton</span><span class="br0">&#40;</span><span class="st_h">'adminhtml/session'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">addSuccess</span><span class="br0">&#40;</span>Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'adminhtml'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Size classes were successfully deleted'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		    <span class="re0">$this</span><span class="sy0">-&gt;</span>_redirect<span class="br0">&#40;</span><span class="st_h">'*/*/axis'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span> catch <span class="br0">&#40;</span>Exception <span class="re0">$e</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            Mage<span class="sy0">::</span><span class="me2">getSingleton</span><span class="br0">&#40;</span><span class="st_h">'adminhtml/session'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">addError</span><span class="br0">&#40;</span><span class="re0">$e</span><span class="sy0">-&gt;</span><span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="re0">$this</span><span class="sy0">-&gt;</span>_redirect<span class="br0">&#40;</span><span class="st_h">'*/*/axis'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> deleteyaxisAction<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        try <span class="br0">&#123;</span>
	    	<span class="re0">$postDataIds</span> <span class="sy0">=</span> <span class="kw3">explode</span><span class="br0">&#40;</span><span class="st_h">'&amp;amp;'</span><span class="sy0">,</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getPost</span><span class="br0">&#40;</span><span class="st_h">'selectedWeights'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$postDataIds</span> <span class="kw1">as</span> <span class="re0">$id</span><span class="br0">&#41;</span>
			<span class="br0">&#123;</span>
				<span class="co1">//only delete non zeros</span>
				<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span>
				<span class="br0">&#123;</span>
					Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span><span class="st_h">'freight/axis'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">setId</span><span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">delete</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
				<span class="br0">&#125;</span>
			<span class="br0">&#125;</span>
		    Mage<span class="sy0">::</span><span class="me2">getSingleton</span><span class="br0">&#40;</span><span class="st_h">'adminhtml/session'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">addSuccess</span><span class="br0">&#40;</span>Mage<span class="sy0">::</span><span class="me2">helper</span><span class="br0">&#40;</span><span class="st_h">'adminhtml'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span>__<span class="br0">&#40;</span><span class="st_h">'Weight Classes were successfully deleted'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		    <span class="re0">$this</span><span class="sy0">-&gt;</span>_redirect<span class="br0">&#40;</span><span class="st_h">'*/*/axis'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span> catch <span class="br0">&#40;</span>Exception <span class="re0">$e</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            Mage<span class="sy0">::</span><span class="me2">getSingleton</span><span class="br0">&#40;</span><span class="st_h">'adminhtml/session'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">addError</span><span class="br0">&#40;</span><span class="re0">$e</span><span class="sy0">-&gt;</span><span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="re0">$this</span><span class="sy0">-&gt;</span>_redirect<span class="br0">&#40;</span><span class="st_h">'*/*/axis'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> sizeGridAction<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">loadLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getBlock</span><span class="br0">&#40;</span><span class="st_h">'freight/adminhtml_freight_axis_xgrid'</span><span class="br0">&#41;</span>
            <span class="sy0">-&gt;</span><span class="me1">setSizesGroup</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getPost</span><span class="br0">&#40;</span><span class="st_h">'products_grouped'</span><span class="sy0">,</span> <span class="kw4">null</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">renderLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> sizeGridOnlyAction<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">loadLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getBlock</span><span class="br0">&#40;</span><span class="st_h">'freight/adminhtml_freight_axis_xgrid'</span><span class="br0">&#41;</span>
            <span class="sy0">-&gt;</span><span class="me1">setSizesGroup</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getPost</span><span class="br0">&#40;</span><span class="st_h">'products_grouped'</span><span class="sy0">,</span> <span class="kw4">null</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">renderLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> weightGridAction<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">loadLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getBlock</span><span class="br0">&#40;</span><span class="st_h">'freight/adminhtml_freight_axis_ygrid'</span><span class="br0">&#41;</span>
            <span class="sy0">-&gt;</span><span class="me1">setWeightsGroup</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getPost</span><span class="br0">&#40;</span><span class="st_h">'products_grouped'</span><span class="sy0">,</span> <span class="kw4">null</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">renderLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw2">public</span> <span class="kw2">function</span> weightGridOnlyAction<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">loadLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getBlock</span><span class="br0">&#40;</span><span class="st_h">'freight/adminhtml_freight_axis_ygrid'</span><span class="br0">&#41;</span>
            <span class="sy0">-&gt;</span><span class="me1">setWeightsGroup</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getPost</span><span class="br0">&#40;</span><span class="st_h">'products_grouped'</span><span class="sy0">,</span> <span class="kw4">null</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">renderLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<h3>Conclusions</h3>
<p>During the development of this UI, I was constantly challenged and often ran into dead ends.  I would recommend using this concept of serialised ajax calls, and remind anyone of the fix for the total records when adding an item to the collection.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.turboweb.co.nz/2011/04/16/creating-a-magento-admin-fully-editable-grid/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Updating Magento categories, en masse</title>
		<link>http://dev.turboweb.co.nz/2011/04/14/updating-magento-categories-en-masse/</link>
		<comments>http://dev.turboweb.co.nz/2011/04/14/updating-magento-categories-en-masse/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 21:59:12 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[Magento]]></category>

		<guid isPermaLink="false">http://dev.turboweb.co.nz/?p=80</guid>
		<description><![CDATA[I had a problem where I had to update all of the categories in a Magento store to change the CMS block to &#8220;Sub Category Listing&#8221; because they had been created without a CMS block selected. Doing this through the UI would have been painful as there were over 300 categories that had to be [...]]]></description>
			<content:encoded><![CDATA[<p>I had a problem where I had to update all of the categories in a Magento store to change the CMS block to &#8220;Sub Category Listing&#8221; because they had been created without a CMS block selected.  Doing this through the UI would have been painful as there were over 300 categories that had to be updated.</p>
<p>The solution was relatively simple, thanks to a quick PHP script.  I put this in the webroot as updatecategories.php:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>
&nbsp;
<span class="kw3">ob_end_flush</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">echo</span> <span class="st0">&quot;Started &quot;</span> <span class="sy0">.</span> <span class="kw3">date</span><span class="br0">&#40;</span> <span class="st0">&quot;d/m/y h:i:s&quot;</span> <span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&quot;<span class="es1">\r</span><span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
<span class="kw1">require_once</span> <span class="st_h">'/app/Mage.php'</span><span class="sy0">;</span>
<span class="kw3">umask</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span>
Mage<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">setCurrentStore</span><span class="br0">&#40;</span> Mage_Core_Model_App<span class="sy0">::</span><span class="me2">ADMIN_STORE_ID</span> <span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="re0">$categories</span> <span class="sy0">=</span> Mage<span class="sy0">::</span><span class="me2">getModel</span><span class="br0">&#40;</span> <span class="st_h">'catalog/category'</span> <span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getCollection</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">echo</span> <span class="st0">&quot;Processing &quot;</span> <span class="sy0">.</span> <span class="kw3">count</span><span class="br0">&#40;</span> <span class="re0">$categories</span> <span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&quot; categories<span class="es1">\r</span><span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
<span class="kw1">foreach</span><span class="br0">&#40;</span> <span class="re0">$categories</span> <span class="kw1">as</span> <span class="re0">$category</span> <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    <span class="co1">// 6 is the ID for &quot;Sub Category Listing&quot;</span>
    <span class="re0">$category</span><span class="sy0">-&gt;</span><span class="me1">setData</span><span class="br0">&#40;</span> <span class="st_h">'landing_page'</span><span class="sy0">,</span> <span class="nu0">6</span> <span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">save</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw1">echo</span> <span class="st0">&quot;.&quot;</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="kw1">echo</span> <span class="st0">&quot;<span class="es1">\r</span><span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
<span class="kw1">echo</span> <span class="st0">&quot;Finished &quot;</span><span class="sy0">.</span><span class="kw3">date</span><span class="br0">&#40;</span> <span class="st0">&quot;d/m/y h:i:s&quot;</span> <span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\r</span><span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
&nbsp;
<span class="sy1">?&gt;</span></pre></div></div></div></div></div></div></div>


<p>I then ran the script (e.g. php updatecategories.php) and after about 30 seconds all categories were changed.  You could probably point your web browser at the file as well to achieve the same effect. This will give you a starting point if you need to do anything else to the category, e.g. change the description, name, image etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.turboweb.co.nz/2011/04/14/updating-magento-categories-en-masse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The New Web: HTML5 and CSS3 Resources</title>
		<link>http://dev.turboweb.co.nz/2011/03/14/the-new-web-html5-and-css3-resources/</link>
		<comments>http://dev.turboweb.co.nz/2011/03/14/the-new-web-html5-and-css3-resources/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 02:48:11 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://dev.turboweb.co.nz/?p=33</guid>
		<description><![CDATA[Recently I&#8217;ve been coming across more interesting links to do with HTML5 and CSS3. The first thing you want to know is can I use these two new technologies. Luckily that is where caniuse.com comes in handy. It is a great resource for looking at what web browsers are compatible with the newer standards. So [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I&#8217;ve been coming across more interesting links to do with HTML5 and CSS3.</p>
<p>The first thing you want to know is can I use these two new technologies.  Luckily that is where <a href="http://caniuse.com/">caniuse.com</a> comes in handy.  It is a great resource for looking at what web browsers are compatible with the newer standards.</p>
<p>So is HTML5 worth it?  The website <a href="http://www.html5rocks.com">www.html5rocks.com</a> will show you some of the great features it has and also let you play with them in the playground.</p>
<p>So you want to start writing in HTML5?  You&#8217;ll need some good starting points.  Boilerplates are a great way to start from a good place.  The resources over at <a href="http://html5boilerplate.com/">html5boilerplate.com</a> can help you get that start.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.turboweb.co.nz/2011/03/14/the-new-web-html5-and-css3-resources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento 1.4.2.0 changes to customer attributes</title>
		<link>http://dev.turboweb.co.nz/2011/03/03/changes-to-customer-attributes/</link>
		<comments>http://dev.turboweb.co.nz/2011/03/03/changes-to-customer-attributes/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 01:04:11 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[1.4.2.0]]></category>
		<category><![CDATA[Magento]]></category>

		<guid isPermaLink="false">http://dev.turboweb.co.nz/?p=21</guid>
		<description><![CDATA[As of Magento 1.4.2.0 the customer model now implements eav from attributes, and a new customer form model. For anyone who has existing custom attributes, or are thinking of making some this will pose new issues in accessing and saving this data. To implement a custom customer attribute, the sql/[module]_setup install file needs to add [...]]]></description>
			<content:encoded><![CDATA[<p>As of Magento 1.4.2.0 the customer model now implements eav from attributes, and a new customer form model. For anyone who has existing custom attributes, or are thinking of making some this will pose new issues in accessing and saving this data.</p>
<p>To implement a custom customer attribute, the sql/[module]_setup install file needs to add the new attribute and then add this attribute to several forms (those that deal with a customer).  See below, but these are customer_account_edit, customer_account_create, adminhtml_customer and checkout_register.</p>
<p>Here is an example of an existing custom attributes to add a customer type field:<br />
<strong>sql/[module]_setup/mysql4-install-0.1.0.php</strong> (for example)</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">function</span> createCustomAttributes<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    <span class="re0">$attribs</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span>
        <span class="st_h">'customer'</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span>
            <span class="st_h">'customer_type'</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span>
                <span class="st_h">'type'</span> <span class="sy0">=&gt;</span> <span class="st_h">'varchar'</span><span class="sy0">,</span>
                <span class="st_h">'label'</span> <span class="sy0">=&gt;</span> <span class="st_h">'Customer Type'</span><span class="sy0">,</span>
                <span class="st_h">'sort_order'</span> <span class="sy0">=&gt;</span> <span class="nu0">5</span><span class="sy0">,</span>
                <span class="st_h">'required'</span> <span class="sy0">=&gt;</span> <span class="nu0">0</span>
            <span class="br0">&#41;</span><span class="sy0">,</span>
        <span class="br0">&#41;</span>
    <span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="re0">$setup</span> <span class="sy0">=</span> <span class="kw2">new</span> Mage_Eav_Model_Entity_Setup<span class="br0">&#40;</span><span class="st_h">'core_setup'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="kw1">foreach</span><span class="br0">&#40;</span> <span class="re0">$attribs</span> <span class="kw1">as</span> <span class="re0">$entityName</span> <span class="sy0">=&amp;</span>gt<span class="sy0">;</span> <span class="re0">$attributes</span> <span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="kw1">foreach</span><span class="br0">&#40;</span> <span class="re0">$attributes</span> <span class="kw1">as</span> <span class="re0">$attributeName</span> <span class="sy0">=&gt;</span> <span class="re0">$attributeData</span> <span class="br0">&#41;</span>
        <span class="br0">&#123;</span>
            <span class="re0">$setup</span><span class="sy0">-&gt;</span><span class="me1">addAttribute</span><span class="br0">&#40;</span> <span class="re0">$entityName</span><span class="sy0">,</span> <span class="re0">$attributeName</span><span class="sy0">,</span> <span class="re0">$attributeData</span> <span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
createCustomAttributes<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>This code will add the customer attribute &#8216;customer_type&#8217; to the eav attribute table. Now comes the important difference introduced in Magento 1.4.2.0:</p>
<p><strong>sql/[module]_setup/mysql4-install-0.1.0.php</strong> (continues)</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="co1">//add attributes to new forms model attributes</span>
<span class="re0">$eavConfig</span> <span class="sy0">=</span> Mage<span class="sy0">::</span><span class="me2">getSingleton</span><span class="br0">&#40;</span><span class="st_h">'eav/config'</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$attributeArray</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'customer_type'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">//I handle this in an array incase several attributes need adding, depending on your needs.</span>
<span class="kw1">foreach</span><span class="br0">&#40;</span> <span class="re0">$attributeArray</span> <span class="kw1">as</span> <span class="re0">$attrib</span> <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    <span class="re0">$attribute</span> <span class="sy0">=</span> <span class="re0">$eavConfig</span><span class="sy0">-&amp;</span>gt<span class="sy0">;</span>getAttribute<span class="br0">&#40;</span><span class="st_h">'customer'</span><span class="sy0">,</span> <span class="re0">$attrib</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="re0">$attribute</span><span class="sy0">-&gt;</span><span class="me1">setData</span><span class="br0">&#40;</span><span class="st_h">'used_in_forms'</span><span class="sy0">,</span>   <span class="kw3">array</span>
        <span class="br0">&#40;</span>
            <span class="st_h">'customer_account_edit'</span><span class="sy0">,</span>
            <span class="st_h">'customer_account_create'</span><span class="sy0">,</span>
            <span class="st_h">'adminhtml_customer'</span><span class="sy0">,</span>
            <span class="st_h">'checkout_register'</span>
        <span class="br0">&#41;</span>
    <span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="re0">$attribute</span><span class="sy0">-&gt;</span><span class="me1">save</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>This will add a field to all of the customer forms, and also the onepage checkout if using the user chooses to create a new account during checkout method! (although the latter will require adding to the template&#8230; in the format: name=&#8221;billing[customer_type]&#8221; as the other forms use the form model to generate the HTML fields)</p>
<p>If you are using the registration page, the attribute also needs to be added to the sales_flat_quote table: (in the same file..</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="re0">$installer</span><span class="sy0">-&gt;</span><span class="me1">getConnection</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">addColumn</span><span class="br0">&#40;</span>
    <span class="re0">$installer</span><span class="sy0">-&gt;</span><span class="me1">getTable</span><span class="br0">&#40;</span><span class="st_h">'sales_flat_quote'</span><span class="br0">&#41;</span><span class="sy0">,</span>
    <span class="st_h">'customer_type'</span><span class="sy0">,</span>
    <span class="st_h">'text  NULL  DEFAULT  NULL  AFTER `customer_taxvat`'</span>
<span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>And you will need to edit the module&#8217;s etc file:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;global<span class="re2">&gt;</span></span></span>
        <span class="sc3"><span class="re1">&lt;fieldsets<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;customer_account<span class="re2">&gt;</span></span></span>
                <span class="sc3"><span class="re1">&lt;customer_type<span class="re2">&gt;</span></span></span>
                    <span class="sc3"><span class="re1">&lt;create<span class="re2">&gt;</span></span></span>1<span class="sc3"><span class="re1">&lt;/create<span class="re2">&gt;</span></span></span>
                    <span class="sc3"><span class="re1">&lt;update<span class="re2">&gt;</span></span></span>1<span class="sc3"><span class="re1">&lt;/update<span class="re2">&gt;</span></span></span>
                    <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>1<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span>
                    <span class="sc3"><span class="re1">&lt;to_quote<span class="re2">&gt;</span></span></span>customer_type<span class="sc3"><span class="re1">&lt;/to_quote<span class="re2">&gt;</span></span></span>
                <span class="sc3"><span class="re1">&lt;/customer_type<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;/customer_account<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;checkout_onepage_quote<span class="re2">&gt;</span></span></span>
                <span class="sc3"><span class="re1">&lt;customer_type<span class="re2">&gt;</span></span></span>
                    <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>1<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span>
                    <span class="sc3"><span class="re1">&lt;to_customer<span class="re2">&gt;</span></span></span>customer_type<span class="sc3"><span class="re1">&lt;/to_customer<span class="re2">&gt;</span></span></span>
                <span class="sc3"><span class="re1">&lt;/customer_type<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;/checkout_onepage_quote<span class="re2">&gt;</span></span></span>
        <span class="sc3"><span class="re1">&lt;/fieldsets<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/global<span class="re2">&gt;</span></span></span></pre></div></div></div></div></div></div></div>


]]></content:encoded>
			<wfw:commentRss>http://dev.turboweb.co.nz/2011/03/03/changes-to-customer-attributes/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Emulating &#8220;immediate mode&#8221; in a PHP CLI script</title>
		<link>http://dev.turboweb.co.nz/2011/02/28/emulating-immediate-mode-in-a-php-cli-script/</link>
		<comments>http://dev.turboweb.co.nz/2011/02/28/emulating-immediate-mode-in-a-php-cli-script/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 21:34:46 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[CLI]]></category>
		<category><![CDATA[Debugging]]></category>

		<guid isPermaLink="false">http://dev.turboweb.co.nz/?p=9</guid>
		<description><![CDATA[I&#8217;ve been working on a complex PHP CLI script lately and in order to debug something I&#8217;ve been putting var_dump() and die commands at the appropriate place.  This is annoying. Packages like xdebug provide the ability to put a breakpoint in, but this requires you to configure your environment appropriately and use an IDE that [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on a complex PHP CLI script lately and in order to debug something I&#8217;ve been putting var_dump() and die commands at the appropriate place.  This is annoying.</p>
<p>Packages like xdebug provide the ability to put a breakpoint in, but this requires you to configure your environment appropriately and use an IDE that can listen and step through the script.  Also, I&#8217;ve seen people having trouble using xdebug with PHP CLI &#8211; I haven&#8217;t tried it myself.</p>
<p>So, anyway my hacky solution was to roll the following code at the point I wanted to debug.  I had the variable scope at my disposal, so I could issue my own var_dump(), echo and variable assignment commands, before then entering &#8220;break;&#8221; to get out of the loop (I had to put an exception in for &#8220;break;&#8221; because the break is run in the eval command and it won&#8217;t break out of it without an error).</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="co1">// Helper line so I can find and remove this code later:</span>
<span class="kw1">echo</span> <span class="st0">&quot;<span class="es1">\n</span>&quot;</span> <span class="sy0">.</span> <span class="kw4">__FILE__</span> <span class="sy0">.</span> <span class="st_h">':'</span> <span class="sy0">.</span> <span class="kw4">__LINE__</span> <span class="sy0">.</span> <span class="st_h">' breakpoint'</span> <span class="sy0">.</span> PHP_EOL<span class="sy0">;</span>
<span class="kw1">while</span><span class="br0">&#40;</span> <span class="kw4">true</span> <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	<span class="re0">$cmd</span> <span class="sy0">=</span> readline<span class="br0">&#40;</span> <span class="st0">&quot;debug&amp;gt; &quot;</span> <span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="kw1">if</span><span class="br0">&#40;</span> <span class="re0">$cmd</span> <span class="sy0">==</span> <span class="st_h">'break;'</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">break</span><span class="sy0">;</span> <span class="br0">&#125;</span>
	<span class="kw3">eval</span><span class="br0">&#40;</span> <span class="re0">$cmd</span> <span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>You may want to wrap this in some logic test so that it only fires when certain criteria are met.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.turboweb.co.nz/2011/02/28/emulating-immediate-mode-in-a-php-cli-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

