<?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>EyeMagine Thoughts</title>
	<atom:link href="http://www.eyemaginetech.com/our-thoughts/feed" rel="self" type="application/rss+xml" />
	<link>http://www.eyemaginetech.com/our-thoughts</link>
	<description>EyeMagine is a Orange County based web design and development agency</description>
	<lastBuildDate>Tue, 31 Aug 2010 21:25:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>OneStepCheckout</title>
		<link>http://www.eyemaginetech.com/our-thoughts/uncategorized/onestepcheckout</link>
		<comments>http://www.eyemaginetech.com/our-thoughts/uncategorized/onestepcheckout#comments</comments>
		<pubDate>Tue, 31 Aug 2010 21:24:19 +0000</pubDate>
		<dc:creator>Andy Etemadi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.eyemaginetech.com/our-thoughts/?p=234</guid>
		<description><![CDATA[Everybody is doing it.]]></description>
			<content:encoded><![CDATA[<p>OneStepCheckout is a Magento module that enhances the customer shopping experience by combining multiple steps during checkout into a single, well-formatted checkout page.</p>
<p>EyeMagine is an authorized OneStepCheckout partner and we highly recommend the OSC to all our clients. The OSC is the new must-have Magento extension that is taking the market by storm.</p>
<p>OSC is a total revamp of the standard checkout process in Magento. The core feature is that it reduces the six standard Magento checkout steps down to one. Totals and prices are dynamically updated via AJAX when shipping/payment method is selected. The user simply fills in their address and chooses delivery/payment methods on the same page, rather than having to do a separate step for each.</p>
<p>Improving the checkout process results in more customers completing their sales, and this has an immediate impact on your bottom line. It is the single most effective technical change you can make to reduce shopping cart abandonment.</p>
<p><a href="/contact-us/">Contact us</a> to find out how to add OneStepCheckout to your Magento store today!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eyemaginetech.com/our-thoughts/uncategorized/onestepcheckout/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taking the Guesswork out of User Experience</title>
		<link>http://www.eyemaginetech.com/our-thoughts/web-design/taking-the-guesswork-out-of-user-experience</link>
		<comments>http://www.eyemaginetech.com/our-thoughts/web-design/taking-the-guesswork-out-of-user-experience#comments</comments>
		<pubDate>Wed, 21 Apr 2010 00:01:01 +0000</pubDate>
		<dc:creator>Mathew Epstein</dc:creator>
				<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[search engine optimization]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.eyemaginetech.com/our-thoughts/?p=221</guid>
		<description><![CDATA[For many designers, there used to be a bit of mystery and guesswork to finding the sweet spot in a website's design between beautiful and functional.]]></description>
			<content:encoded><![CDATA[<p>Finding the sweet spot between a beautiful design and a functional design used to be a mysterious challenge left to designers crack.</p>
<p><span id="more-221"></span> Currently, there are entire institutions dedicated to performing usability tests that serve to demystify the user experience and explain how a website visitor interacts with a site. Several years ago, virtualhosting.com posted a fascinating article about website visitor eye tracking studies that revealed some very interesting tidbits on how your website design affects your visitors. Despite its age, I feel that many of its findings are quite relevant to the modern web and how visitors interact with websites. I hand picked several of their main points to discuss further here, you may view the list and their explanations in full at: <a href="http://www.virtualhosting.com/blog/2007/scientific-web-design-23-actionable-lessons-from-eye-tracking-studies/" target="_blank">23 Actionable Lessons from Eye-Tracking Studies</a></p>
<ol>
<li>
<h3>1. Text attracts attention before graphics.</h3>
<p>I instinctively want to disagree with this one. After all, everyone loves pictures and good photography can make or break a website&#8217;s design. However, when a visitor is coming to your website, the majority of the time they are looking for information about what you do, who you are, or how you can make them better informed. Your visitors want real substance, not just visual fluff.</li>
<li>
<h3>2. Users initially look at the top left and upper portion of the page before moving down and to the right.</h3>
<p>This point touches on the F shape of a user&#8217;s eye movements over a website. You can use this to your advantage and lay out important calls to action and headlines along this shape to maximize their visibility.</li>
<li>
<h3>3. Readers ignore banners.</h3>
<p>This should come as no surprise to many of you, users have been bombarded with banner ads on many of their favorite sites, and users are learning to completely tune these out. Because of this, it isn&#8217;t wise to design calls to action that resemble banner ads too closely in either shape or design.</li>
<li>
<h3>4. People generally scan lower portions of the page.</h3>
<p>This is a big one in my experience with client relations. All too frequently I get requests to try and stuff everything up on the page to keep the information “above the fold.” With the invention of the scroll wheel on mouses, it has become normal behavior for a user to scroll through a page. An excellent article that expounds on this point can be found at: <a href="http://www.iampaddy.com/lifebelow600/" target="_blank">Life Below 600px</a></li>
<li>
<h3>5. Shorter paragraphs perform better than long ones.</h3>
<p>Your visitors are lazy, they want to get the answer to their question as quickly and easily as possible. There is a challenge in balancing the need for text for SEO purposes, and the need to present your information as plainly as possible for your visitors. Users don&#8217;t read big blocks of text, the shorter and more succinct you can state your point, the more likely it is going to be read. In short, use lists.</li>
<li>
<h3>6. Lists hold reader attention longer.</h3>
<p>Lists present information in short phrases that make it easy for users to scan and find what they want quickly. Lists are the most efficient way to get your information to your users.</li>
<li>
<h3>7. White space is good.</h3>
<p>White space is vital to making your content more digestible for the user. By giving your information space to denote its importance, you make it easier for the user to find what they are looking for.</li>
</ol>
<p>The main goal of user experience studies are to determine how to make your content more accessible and readable by your users. If you would like to find out how EyeMagine can optimize your site&#8217;s content to allow you to better communicate with your audience, please <a href="/contact-us">contact us today</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eyemaginetech.com/our-thoughts/web-design/taking-the-guesswork-out-of-user-experience/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento: Tax By City</title>
		<link>http://www.eyemaginetech.com/our-thoughts/web-development/magento-tax-by-city</link>
		<comments>http://www.eyemaginetech.com/our-thoughts/web-development/magento-tax-by-city#comments</comments>
		<pubDate>Wed, 14 Apr 2010 18:59:29 +0000</pubDate>
		<dc:creator>Rolando Granadino</dc:creator>
				<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.eyemaginetech.com/our-thoughts/?p=183</guid>
		<description><![CDATA[Tax rules can be complicated; they can be even more complicated if you need tax rules based on the city while your online store tax rules are based on postal codes.]]></description>
			<content:encoded><![CDATA[<p>Tax rules can be complicated; they can be even more complicated if you need tax rules based on the city while your online store tax rules are based on postal codes.<span id="more-183"></span>  For example, districts in California have a higher sales tax rate than the state base tax rate.  Magento&#8217;s built-in tax rate system supports tax rates by country, state/region, and postal code. This will suffice for most stores, but the California Board Of Equalization advises against tax rate rules based on a mailing address because postal codes may cross district boundaries.  As suggested in <a title="Magento  - Tax per city - Can Magento Do... - eCommerce Software for Growth" href="http://www.magentocommerce.com/boards/viewthread/11641/" target="_blank">this Magento message board discussion</a>, store owners need another way to calculate taxes.</p>
<p>Calculating taxes based on city instead of postal code can be a straightforward process as we show in this article. We will take advantage of the tax_postcode column in the tax_calculation_rate table. This is a relatively quick and simple solution for creating a new database column and modifying the Admin HTML blocks.</p>
<h2>Directory Structure:</h2>
<pre>app/
  code/
    local/
      Eyemagine/
        Taxbycity/
          etc/
            config.xml
          Model/
            Calculation.php
            Mysql4/
              Calculation.php
          sql/
            taxbycity_setup/
              mysql-install-0.1.0.php</pre>
<h2>Configuration</h2>
<p>File: app/code/local/Eyemagine/Taxbycity/etc/config.xml</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #ddbb00;">&amp;lt;</span>?xml version=&quot;1.0&quot;?<span style="color: #ddbb00;">&amp;gt;</span>
<span style="color: #ddbb00;">&amp;lt;</span>config<span style="color: #ddbb00;">&amp;gt;</span>
 <span style="color: #ddbb00;">&amp;lt;</span>modules<span style="color: #ddbb00;">&amp;gt;</span>
   <span style="color: #ddbb00;">&amp;lt;</span>Eyemagine_Taxbycity<span style="color: #ddbb00;">&amp;gt;</span>
     <span style="color: #ddbb00;">&amp;lt;</span>version<span style="color: #ddbb00;">&amp;gt;</span>0.1.0<span style="color: #ddbb00;">&amp;lt;</span>/version<span style="color: #ddbb00;">&amp;gt;</span>
   <span style="color: #ddbb00;">&amp;lt;</span>/Eyemagine_Taxbycity<span style="color: #ddbb00;">&amp;gt;</span>
 <span style="color: #ddbb00;">&amp;lt;</span>/modules<span style="color: #ddbb00;">&amp;gt;</span>
 <span style="color: #ddbb00;">&amp;lt;</span>global<span style="color: #ddbb00;">&amp;gt;</span>
   <span style="color: #ddbb00;">&amp;lt;</span>resources<span style="color: #ddbb00;">&amp;gt;</span>
     <span style="color: #ddbb00;">&amp;lt;</span>taxbycity_setup<span style="color: #ddbb00;">&amp;gt;</span>
       <span style="color: #ddbb00;">&amp;lt;</span>setup<span style="color: #ddbb00;">&amp;gt;</span>
         <span style="color: #ddbb00;">&amp;lt;</span>module<span style="color: #ddbb00;">&amp;gt;</span>Eyemagine_Taxbycity<span style="color: #ddbb00;">&amp;lt;</span>/module<span style="color: #ddbb00;">&amp;gt;</span>
       <span style="color: #ddbb00;">&amp;lt;</span>/setup<span style="color: #ddbb00;">&amp;gt;</span>
       <span style="color: #ddbb00;">&amp;lt;</span>connection<span style="color: #ddbb00;">&amp;gt;</span>
         <span style="color: #ddbb00;">&amp;lt;</span>use<span style="color: #ddbb00;">&amp;gt;</span>core_setup<span style="color: #ddbb00;">&amp;lt;</span>/use<span style="color: #ddbb00;">&amp;gt;</span>
       <span style="color: #ddbb00;">&amp;lt;</span>/connection<span style="color: #ddbb00;">&amp;gt;</span>
     <span style="color: #ddbb00;">&amp;lt;</span>/taxbycity_setup<span style="color: #ddbb00;">&amp;gt;</span>
   <span style="color: #ddbb00;">&amp;lt;</span>/resources<span style="color: #ddbb00;">&amp;gt;</span>
   <span style="color: #ddbb00;">&amp;lt;</span>models<span style="color: #ddbb00;">&amp;gt;</span>
     <span style="color: #ddbb00;">&amp;lt;</span>tax<span style="color: #ddbb00;">&amp;gt;</span>
       <span style="color: #ddbb00;">&amp;lt;</span>rewrite<span style="color: #ddbb00;">&amp;gt;</span>
         <span style="color: #ddbb00;">&amp;lt;</span>calculation<span style="color: #ddbb00;">&amp;gt;</span>Eyemagine_Taxbycity_Model_Calculation<span style="color: #ddbb00;">&amp;lt;</span>/calculation<span style="color: #ddbb00;">&amp;gt;</span>
       <span style="color: #ddbb00;">&amp;lt;</span>/rewrite<span style="color: #ddbb00;">&amp;gt;</span>
     <span style="color: #ddbb00;">&amp;lt;</span>/tax<span style="color: #ddbb00;">&amp;gt;</span>
     <span style="color: #ddbb00;">&amp;lt;</span>tax_mysql4<span style="color: #ddbb00;">&amp;gt;</span>
       <span style="color: #ddbb00;">&amp;lt;</span>rewrite<span style="color: #ddbb00;">&amp;gt;</span>
         <span style="color: #ddbb00;">&amp;lt;</span>calculation<span style="color: #ddbb00;">&amp;gt;</span>Eyemagine_Taxbycity_Model_Mysql4_Calculation<span style="color: #ddbb00;">&amp;lt;</span>/calculation<span style="color: #ddbb00;">&amp;gt;</span>
       <span style="color: #ddbb00;">&amp;lt;</span>/rewrite<span style="color: #ddbb00;">&amp;gt;</span>
     <span style="color: #ddbb00;">&amp;lt;</span>/tax_mysql4<span style="color: #ddbb00;">&amp;gt;</span>
   <span style="color: #ddbb00;">&amp;lt;</span>/models<span style="color: #ddbb00;">&amp;gt;</span>
 <span style="color: #ddbb00;">&amp;lt;</span>/global<span style="color: #ddbb00;">&amp;gt;</span>
<span style="color: #ddbb00;">&amp;lt;</span>/config<span style="color: #ddbb00;">&amp;gt;</span></pre></div></div>

<p>Mage_Tax_Model_Calculation and Mage_Tax_Model_Mysql4_Calculation are the one two classes we will overload. This module will affect how the tax rate is queried from the database and the criteria used to search for the tax rate.</p>
<h2>The Setup</h2>
<p>File: app/code/local/Eyemagine/Taxbycity/sql/taxbycity_setup/mysql-install-0.1.0.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * mysql-install-0.1.0.php
 * @author EyeMagine
 */</span>
<span style="color: #666666; font-style: italic;">/* @var $this Mage_Core_Model_Resource_Setup */</span>
<span style="color: #000088;">$installer</span>  <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span>         <span style="color: #339933;">=</span> <span style="color: #000088;">$installer</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getConnection<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$installer</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>startSetup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$installer</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>run<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;
ALTER TABLE {<span style="color: #006699; font-weight: bold;">$installer</span>-&amp;gt;getTable('tax_calculation_rate')} CHANGE `tax_postcode` `tax_postcode` VARCHAR( 32 ) NOT NULL
&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>The tax_postcode column by default has a 12-character limit, which presents problems for city names such as &#8220;Rancho Santa Margarita.&#8221; The setup for this module simply increases the limit to 32 characters.</p>
<h2>The Request</h2>
<p>File: app/code/local/Eyemagine/Taxbycity/Mode/Calculation.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * Calculation.php
 * @author EyeMagine
 *
 */</span>
<span style="color: #009933; font-style: italic;">/**
 * Overload the tax calculation class
 * @author EyeMagine
 *
 */</span>
<span style="color: #000000; font-weight: bold;">class</span> Eyemagine_Taxbycity_Model_Calculation <span style="color: #000000; font-weight: bold;">extends</span> Mage_Tax_Model_Calculation
<span style="color: #009900;">&#123;</span>
    <span style="color: #009933; font-style: italic;">/**
     * override the getRateRequest to add the city information to the request
     * @see Mage_Tax_Model_Calculation::getRateRequest
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getRateRequest<span style="color: #009900;">&#40;</span><span style="color: #000088;">$shippingAddress</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$billingAddress</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$customerTaxClass</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$store</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$address</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Varien_Object<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$session</span> <span style="color: #339933;">=</span> Mage<span style="color: #339933;">::</span><span style="color: #004000;">getSingleton</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'customer/session'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$basedOn</span> <span style="color: #339933;">=</span> Mage<span style="color: #339933;">::</span><span style="color: #004000;">getStoreConfig</span><span style="color: #009900;">&#40;</span>Mage_Tax_Model_Config<span style="color: #339933;">::</span><span style="color: #004000;">CONFIG_XML_PATH_BASED_ON</span><span style="color: #339933;">,</span> <span style="color: #000088;">$store</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$shippingAddress</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #000088;">$basedOn</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'shipping'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$billingAddress</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #000088;">$basedOn</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'billing'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$basedOn</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$billingAddress</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">||</span> <span style="color: #990000;">is_null</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$billingAddress</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #339933;">!</span><span style="color: #000088;">$billingAddress</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getCountryId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #000088;">$basedOn</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'billing'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$shippingAddress</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">||</span> <span style="color: #990000;">is_null</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$shippingAddress</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #339933;">!</span><span style="color: #000088;">$shippingAddress</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getCountryId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #000088;">$basedOn</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'shipping'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$session</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>isLoggedIn<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000088;">$basedOn</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000088;">$defBilling</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$session</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getCustomer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getDefaultBillingAddress<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #000088;">$defShipping</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$session</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getCustomer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getDefaultShippingAddress<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$basedOn</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'billing'</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #000088;">$defBilling</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #000088;">$defBilling</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getCountryId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #000088;">$billingAddress</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$defBilling</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$basedOn</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'shipping'</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #000088;">$defShipping</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #000088;">$defShipping</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getCountryId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #000088;">$shippingAddress</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$defShipping</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #000088;">$basedOn</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$basedOn</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'billing'</span><span style="color: #339933;">:</span>
                <span style="color: #000088;">$address</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$billingAddress</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'shipping'</span><span style="color: #339933;">:</span>
                <span style="color: #000088;">$address</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$shippingAddress</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'origin'</span><span style="color: #339933;">:</span>
                <span style="color: #000088;">$address</span>
                    <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setCountryId<span style="color: #009900;">&#40;</span>Mage<span style="color: #339933;">::</span><span style="color: #004000;">getStoreConfig</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'shipping/origin/country_id'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$store</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                    <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setRegionId<span style="color: #009900;">&#40;</span>Mage<span style="color: #339933;">::</span><span style="color: #004000;">getStoreConfig</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'shipping/origin/region_id'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$store</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                    <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setPostcode<span style="color: #009900;">&#40;</span>Mage<span style="color: #339933;">::</span><span style="color: #004000;">getStoreConfig</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'shipping/origin/postcode'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$store</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">:</span>
                <span style="color: #000088;">$address</span>
                    <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setCountryId<span style="color: #009900;">&#40;</span>Mage<span style="color: #339933;">::</span><span style="color: #004000;">getStoreConfig</span><span style="color: #009900;">&#40;</span>Mage_Tax_Model_Config<span style="color: #339933;">::</span><span style="color: #004000;">CONFIG_XML_PATH_DEFAULT_COUNTRY</span><span style="color: #339933;">,</span> <span style="color: #000088;">$store</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                    <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setRegionId<span style="color: #009900;">&#40;</span>Mage<span style="color: #339933;">::</span><span style="color: #004000;">getStoreConfig</span><span style="color: #009900;">&#40;</span>Mage_Tax_Model_Config<span style="color: #339933;">::</span><span style="color: #004000;">CONFIG_XML_PATH_DEFAULT_REGION</span><span style="color: #339933;">,</span> <span style="color: #000088;">$store</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                    <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setPostcode<span style="color: #009900;">&#40;</span>Mage<span style="color: #339933;">::</span><span style="color: #004000;">getStoreConfig</span><span style="color: #009900;">&#40;</span>Mage_Tax_Model_Config<span style="color: #339933;">::</span><span style="color: #004000;">CONFIG_XML_PATH_DEFAULT_POSTCODE</span><span style="color: #339933;">,</span> <span style="color: #000088;">$store</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_null</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$customerTaxClass</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #000088;">$session</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>isLoggedIn<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$customerTaxClass</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$session</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getCustomer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getTaxClassId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$customerTaxClass</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #339933;">!</span><span style="color: #000088;">$session</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>isLoggedIn<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$defaultCustomerGroup</span> <span style="color: #339933;">=</span> Mage<span style="color: #339933;">::</span><span style="color: #004000;">getStoreConfig</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'customer/create_account/default_group'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$store</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$customerTaxClass</span> <span style="color: #339933;">=</span> Mage<span style="color: #339933;">::</span><span style="color: #004000;">getModel</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'customer/group'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getTaxClassId<span style="color: #009900;">&#40;</span><span style="color: #000088;">$defaultCustomerGroup</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$request</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Varien_Object<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$request</span>
            <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setCountryId<span style="color: #009900;">&#40;</span><span style="color: #000088;">$address</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getCountryId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setRegionId<span style="color: #009900;">&#40;</span><span style="color: #000088;">$address</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getRegionId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setPostcode<span style="color: #009900;">&#40;</span><span style="color: #000088;">$address</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getPostcode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setStore<span style="color: #009900;">&#40;</span><span style="color: #000088;">$store</span><span style="color: #009900;">&#41;</span>
            <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setCustomerClassId<span style="color: #009900;">&#40;</span><span style="color: #000088;">$customerTaxClass</span><span style="color: #009900;">&#41;</span>
            <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setCity<span style="color: #009900;">&#40;</span><span style="color: #000088;">$address</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getCity<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$request</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>The calculation method, getRateRequest(), is nearly identical to the core method.  We will add the city to the request object from the address object.</p>
<h2>The Look Up</h2>
<p>File: app/code/local/Eyemagine/Taxbycity/Mode/Mysql4/Calculation.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * Calculation.php
 * @author EyeMagine
 *
 */</span>
<span style="color: #009933; font-style: italic;">/**
 * Overload the mysql4 calculation class
 * @author EyeMagine
 *
 */</span>
<span style="color: #000000; font-weight: bold;">class</span> Eyemagine_Taxbycity_Model_Mysql4_Calculation <span style="color: #000000; font-weight: bold;">extends</span> Mage_Tax_Model_Mysql4_Calculation
<span style="color: #009900;">&#123;</span>
    <span style="color: #009933; font-style: italic;">/**
     * override getRates method to add city to where clause
     * @see Mage_Tax_Model_Mysql4_Calculation::_getRates
     */</span>
    protected <span style="color: #000000; font-weight: bold;">function</span> _getRates<span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$storeId</span> <span style="color: #339933;">=</span> Mage<span style="color: #339933;">::</span><span style="color: #004000;">app</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getStore<span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getStore<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$select</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_getReadAdapter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>select<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$select</span>
            <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>from<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'main_table'</span><span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getMainTable<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>where<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'customer_tax_class_id = ?'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$request</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getCustomerClassId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>where<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'product_tax_class_id = ?'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$request</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getProductClassId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$select</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>join<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'rule'</span><span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getTable<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tax/tax_calculation_rule'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rule.tax_calculation_rule_id = main_table.tax_calculation_rule_id'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'rule.priority'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rule.position'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$select</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>join<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'rate'</span><span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getTable<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tax/tax_calculation_rate'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rate.tax_calculation_rate_id = main_table.tax_calculation_rate_id'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'value'</span><span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #0000ff;">'rate.rate'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rate.tax_country_id'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rate.tax_region_id'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rate.tax_postcode'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rate.tax_calculation_rate_id'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rate.code'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$select</span>
            <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>where<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;rate.tax_country_id = ?&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$request</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getCountryId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>where<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;rate.tax_region_id in ('*', '', ?)&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$request</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getRegionId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$city</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$request</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getCity<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$city</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;">//add city only if we know we have it, default to old behavior otherwise</span>
            <span style="color: #000088;">$select</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>where<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;LOWER(rate.tax_postcode) in ('*', '', ?)&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getPostcode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #990000;">strtolower</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getCity<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$select</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>where<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;rate.tax_postcode in ('*', '', ?)&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$request</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getPostcode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000088;">$select</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>joinLeft<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title_table'</span><span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getTable<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tax/tax_calculation_rate_title'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;rate.tax_calculation_rate_id = title_table.tax_calculation_rate_id AND title_table.store_id = '<span style="color: #006699; font-weight: bold;">{$storeId}</span>'&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title'</span><span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #0000ff;">'IFNULL(title_table.value, rate.code)'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$order</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'rule.priority ASC'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rule.tax_calculation_rule_id ASC'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rate.tax_country_id DESC'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rate.tax_region_id DESC'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rate.tax_postcode DESC'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rate.rate DESC'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$select</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>order<span style="color: #009900;">&#40;</span><span style="color: #000088;">$order</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_getReadAdapter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>fetchAll<span style="color: #009900;">&#40;</span><span style="color: #000088;">$select</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Minor modifications to the _getRates() method, in the Mysql Calculation Model, will be required. In this method, we will ensure that the city has been set in the request and add it to the list of values to search for in the tax_postcode column.</p>
<p>A side affect of this is that the Estimated Shipping and Tax result will no longer be as accurate. The input for this form is a postal code, which is passed to the shipping module. Taking advantage of Magento&#8217;s flexibility makes it simple to enhance its core functionality without too much code modification.</p>
<p>If this article was helpful or if you would like assistance with your customizations, please feel free to <a title="Contact Us" href="/contact-us/">contact us</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eyemaginetech.com/our-thoughts/web-development/magento-tax-by-city/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building Flash with Common Courtesy</title>
		<link>http://www.eyemaginetech.com/our-thoughts/web-design/building-flash-with-common-courtesy</link>
		<comments>http://www.eyemaginetech.com/our-thoughts/web-design/building-flash-with-common-courtesy#comments</comments>
		<pubDate>Sat, 03 Apr 2010 00:55:59 +0000</pubDate>
		<dc:creator>Dinko Tontchev</dc:creator>
				<category><![CDATA[flash]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.eyemaginetech.com/our-thoughts/?p=180</guid>
		<description><![CDATA[Recently I had a conversation with a few members of my team about Flash and we all agreed that there are a thousands of ways to do something in Flash and only a few to do it right.]]></description>
			<content:encoded><![CDATA[<p>Recently I had a conversation with a few members of my team about Flash and we all agreed that there are a thousands of ways to do something in Flash and only a few to do it right.<span id="more-180"></span> Unplanned and poorly organized Flash projects can dampen productivity and really make life difficult for the developer that inherits the code after you write it.  Below is an introduction to best practices when developing Flash.  It will make your life easier and your Flash developer friendships last longer.</p>
<h3>Create classes for every object</h3>
<p>Procedural, function-based, timeline code has been a bad practice ever since I can remember, yet I still find it in many projects I come across from other developers. It&#8217;s really hard to keep track of as your application grows, and a nightmare to come back to after  long break, if there are upgrades or changes that need to be made after launch. Do yourself a favor and follow the <a href="http://en.wikipedia.org/wiki/Object-oriented_programming">Object Oriented Analysis and Design</a> principles of encapsulation and modularity. You really should understand all of the concepts of OOAD so put in the reading time. It&#8217;ll save you countless hours of future FLASHtrations.</p>
<p>What I like to do is set up my objects in Flash and use frame labels and instance names for the various movie clips that are contained within, then link them to an external <em>ClassName.as</em> file through the object properties screen in the library. You can reference them in your as file by doing something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> com.<span style="color: #006633;">library</span>.<span style="color: #006633;">ui</span><span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">flash.display.MovieClip</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">flash.text.TextField</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> TextInput <span style="color: #000000; font-weight: bold;">extends</span> MovieClip<span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">protected</span> var _txtInput<span style="color: #339933;">:</span><span style="color: #003399;">TextField</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">public</span> function TextInput<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			_txtInput <span style="color: #339933;">=</span> <span style="color: #003399;">TextField</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'txtInput'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">public</span> function getText<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #003399;">String</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> _txtInput.<span style="color: #006633;">text</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">public</span> function setText<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">:</span><span style="color: #003399;">String</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">void</span><span style="color: #009900;">&#123;</span>
			_txtInput.<span style="color: #006633;">text</span> <span style="color: #339933;">=</span> s<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Notice in the above code that I&#8217;m simply linking to an existing <code>TextField</code> object, <code>TextField(this['txtInput'])</code>, within the movie clip, rather than creating one dynamically via <code>new TextField()</code>. This allows me to leave the text formatting, positioning and other design related properties completely separate from my logic and allow me to focus on what I do best, while letting a Flash designer/Animator worry about the rest. Simple, clean, and elegant.</p>
<h3>Leverage &#8220;the Flash way&#8221; of getters and setters</h3>
<p>If you notice above, I created a <code>getText</code> and <code>setText</code> which follows standards for coding Class property accessor methods. Flash&#8217;s standard <code>TextField</code> and many other objects don&#8217;t follow this standard, and in the interest of keeping your objects interchangeable with the ones in Flash, you should adopt the flash way of writing these methods. Let&#8217;s look at what the above code would look like with these changes. I will also add some other TextField methods I plan on using:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> com.<span style="color: #006633;">library</span>.<span style="color: #006633;">ui</span><span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">flash.display.MovieClip</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">flash.text.TextField</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> TextInput <span style="color: #000000; font-weight: bold;">extends</span> MovieClip<span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">protected</span> var _txtInput<span style="color: #339933;">:</span><span style="color: #003399;">TextField</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">public</span> function TextInput<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			_txtInput <span style="color: #339933;">=</span> <span style="color: #003399;">TextField</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'txtInput'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">public</span> function get text<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #003399;">String</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> _txtInput.<span style="color: #006633;">text</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">public</span> function set text<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">:</span><span style="color: #003399;">String</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">void</span><span style="color: #009900;">&#123;</span>
			_txtInput.<span style="color: #006633;">text</span> <span style="color: #339933;">=</span> s<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">public</span> function get restrict<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #003399;">String</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> _txtInput.<span style="color: #006633;">restrict</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">public</span> function set restrict<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">:</span><span style="color: #003399;">String</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">void</span><span style="color: #009900;">&#123;</span>
			_txtInput.<span style="color: #006633;">restrict</span> <span style="color: #339933;">=</span> s<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">public</span> function get maxChars<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> _txtInput.<span style="color: #006633;">maxChars</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">public</span> function set maxChars<span style="color: #009900;">&#40;</span>n<span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">void</span><span style="color: #009900;">&#123;</span>
			_txtInput.<span style="color: #006633;">maxChars</span> <span style="color: #339933;">=</span> n<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">public</span> override function set tabIndex<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">void</span><span style="color: #009900;">&#123;</span>
			_txtInput.<span style="color: #006633;">tabIndex</span> <span style="color: #339933;">=</span> i<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">public</span> override function get tabIndex<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> _txtInput.<span style="color: #006633;">tabIndex</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>What this allows you to do is use this class just like you would any standard flash TextField inputs:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">...
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">flash.text.TextField</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.library.ui.TextInput</span><span style="color: #339933;">;</span>
...
<span style="color: #006633;">var</span> tf<span style="color: #339933;">:</span><span style="color: #003399;">TextField</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">TextField</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tf.<span style="color: #006633;">text</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;foo&quot;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//sets the TextField's text to &quot;foo&quot;</span>
&nbsp;
var myTextInput<span style="color: #339933;">:</span>TextInput <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TextInput<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myTextInput.<span style="color: #006633;">text</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;bar&quot;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//sets the encapsulated TextField's text to &quot;bar&quot;</span>
&nbsp;
trace<span style="color: #009900;">&#40;</span>tf.<span style="color: #006633;">text</span> <span style="color: #339933;">+</span> myTextInput.<span style="color: #006633;">text</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//output is &quot;foobar&quot;</span>
...</pre></div></div>

<h3>Use inheritance</h3>
<p>Object inheritance is something I love about programming. It really allows me to build well encapsulated objects that do something really well, then later when I need slightly modified versions, I can just inherit from the original and extend the functionality. Lets take our above example and extend it to be a custom number input.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> com.<span style="color: #006633;">library</span>.<span style="color: #006633;">ui</span><span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> NumberInput <span style="color: #000000; font-weight: bold;">extends</span> TextInput<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">public</span> function NumberInput<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			_txtInput.<span style="color: #006633;">restrict</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'0-9'</span><span style="color: #339933;">;</span>
			_txtInput.<span style="color: #006633;">maxChars</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
			_txtInput.<span style="color: #006633;">multiline</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">public</span> override function set tabIndex<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">void</span><span style="color: #009900;">&#123;</span>
			_txtInput.<span style="color: #006633;">tabIndex</span> <span style="color: #339933;">=</span> i<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">public</span> override function get tabIndex<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> _txtInput.<span style="color: #006633;">tabIndex</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Keep your code organized in packages</h3>
<p>You may or may not have noticed the package name in the above object had several parts to it. It is split up into folders which keep related classes separate visually and programatically through <a href="http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00000041.html">packages</a>. What I like to do is to start by creating a <em>com</em> folder to store all of my classes, then put a subfolder with the project name, for project specific classes, and a <em>library</em> folder where I put classes I tend to reuse across projects. These have subfolders to keep related elements organized like a <em>ui</em>, user interface, folder and similar. Here is an example:</p>
<h5>com</h5>
<ul class="disc">
<li>library
<ul>
<li>ui
<ul>
<li>TextInput</li>
<li>NumberInput</li>
</ul>
</li>
<li>events
<ul>
<li>EventWithParameter</li>
</ul>
</li>
</ul>
</li>
<li>myproject
<ul>
<li>ui
<ul>
<li>CustomTextInput (inherits from com.library.ui.TextInput)</li>
<li>CustomNumberInput (inherits from com.library.ui.CustomNumberInput)</li>
</ul>
</li>
<li>Main (document class for myproject)</li>
</ul>
</li>
</ul>
<h3>Keep your object library organized</h3>
<p>Your library should be even more organized because objects often have numerous nested graphics and movie clips that can quickly create an unmanageable mess. How these are best organized is strictly a judgment call, but I can show you what&#8217;s helped me in the past:</p>
<h5>Library</h5>
<ul class="disc">
<li>UserInterface
<ul>
<li>Inputs
<ul>
<li>mcTextInput</li>
<li>mcNumberInput</li>
</ul>
</li>
<li>MyCustomButton
<ul>
<li>mcMyCustomButton</li>
<li>Bitmaps
<ul>
<li>bg_idle.png</li>
<li>bg_hover.png</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Background
<ul>
<li>Bitmaps
<ul>
<li>background.png</li>
<li>office.png</li>
</ul>
</li>
<li>mcFooter</li>
</ul>
</li>
</ul>
<p>This one will be greatly be appreciated by anyone that has to reuse or modify your code because it will save them lots of time figuring out which pieces go together.</p>
<h3>Conclusion</h3>
<p>Well, there you have it. This isn&#8217;t meant to be a comprehensive list but hopefully the suggestions here will help you on your way to becoming a better Flash developer. Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eyemaginetech.com/our-thoughts/web-design/building-flash-with-common-courtesy/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Listen to Magento</title>
		<link>http://www.eyemaginetech.com/our-thoughts/web-development/listen-to-magento</link>
		<comments>http://www.eyemaginetech.com/our-thoughts/web-development/listen-to-magento#comments</comments>
		<pubDate>Fri, 22 Jan 2010 18:11:59 +0000</pubDate>
		<dc:creator>Andy Etemadi</dc:creator>
				<category><![CDATA[cdn]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[online store]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.eyemaginetech.com/our-thoughts/?p=162</guid>
		<description><![CDATA[EyeMagine is proud to have partnered with Staccato Creative in the development of this momentous online presence overhaul.]]></description>
			<content:encoded><![CDATA[<p>EyeMagine is proud to have partnered with Staccato Creative in the development of this momentous online presence overhaul.<span id="more-162"></span></p>
<p>Listen Technologies has a rich history and a track record pregnant with innovation, growth, and excellence.</p>
<blockquote><p>Founded in 1998 by Russell Gentner, Keldon Paxman, Cory Schaeffer and Kelli Lundgren, Listen Technologies is a leading provider of sound solutions for a diverse range of organizations.</p>
<p>Listen started by offering just two transmitters and two personal receivers. These early trend-setters included a built-in LCD display, 57 tunable channels, charging circuitry (SmartChargeTM), and the best audio quality in the industry. After those first few years, growth happened fast.</p></blockquote>
<p><span style="text-decoration: underline;">History</span>. January 11, 2010. Listen Technologies &lt;<a title="Listen Technologies - About Us" href="http://www.listentech.com/about-us-history" target="_blank">http://www.listentech.com/about-us-history</a>&gt;.</p>
<p>The new website was developed using Magento and Zend Framework with the future in mind.  We customized Magento with new modules that enhanced the content management feature set.</p>
<h3>Content Delivery Network</h3>
<p>A powerful content delivery network was integrated into the Magento CMS, allowing non-technical staff to add content that is distributed to servers around the world.  The distribution of cached content allows for an incredibly efficient user experience and decreased page load time.</p>
<h3>Catalog Management</h3>
<p>Most online catalogs need more than descriptions and photos.  The catalog management system was enhanced to allow for the simple attachment of documents, images, videos, MP3 files, and other files to both products and pages, giving the staff power to generate dynamic content with easy-to-use tools.</p>
<h3>Find Out More</h3>
<p>To find out more about EyeMagine and how we can help your online presence, <a title="Contact EyeMagine" href="/contact-us/">contact us</a> today.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eyemaginetech.com/our-thoughts/web-development/listen-to-magento/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Biggest Ecommerce Lies and How to Avoid Them</title>
		<link>http://www.eyemaginetech.com/our-thoughts/web-design/the-biggest-ecommerce-lies-and-how-to-avoid-them</link>
		<comments>http://www.eyemaginetech.com/our-thoughts/web-design/the-biggest-ecommerce-lies-and-how-to-avoid-them#comments</comments>
		<pubDate>Fri, 13 Nov 2009 00:21:48 +0000</pubDate>
		<dc:creator>Melanie Etemadi</dc:creator>
				<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[online store]]></category>
		<category><![CDATA[search engine optimization]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.eyemaginetech.com/our-thoughts/?p=118</guid>
		<description><![CDATA[One of the great things about ecommerce websites is that the fruits of your labor are so visible and direct...]]></description>
			<content:encoded><![CDATA[<p>One of the great things about ecommerce websites is that the fruits of your labor are so visible and direct, i.e. do a good job and the website makes more money; screw up and profits decline.<span id="more-118"></span> There is something wonderfully black and white about it.</p>
<p>With such measurable and obvious success criteria, you would’ve thought that good practice and winning techniques would by now, be well established, and bad advice would be quickly exposed for what it is. It appears however, that this is not the case.  It’s amazing just how bad some of the advice out there really is.</p>
<p>Here are five of the worst offenders:</p>
<h3>1. You can never give the user too much  [Wrong!]</h3>
<p>On the face of it, this sounds like a good idea. The more information you provide, the better informed their decision becomes. However, in reality too many options can be overwhelming and lead to ‘choice paralysis’.  You know what that’s like: taking much longer to order food from a very long menu than from a shorter one, or taking an eternity to choose which of the thousands of available paint colors to apply to a home.</p>
<p>More is not always better. If you want to encourage users to buy, you need to make their choice a simple one.  Remove everything but the most important information, and minimize the number of choices available. This is something that’s been understood for some time in traditional retailing, but hasn’t filtered through to the web.</p>
<h3>2. Never miss an opportunity to cross-sell [Wrong!]</h3>
<p>We all know supermarkets do it:  You’re lining up at the checkout surrounded by chocolate, magazines and other extras.  You go in for a loaf of bread and come out with a bag full of candy and a magazine on interior design; it’s an effective technique.</p>
<p>Many successful websites also use this approach very effectively, looking for opportunities to cross-sell, based on your buying habits and those of other users.  They may not <em>always</em> up-sell though, as the web is not the same as the real world.  Good online retailers are often careful to avoid distractions at the checkout.  They are user-driven and therefore have to be as easy, focused and fast as possible.</p>
<p>Up-selling is important, but do it before the checkout process begins, or after the transaction is complete. Once the user makes a decision to buy, you need to ensure that nothing gets in the way of that transaction.  Some opportunities to cross-sell are worth missing.</p>
<h3>3. It’s all about your site [Wrong!]</h3>
<p>Web designers want to sell you web site design services. It is therefore unsurprising that they concentrate their attention and advice on the website. However, the website is only one small part of a successful ecommerce business.  The heart of successful ecommerce lies in service, not the website.</p>
<p>Don’t become so fixated on tweaking and improving your website that you neglect other areas of the user experience. Good customer service includes vital components such as email notifications, telephone support, policies, order fulfillment, handling complaints, offers and discounts, and ongoing communication.</p>
<p>Customers who receive superb service are considerably more likely to make a second purchase and recommend you to friends and family.  It’s even possible to substantially reduce your marketing costs if you make customer service a priority; your reputation will spread through word of mouth.</p>
<p>If you want to learn more about customer service, try <a href="http://experiencematters.wordpress.com/">Bruce Temkin&#8217;s blog</a></p>
<p>All that being said, getting your website right is still extremely important. Small things can make a big difference in the eyes of your users. Take for example security…</p>
<h3>4. Users care about security… badges [Wrong!]</h3>
<p>It’s clear that users care about online security. In fact many people are still unwilling to buy online for fear of credit card fraud.  The media has done an excellent job of making the public suspicious of online transactions, even though they willingly hand over credit cards at restaurants.</p>
<p>Whether the users’ concerns are justified or not, we need to take them seriously if we want people to buy.  Many ecommerce businesses spend a lot of money to ensure the site’s security.  How then do they choose to communicate this to their users to reassure them? – They slap a badge on their website!</p>
<p>Simply adding a small VeriSign or MacAfee badge to your checkout page is not enough to alleviate users’ fears.  At best they are free advertising for the companies involved.  At worst they are entirely ignored because they look like banners.  A better approach is to add copy to your website addressing this issue, and the steps you’ve taken to ensure your customers’ security. Don’t rely on a single graphic to say all that needs to be said.</p>
<h3>5. Amazon is the template we should all follow [Wrong]</h3>
<p>This lie is probably the most widely held of all. There is a belief that because Amazon is so successful, all ecommerce websites should follow their example.</p>
<p>There are however, a number of flaws in this argument:</p>
<p>- They don’t get everything right (nobody can)<br />
- They are partially successful as they were one of the very first ecommerce sites<br />
- Their reputation and brand recognition allows them to get away with a lot<br />
- Users are familiar with their site and its eccentricities</p>
<p>In short, what works for them will not necessarily work for you. Too many website owners blindly copy Amazon because they are seen as the leader in ecommerce. Not only is that flawed for the reasons above, it also removes the possibility of you ever being better than Amazon or innovating in any way.</p>
<h3>Bonus lie:  Ecommerce is easy</h3>
<p>Probably the biggest lie of all is that ecommerce is easy. Admittedly off-the-shelf solutions such as <a href="http://www.shopify.com/">Shopify</a> make it extremely easy to build ecommerce websites. However, building the site is only the beginning. The real challenge comes in:</p>
<p>- Marketing your site<br />
- Deciding when to up-sell<br />
- Providing great customer service<br />
- Communicating clearly<br />
- Learning from others</p>
<p>Creating a successful ecommerce business is a long-term commitment that involves continually evolving both your website and your strategy.</p>
<p><a href="http://www.eyemaginetech.com">EyeMagine</a> can make this a whole lot easier for you.  <a title="Contact EyeMagine" href="/contact-us/">Contact us</a> for more details or complete our online <a title="Request for Proposal" href="/contact-us/request-for-proposal.php">Request for Proposal</a> form.<br />
<a title="The Biggest Ecommerce Lies and How to Avoid Them" href="http://boagworld.com/site-content/ecommerce-lies" target="_blank" class="alignright">Read the full article (source)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.eyemaginetech.com/our-thoughts/web-design/the-biggest-ecommerce-lies-and-how-to-avoid-them/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Power of Content Delivery Networks</title>
		<link>http://www.eyemaginetech.com/our-thoughts/web-development/the-power-of-content-delivery-networks</link>
		<comments>http://www.eyemaginetech.com/our-thoughts/web-development/the-power-of-content-delivery-networks#comments</comments>
		<pubDate>Sat, 24 Oct 2009 00:08:13 +0000</pubDate>
		<dc:creator>Andy Etemadi</dc:creator>
				<category><![CDATA[cdn]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://www.eyemaginetech.com/our-thoughts/?p=111</guid>
		<description><![CDATA[As video on the web becomes more popular, we have been implementing lots of web applications that leverage CDNs and their APIs.]]></description>
			<content:encoded><![CDATA[<p>Have you ever been working on a Flash video that worked just fine on your workstation but slowed down dramatically once it was deployed to the production web site?<span id="more-111"></span> The problem is related to bandwidth and/or server load.  We won&#8217;t get into the details of bandwidth, bps, mbps, etc, in this article. We will discuss the power of content delivery networks (CDN).</p>
<p>As video on the web becomes more popular, we have been implementing lots of web applications that leverage CDNs and their APIs. If hosting a video on YouTube is not an option, hosting it on a CDN is a definite must for any prominent web site. To see a prime example of how video should stream, visit <a title="Staccato Creative" href="http://www.staccatocreative.com/" target="_blank">Staccato Creative</a>. All of their video content is hosted on a CDN.</p>
<p>The traditional and most basic method of offering a video on a website is to just upload the content to the web server and place the Flash embed tag in the HTML. Hosting video on a web server can drain your bandwidth resources and give your visitors the wrong impression.</p>
<p>Hosting proprietary video content on a CDN offers your visitors the most fluid video consumption experience while saving your web server resources for the dynamic number crunching and script rendering it was built for.</p>
<p>Different CDNs use different techniques to spreading out content across the Internet.  Typically, content is uploaded to the CDN and from there it is distributed to key points across the Internet and made available for quick download.</p>
<p>EyeMagine offers Content Delivery Network API integration services as well as hosting services.  <a title="Contact EyeMagine" href="/contact-us/">Contact us</a> for more details or complete our online <a title="Request for Proposal" href="/contact-us/request-for-proposal.php">Request for Proposal</a> form.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eyemaginetech.com/our-thoughts/web-development/the-power-of-content-delivery-networks/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Things to think about when selecting a Magento Solution Partner</title>
		<link>http://www.eyemaginetech.com/our-thoughts/web-design/things-to-think-about-when-selecting-a-magento-solution-partner</link>
		<comments>http://www.eyemaginetech.com/our-thoughts/web-design/things-to-think-about-when-selecting-a-magento-solution-partner#comments</comments>
		<pubDate>Sat, 12 Sep 2009 19:48:15 +0000</pubDate>
		<dc:creator>Andy Etemadi</dc:creator>
				<category><![CDATA[magento]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://www.eyemaginetech.com/our-thoughts/?p=94</guid>
		<description><![CDATA[Finding the right Magento Solution Partner is like finding a soul mate.]]></description>
			<content:encoded><![CDATA[<p>Finding the right Magento Solution Partner is like finding a soul mate. Trustworthiness, sincerity, and that intangible spark are all important when talking about a soul mate or a Magento Solution Partner.<span id="more-94"></span></p>
<p>We&#8217;ve been approached by many storeowners, small companies, mid-sized companies, and media agencies to help with a Magento storefront.  Sometimes it&#8217;s a fit and sometimes it&#8217;s not. EyeMagine has been able to identify a few important things to consider when shopping for a Magento Solution Partner.  We hope this discussion will shed some light on your own search for a Magento developer and we wish you the best!</p>
<h3>Design</h3>
<p>Consider an e-commerce site&#8217;s presentation.  How important <em>is</em> design?  Can you recall a poorly designed e-commerce site? Has the poor design affected your decision to purchase?  Can you imagine how a poorly designed e-commerce site would affect your customers&#8217; decision to make a purchase?</p>
<p>Now let&#8217;s consider a beautifully designed e-commerce store. Has a clean, intuitive, inviting design ever influenced your decision to buy? How do you think an engaging store design will boost your sales?</p>
<p>We believe design and user experience is a critical element of a successful e-commerce store. See some of <a title="Our work" href="/our-work/">our work</a>, for reference. Providing your customers with positive feelings of confidence, assurance, and well-being is a lubricant for any online shopping experience.</p>
<p>We work together to create the ideal design for your store. We ask for sites that inspire you and we research your industry and competitors to understand the difference between a successful e-commerce site and the average e-commerce site.</p>
<p>EyeMagine creates designs in PSD format. This is a standard file format that is converted to HTML files. The resulting HTML files will be used to create a custom Magento theme.</p>
<h3>Custom Features</h3>
<p>While design is quite critical, a store&#8217;s features and function are also very important.</p>
<p>As a Magento Solution Partner, we are versed in Magento&#8217;s native <a title="Magento Features" href="http://www.magentocommerce.com/products/features" target="_blank">features</a>.  It will be very important for you to know and understand the features that Magento provides, off the shelf. We are so familiar with the software that we can add new features.</p>
<p>What would be considered a custom feature? Here some examples of customizations to the Magento e-commerce platform:<br />
- <a title="Invoiced sales report" href="http://www.magentocommerce.com/extension/1716/invoiced-sales-report" target="_blank">Invoiced sales report</a><br />
- Blog<br />
- Press Release content management system<br />
- Product configurator</p>
<p>If your store needs features that are not included in the Magento Community Edition, each of those features will be evaluated and added to the scope of work.</p>
<h3>Theme</h3>
<p>Once we gather all of the feature requirements and create a design, we will proceed to create HTML that will be used to create a custom theme for your store.</p>
<p>Magento is a template-based e-commerce application, which means that it comes with a default theme. This default store can be seen at the <a title="Magento demo" href="http://demo.magentocommerce.com/" target="_blank">Magento demo site</a>. Custom theme templates are created that overload the default set of templates. When creating a new store, we create a new theme for the store that brings the design to life.</p>
<p>That theme will be unique to your store.</p>
<h3>Payment Gateway</h3>
<p>Magento supports online credit card transactions. <a title="Authorize.net" href="http://www.authorize.net/" target="_blank">Authorize.net</a> is an online payment gateway that helps process online credit card transactions. Authorize.net is one of many payment options when offering credit card payment to your customers.</p>
<p><a title="PayPal" href="https://www.paypal.com/" target="_blank">PayPal</a> is another payment gateway that is included in Magento e-commerce platform.</p>
<p>Once a payment gateway is selected, the accounts department will open an account and configure bank account information to begin processing transactions.</p>
<h3>Project Management</h3>
<p>Who will you be speaking with while your Magento store is being produced?</p>
<p>On the surface, this may not sound like a matter of great concern. But, it is. A good project manager will bring your project to completion on time.</p>
<p>Our team understands how important deadlines are. We understand that marketing material is usually published prior to a site launch and we have experience with managing and delivering successful projects.</p>
<h3>Web Hosting</h3>
<p>Where will the site live? Who will be responsible for keeping the site accessible to the online shopping world?</p>
<p>Now that we have covered the visible aspects of a Magento e-commerce solution, we can&#8217;t forget about web hosting.</p>
<p>EyeMagine offers web hosting using our own web servers. We will install your Magento store on one of our development servers while your store is under construction.</p>
<p>Hosting fees vary depending on your business needs and/or anticipated store traffic. Basic hosting packages start at $75 per month.</p>
<p>In addition to the monthly hosting investment, all secure sites require an SSL certificate. An SSL certificate is a means by which secure information is encrypted between a customer&#8217;s computer and the e-commerce web server. Click <a title="SSL Certificate" href="http://en.wikipedia.org/wiki/Ssl_certificate" target="_blank">here</a> to learn more.</p>
<p>One thing to be mindful of is that SSL certificates must be renewed annually.</p>
<h3>Budget</h3>
<p>When considering a Magento Solution Partner, a very important factor in the project scope is the budget.  Just like shopping for a car, shopping for a Magento Solution Partner is going to be a lot more productive when you determine your budget.</p>
<p>When working with our clients, our approach is to gather all of their requirements and estimate the time involved in producing the project.</p>
<p>When working with new clients, we first learn the budget and confirm that there are enough resources for a successful engagement. Next, we gather all of the requirements and work together to create a scope of work that fits within the budget.</p>
<h3>Conclusion</h3>
<p>The above process has resulted in a long history of satisfied clients with successful e-commerce stores. We hope this will help you in your search for the perfect Magento Solution Partner. We would love to hear your response and your suggestions, so please tell us what&#8217;s on your mind.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eyemaginetech.com/our-thoughts/web-design/things-to-think-about-when-selecting-a-magento-solution-partner/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Eyemagine is on Smashing Magazine!</title>
		<link>http://www.eyemaginetech.com/our-thoughts/web-design/eyemagine-is-on-smashing-magazine</link>
		<comments>http://www.eyemaginetech.com/our-thoughts/web-design/eyemagine-is-on-smashing-magazine#comments</comments>
		<pubDate>Wed, 09 Sep 2009 18:52:51 +0000</pubDate>
		<dc:creator>Mathew Epstein</dc:creator>
				<category><![CDATA[horizontal navigation]]></category>
		<category><![CDATA[smashing magazine]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.eyemaginetech.com/our-thoughts/?p=84</guid>
		<description><![CDATA[I am ecstatic to announce that our site has been featured in an article on the famed Smashing Magazine.]]></description>
			<content:encoded><![CDATA[<p>I am ecstatic to announce that our site has been featured in an article on the famed Smashing Magazine.<span id="more-84"></span> It is a great honor to finally see one of my designs featured on a site that I have been using for years as a source of inspiration and industry techniques. Many thanks to Smashing Magazine for the recognition for all of our hard work and dedication to the web.</p>
<p><img src="http://www.eyemaginetech.com/our-thoughts/wp-content/uploads/2009/09/Untitled-1.jpg" alt="Untitled-1" title="Untitled-1" width="540" height="241" class="alignnone size-full wp-image-92" /></p>
<p>You can read the article about horizontal navigation here: <a href="http://www.smashingmagazine.com/2009/09/07/horizontal-navigation-menus-trends-patterns-and-best-practices/">Eyemagine on Smashing Magazine</a>. Look for our screen near the bottom under Various Trends And Styles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eyemaginetech.com/our-thoughts/web-design/eyemagine-is-on-smashing-magazine/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Paypal Thank You</title>
		<link>http://www.eyemaginetech.com/our-thoughts/hidden/paypal-thank-you</link>
		<comments>http://www.eyemaginetech.com/our-thoughts/hidden/paypal-thank-you#comments</comments>
		<pubDate>Fri, 04 Sep 2009 22:07:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[hidden]]></category>

		<guid isPermaLink="false">http://www.eyemaginetech.com/our-thoughts/?p=78</guid>
		<description><![CDATA[Thank you for your order.  We are here to help and support.
Feel free to contact us at any time.

]]></description>
			<content:encoded><![CDATA[<p>Thank you for your order.  We are here to help and support.</p>
<p>Feel free to <a title="Contact Us" href="/contact-us/" target="_self">contact us</a> at any time.
<ol>
]]></content:encoded>
			<wfw:commentRss>http://www.eyemaginetech.com/our-thoughts/hidden/paypal-thank-you/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
