<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title><![CDATA[Ecommerce Blog]]></title><meta http-equiv="X-UA-Compatible" content="IE=8" />
    <link>https://www.mageaustralia.com.au/blog/</link>
    <description><![CDATA[Ecommerce Blog]]></description>
    <pubDate>Sat, 29 Feb 2020 15:15:49 +0000</pubDate>
    <generator>Zend_Feed</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <item>
      <title><![CDATA[Google Shopping to Enforce GTIN Requirement]]></title><meta http-equiv="X-UA-Compatible" content="IE=8" />
      <link>https://www.mageaustralia.com.au/blog/google-shopping-gtin-requirements/</link>
      <description><![CDATA[<h2>Google Merchant Centre Feed</h2>
<p>Starting in Sep. 2015, Google Shopping required GTIN (EAN/UPC) in the feed specification for this list of brands. Beginning May 16, 2016 Google will require that all products have a GTIN (EAN / UPC) in your data feeds to Google Merchant Centre for all brands that have assigned GTIN&rsquo;s by the manufacturer in the following countries: Australia, Brazil, the Czech Republic, France, Germany, Italy, Japan, the Netherlands, Spain, Switzerland, the UK, or the US.</p>
<p>Getting the GTIN is often a matter of getting the barcode details from the product itself. If your products are stored in a 3rd Party Warehouse and you don't have immediate access to the details, you can utilise the <a title="UPCitemDB" href="http://www.upcitemdb.com/">UPCitemDB</a> to locate your product data.</p>
<p>In most cases, Magento customers use <a href="https://www.gomage.com/gomage-feed-pro.html">GoMage Feed Pro</a> or <a href="https://amasty.com/product-feed.html">Amasty Product Feed</a>, we will need to create the following scenario:</p>
<ol>
<li>Create a unique product Attribute called either GTIN / UPC / EAN if we don&rsquo;t already have one for your store</li>
<li>Create a Custom Field (Amasty) or Dynamic Attribute (GoMage) in your feed extension so that if the GTIN number exists, we pull it into the feed and if it doesn&rsquo;t, we insert the word &ldquo;FALSE&rdquo; as <a href="https://support.google.com/merchants/answer/160161">per the specification here</a>
</li>
<li>Add the new custom field / attribute into your data feed.</li>
<li>Test the feed in Google Merchant Centre</li>
</ol>
<h2>Ebay Product Identifiers</h2>
<p>Back in June 29th 2015, Ebay began enforcing <a href="http://pages.ebay.com/sellerinformation/news/springupdate2015/product-identifiers.html#FAQ1-3">product identifiers also on specific categories</a>. Ebay claims that by using GTIN&rsquo;s in your product listings, you will be eligible for:</p>
<ul>
<li>High Search Visibility both on Ebay and Outside Search Engines</li>
<li>Special Price Alerts when your listings are below the trending price</li>
<li>Inclusions in more deals and promotions</li>
</ul>
<p>&nbsp;</p>
<p>This video covers the very basics in a non-Magento perspective:</p>
<p>&nbsp;</p>
<p><iframe src="https://www.youtube.com/embed/JhFWHespXBI" frameborder="0" width="742" height="419"></iframe></p>
<p>&nbsp;</p>
<p>In <a href="http://www.m2epro.com/">M2EPro</a>, the setting for Product Identifiers is a little bit hard to locate: It&rsquo;s under Listings -&gt; Edit Settings -&gt; Selling(tab) -&gt; Description but as per the Google requirements, this information must first be setup and available from the products themselves.</p>
<p><img style="vertical-align: middle;" title="M2E Ebay Identifiers" src="https://www.mageaustralia.com.au/media/wysiwyg/blog/m2e_ebay_identifiers.png" alt="M2E Ebay Identifiers" />&nbsp;</p>
<p><br class="kix-line-break" /><br class="kix-line-break" /></p>]]></description>
      <pubDate>Mon, 21 Mar 2016 23:24:39 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento: Make products searchable globally for multistore]]></title><meta http-equiv="X-UA-Compatible" content="IE=8" />
      <link>https://www.mageaustralia.com.au/blog/multisite-globally-search-products-get-store-name/</link>
      <description><![CDATA[<p>We setup a new product list template via catalogsearch.xml called list-search.phtml We then made some modifications that look like the following:</p>


<code>
<pre>
// Display Country Availability Message 
$group_id = Mage::app()->getStore()->getGroupId(); 
$store_name = Mage::getModel('core/store_group')->load($group_id)->getName(); 
if($_product->getVisibility() == 3){ 
                <div class="country not-available">echo $this->__('No disponible en ').$store_name; </div>
} elseif ($_product->getVisibility() == 4) { 
                 <div class="country available">echo $this->__('Disponible en ').$store_name; </div>
} 
</pre>
</code>

<p>Note*: Aheadworks blog strips out the php tags. So ensure you re-add them where applicable</p>


<ol>
<li>We get the group_id.</li>
<li>We then get the Store Name (not the store view name) because in our case, a country is defined by a Store Name and a language is defined by a StoreView name. If we took the store view, it would output one of either English, Spanish or Portuguese</li>
<li>We then check the visibility of the product - If it's only searchable (id = 3), we list it but explain it's not available for this country</li>
<li>If the product is both searchable in Magento and listed in the catalog (id = 4), we then explain it's Available for that country</li>
</ol>

<p>A better alternative would have been to have a Multiselect Attribute for the product with the country names selected for each product and then a small "Availability" chart popup that then allows you to view which countries the product is suitable for. Unfortunately, time and budget didn't permit this so the above solution was determined and implemented.</p>
]]></description>
      <pubDate>Thu, 20 Dec 2012 03:49:55 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Ensure Magento's sitemap.xml contains actual modified date]]></title><meta http-equiv="X-UA-Compatible" content="IE=8" />
      <link>https://www.mageaustralia.com.au/blog/cms-product-category-modified-date-sitemap/</link>
      <description><![CDATA[<p>First thing you will want to do is creat a local path because we're going to override core Magento functionality. So let's make the following directory (including any required paths to make the directory)</p>
<pre>app/code/local/Mage/Sitemap/Model/</pre>
<p>If you're doing this from a Shell.&nbsp;</p>
<pre>mkdir -p&nbsp;app/code/local/Mage/Sitemap/Model/</pre>
<p>Then copy over the core file like so</p>
<pre>cp app/code/core/Mage/Sitemap/Model/Sitemap.php&nbsp;app/code/local/Mage/Sitemap/Model/</pre>

<p>Now we jump into the code. There are three $date variables, one each for the categories section, products section and cms pages section. We're going to replace them with the following code.</p>
<p>At around ~Line 158 replace $date with:</p>
<pre>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; substr(Mage::getModel('catalog/category')-&gt;load($item-&gt;getId())-&gt;getUpdatedAt(),0,10),</pre>
<p>At around ~Line 176 replace $date with:</p>
<pre>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; substr(Mage::getModel('catalog/product')-&gt;load($item-&gt;getId())-&gt;getUpdatedAt(),0,10),</pre>
<p>At around ~Line 193 replace $date with:</p>
<pre>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; substr(Mage::getModel('cms/page')-&gt;load($item-&gt;getId())-&gt;getUpdateTime(),0,10),<br /></pre>
<p>Regenerate your sitemap.xml from Magento's admin or your cron schedule and test it's working ok.</p>]]></description>
      <pubDate>Fri, 12 Oct 2012 17:19:27 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento Grouped Configurables - Great for Clothing]]></title><meta http-equiv="X-UA-Compatible" content="IE=8" />
      <link>https://www.mageaustralia.com.au/blog/magento-grouped-configurable-products/</link>
      <description><![CDATA[<p>Magento comes by default with a number of product types for different situations. These product types are: Simple, Virtual, Downloadable, Grouped, Configurable or Bundle. Each product type shines in particular scenarios - bundles are great for building custom products, grouping items together as a discount while still managing stock levels. Grouped Products are great for quick data entry in B2B or when multiple qty's of different products need to be chosen quickly. Configurable products are great when you have to select multiple options to choose a single product (ie: Large and Red).</p>

<p>Through Magento's great extension ecosystem, it's now possibly to mix and match Configurables (the ability to choose multiple options for a single product) with Grouped products (the ability to choose multiple quantities of similiar products) in a single product detail view page.</p>

<div style="align:center;display:block;"><img src="/media/wysiwyg/grouped_configurables.png" alt="Grouped Configurable Products Magento" /></div>

<p>Now, obviously, this screenshot is a cut down example but consider the above scenario where you might be ordering Team Jerseys, School Uniforms or Work Uniforms and you may need to order 3 x Large, Red Men's, 3 x Large, Blue Men's, 2x Small, Red Women's etc. In grouped product scenario, you would have a massive grid of products containing all the different sizes and colours for both mens and womens. Or alternatively, in a configurable product scenario, you would need to enter and re-enter the page many times.</p>

<p>Mix this up with an Ajax 'add to cart' affect and you can achieve very quick ordering of complex product types very easily. Simplifying these processes are vital. Our <a href="http://www.google.com.au/analytics/" target="_blank">Google Analytics data</a> shows us that the large majority of orders are placed by a customer in under 5 minutes. In many cases, it's less than 3 minutes. Making it difficult for customers to fill their baskets is like walking into a shopping centre where, you can only use a carry basket instead of a trolley and everything is on shelves almost out of reach and then reaching the checkout and there's a 20 metre queue. It would be a frustrating experience. Always keep these things in mind when developing your Ecommerce experience for customers.</p>

]]></description>
      <pubDate>Mon, 12 Mar 2012 01:17:58 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Logging Magento Admin Actions Extension]]></title><meta http-equiv="X-UA-Compatible" content="IE=8" />
      <link>https://www.mageaustralia.com.au/blog/magento-logging-admin-actions/</link>
      <description><![CDATA[<p>If you need to log or monitor actions performed in Magento Admin? Inchoo's admin logging actions extension comes to the rescue. A feature normally only found in Magento Enterprise Edition, this extension will help you discover which admin user logged in, where they were and what areas were modified, if any. And of course, this can also serve as a security tool as well.</p>
<p>To install this Magento extension you can click <a href="http://www.magentocommerce.com/magento-connect/inchoo-logger-2627.html">here.</a> Download and install it.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Once you have installed the extension, you'll be able to go to: System &gt; Configuration &gt; Developer and enable it.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="/media/wysiwyg/inchoo-config.png" alt="Screenshot of Magento Admin Logged Actions" /></p>
<p>&nbsp;</p>
<p>After enabling it you'll be able to see which admin users have logged in to the Magento admin, IP's, changes that admin users may have performed, etc. You'll see this data in System &gt; Inchoo Logger</p>
<p>&nbsp;</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="/media/wysiwyg/inchoo-logger.png" alt="" /></p>
<p>&nbsp;</p>
<p>A very nice find and something that's normally only offered via <a href="http://www.magentocommerce.com/product/enterprise-overview">Magento Enterprise</a>. A big thanks to <a href="http://inchoo.net/">Inchoo</a> for making this extension available</p>]]></description>
      <pubDate>Thu, 02 Feb 2012 05:30:24 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Searching CMS pages with Magento]]></title><meta http-equiv="X-UA-Compatible" content="IE=8" />
      <link>https://www.mageaustralia.com.au/blog/search-cms-pages-magento/</link>
      <description><![CDATA[<p>Magento's out of the box search experience is not the best, we can all agree. One of the sorely missed points is that CMS Pages are not searched by default. This can be a painful experience for you, if you have a lot of worth Static Page Content.</p>
<h2>Resolving the issue</h2>
<p>There's two ways we go about resolving this issue and you can test it right here on our own website:</p>
<p>&nbsp;</p>
<ol>
<li><a href="http://www.magentocommerce.com/magento-connect/tangkoko-and-fidesio-cms-search.html" target="_blank">Tangkoko &amp; Fidesio CMS Search - Free</a></li>
<li><a href="http://templates-master.com/magento-extensions/magento-ajax-search.html" target="_blank">Templates Master Ajax Search - $29.00</a></li>
</ol>
<p>First, the Tangkok &amp; Fidesio extension adds the ability to search CMS content, though it's not ideal on it's own. This is how it looks by default, ignoring the fact that it hasn't found anything. The real problem is that once it's populated with search data, people don't scroll down and effectively don't know you have searched your content either.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="/media/wysiwyg/blog/cms-search-magento.png" alt="Tangkoko &amp; Fidesio CMS Search for Magento" /></p>
<p>What I'm going to show you is how to improve it, so visitors searching are shown a visible clue that there are search results for content for them to view by making it tabbed. To do that, we use a simple tabbing library called tabber.js and you can <a href="http://www.barelyfitz.com/projects/tabber/" target="_blank">see a demo here</a>. When you're ready, right click <a href="http://www.barelyfitz.com/projects/tabber/tabber-minimized.js">this file</a> and choose save as for the minimised tabber.js library.</p>
<p>As a general rule, I tend to keep my javascript libraries in /js/sitename/ as opposed to skinJs files mostly because it's easier to access and I am not distributing the theme files.</p>
<p>So in this example, for our site MageAustralia, I create a folder /js/mageaus/ and put tabber-minimized.js in there. We then open up our page.xml layout file for our template ie: app/design/frontend/default/mageaus/layout/page.xml and at approx. Line 50 after the cookies.js line, we add:</p>
<pre>&lt;action method="addJs"&gt;&lt;script&gt;mageaus/tabber-minimized.js&lt;/script&gt;&lt;/action&gt;
<script type="text/javascript"><!--mce:0--></script>

</pre>
<p>We then save it and clear our cache, refresh the frontpage of your site and view the source to ensure it's loading and being linked to the file correctly.</p>
<p>Our next step involves modifying the default Tangkok &amp; Fideso extenson template files. So what we want to do is copy the folder from: <span>app/design/frontend/default/default/template/cmssearch/</span> to <span>app/design/frontend/default//template/cmssearch/</span></p>
<h2>Modifying the result.phtml file to contain the required Tab id / classes</h2>
<p>First, we insert our first div's at Line 26:</p>
<pre>&lt;div class="page-head"&gt;&nbsp; &nbsp; &lt;h3&gt;&lt;?php echo ($this-&gt;getHeaderText() || $this-&gt;getHeaderText() === false) ? $this-&gt;getHeaderText() : $this-&gt;__("Search results for '%s'", $this-&gt;helper('catalogSearch')-&gt;getEscapedQueryText()) ?&gt;&lt;/h3&gt;&lt;/div&gt;&nbsp;&lt;?php if($this-&gt;getResultCount()): ?&gt;<br /></pre>
<pre>So that it looks like this (note the tabber / tabbertab divs):</pre>
<pre>&lt;div class="page-head"&gt;    &lt;h3&gt;&lt;?php echo ($this-&gt;getHeaderText() || $this-&gt;getHeaderText() === false) ? $this-&gt;getHeaderText() : $this-&gt;__("Search results for '%s'", $this-&gt;helper('catalogSearch')-&gt;getEscapedQueryText()) ?&gt;&lt;/h3&gt;&lt;/div&gt;&nbsp;&lt;div class="tabber"&gt;&lt;div class="tabbertab" title="&lt;?php echo $this-&gt;__('Products') ?&gt;"&gt;&lt;?php if($this-&gt;getResultCount()): ?&gt;<br /></pre>
<pre>We also jump to the very last line of the file and insert a closing div tag<br /></pre>
<p>That will add the code we need to create the tab for the products section. Now we add the code for the CMS Section. So&nbsp;find the following around Lines 57-60.</p>
<pre>&lt;div class="clear"&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&nbsp; &nbsp; &lt;h2&gt;&lt;?php echo $this-&gt;__("Pages"); ?&gt;&lt;/h2&gt;&lt;/div&gt;<br /></pre>
<p>and change it to look like this. This First closing div is there to close the code for the Products section</p>
<pre>&lt;/div&gt;&lt;div class="clear"&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="tabbertab" title="&lt;?php echo $this-&gt;__('Articles, Pages &amp; News') ?&gt;"&gt;&lt;div class="page-head"&gt;&nbsp; &nbsp; &lt;h2&gt;&lt;?php echo $this-&gt;__("Pages"); ?&gt;&lt;/h2&gt;&lt;/div&gt;<br /></pre>
<pre>&lt;div class="tabbertab" title="&lt;?php echo $this-&gt;__('Articles, Pages &amp; News') ?">&lt;div class="page-head">&lt;/div&gt;&lt;/div&gt;<br /></pre>
<p>If we refresh the search results on our site, we should see something like this:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="/media/wysiwyg/blog/cms-search-magento_pre_css.png" alt="" /></p>
<p>Now we just have to treat it to a little bit of CSS to make it look nice and we're done.</p>
<pre>/* Tabber Elements for Search Results */
.tabberlive .tabbertabhide { display:none; }
.tabber { }
.tabberlive { margin-top:1em;}
.tabbertab .block-title{display:none;}
.tabbertab .block-homepage {border:none;}

ul.tabbernav { margin:0; padding: 7px 0; border-bottom: 1px solid #778; font: bold 12px Verdana, sans-serif; text-transform: uppercase;}
ul.tabbernav li{ list-style: none; margin: 0; display: inline;}

ul.tabbernav li a{
 padding: 7px 1em;
 margin-left: 3px;
 border-radius: 5px 5px 0 0;
 background: #3D4349;
 background-image: -webkit-gradient(linear, left bottom,left top, color-stop(0.5, rgb(46,50,54)),color-stop(1, rgb(72,80,87)));
 background-image: -moz-linear-gradient( center bottom, rgb(46,50,54) 50%,  rgb(72,80,87) 100%);
 border-bottom: none;
 text-decoration: none;
}

ul.tabbernav li a:link { color: #FFF; }
ul.tabbernav li a:visited { color: #667; }

ul.tabbernav li a:hover{ color: #000; background: #DDD; border-color: #227;}
ul.tabbernav li.tabberactive a {background: #EAEAEA;border: 1px solid #333;border-bottom: 1px solid #EAEAEA;color: #333;}
ul.tabbernav li.tabberactive a:hover {  color: #000; background: #EAEAEA; border-bottom: 1px solid white; }
.tabberlive .tabbertab { padding:5px;  }

/* If desired, hide the heading since a heading is provided by the tab */
.tabberlive .tabbertab h2 { display:none; }
</pre>
<p>And now, our finished results with CSS</p>
<p>&nbsp;</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="/media/wysiwyg/blog/cms-search-magento_post_css.png" alt="" /></p>]]></description>
      <pubDate>Mon, 23 Jan 2012 14:20:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Speed up Magento Category Lists with Caching]]></title><meta http-equiv="X-UA-Compatible" content="IE=8" />
      <link>https://www.mageaustralia.com.au/blog/speedup-magento-category-list/</link>
      <description><![CDATA[<p>Magento has a built-in cache. In version 1.5.0.1 Magento added a Full Page Cache option to Magento which gives us the ability to use holepunch techniques to cache blocks. This section here doesn't deal with the full page cache at all, rather just uses the standard Magento cache and we add the ability for Magento to cache category lists</p>

<p>In the below examples, we haven't yet added the caching. We use the following (example) command from Apache Benchmark on the local machine the tests are being run on to run the tests, which eliminates network contention</p>

<pre>ab -c 5 -n 100 http://www.testdomain.com/category</pre>
<h2>Before: Stats Showing # of Database Queries & Time Taken for 100 requests</h2>
<p>Below, you can see that we had 153 requests to the database. The total time to run the tests was 19.452 seconds resulting in 5.14 requests per second. The median wait time to process each request was 666 milliseconds</p>

<img style="float:right;margin-top:15px" src="/media/wysiwyg/blog/speedup_magento_category_lists.png" alt="Speedup Magento Category Listing" />

<pre>
Concurrency Level:      5
Time taken for tests:   19.452007 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      12481500 bytes
HTML transferred:       12433700 bytes
Requests per second:    5.14 [#/sec] (mean)
Time per request:       972.600 [ms] (mean)
Time per request:       194.520 [ms] (mean, across all concurrent requests)
Transfer rate:          626.57 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.4      0       3
Processing:   608  961 579.6    700    4578
Waiting:      580  924 581.1    666    4542
Total:        608  961 579.7    700    4579

Percentage of the requests served within a certain time (ms)
  50%    700
  66%    851
  75%   1053
  80%   1160
  90%   1670
  95%   2258
  98%   2778
  99%   4579
 100%   4579 (longest request)
</pre>

<p>Below are the database statistics provided by the profiler</p>

<pre>
Executed 153 queries in 0.0114271640778 seconds
Average query length: 7.46873469135E-5 seconds
Queries per second: 13389.1487826
Longest query length: 0.000326871871948
</pre>


<h2>After: Stats Showing # of Database Queries & Time Taken for 100 requests</h2>

<p>Now we have made the changes, you can see that we had 64 requests to the database. The total time to run the tests was 12.546 seconds resulting in 7.97 requests per second. The median wait time to process each request was 439 milliseconds. </p>

<img style="float:right;margin-top: 15px;" src="/media/wysiwyg/blog/speedup_magento_category_list_cache.png" alt="Speedup Magento Category Listing" />


<pre>
Concurrency Level:      5
Time taken for tests:   12.546279 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      12481500 bytes
HTML transferred:       12433700 bytes
Requests per second:    7.97 [#/sec] (mean)
Time per request:       627.314 [ms] (mean)
Time per request:       125.463 [ms] (mean, across all concurrent requests)
Transfer rate:          971.44 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:   409  619 339.7    474    2258
Waiting:      383  583 339.5    439    2222
Total:        409  619 339.7    474    2258

Percentage of the requests served within a certain time (ms)
  50%    474
  66%    541
  75%    625
  80%    715
  90%    922
  95%   1518
  98%   1928
  99%   2258
 100%   2258 (longest request)
</pre>

<p>Below are the database statistics provided by the profiler</p>

<pre>
Executed 64 queries in 0.00508761405945 seconds
Average query length: 7.94939696789E-5 seconds
Queries per second: 12579.5705516
Longest query length: 0.000263929367065
</pre>

<p>This equates to a <strong>50% speedup</strong> for category listings</p>

<h2>How to Make the Code Changes</h2>
<p>We need to override the core List.php file to make these changes. To do this via SSH:</p>

<pre>
    mkdir -p app/code/local/Mage/Catalog/Block/Product/
    cp app/code/core/Mage/Catalog/Block/Product/List.php app/code/local/Mage/Catalog/Block/Product/List.php
</pre>

<p>This overrides our core product list file with our own version that we can now modify accordingly. Now modify the file like so:</p>

<pre>    app/code/local/Mage/Catalog/Block/Product/List.php</pre>

<pre>
class Mage_Catalog_Block_Product_List extends Mage_Catalog_Block_Product_Abstract
{   
    /**
     * Default toolbar block name
     *
     * @var string
     */
    protected $_defaultToolbarBlock = 'catalog/product_list_toolbar';
</pre>

to be

<pre>
class Mage_Catalog_Block_Product_List extends Mage_Catalog_Block_Product_Abstract
{   

    protected function _construct()
    {   
        $this->addData(array('cache_lifetime'    =>  9999999999,));
    }

    public function getCacheTags()
    {   
        return array(Mage_Catalog_Model_Product::CACHE_TAG);
    }

    public function getCacheKey()
    {   
        return $this->getRequest()->getRequestUri();
    }
    /**
     * Default toolbar block name
     *
     * @var string
     */
    protected $_defaultToolbarBlock = 'catalog/product_list_toolbar';
</pre>


Credit for much of this goes to <a href="http://www.magentocommerce.com/boards/viewthread/41112/" target="_blank">Chris Farley on Magento Forums</a>]]></description>
      <pubDate>Wed, 28 Dec 2011 01:31:24 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[WYSIWYG Subfolder Missing after created]]></title><meta http-equiv="X-UA-Compatible" content="IE=8" />
      <link>https://www.mageaustralia.com.au/blog/wysiwyg-editor-subfolders-missing/</link>
      <description><![CDATA[<p>The fix for this is to override the core file with a local copy:</p>

<pre>
    mkdir -p app/code/core/Mage/Cms/Model/Wysiwyg/Images/
    cp app/code/core/Mage/Cms/Model/Wysiwyg/Images/Storage.php app/code/local/Mage/Cms/Model/Wysiwyg/Images/Storage.php
</pre>

And then comment out the following Line 62-70

<pre>
        $subDirectories = Mage::getModel('core/file_storage_directory_database')->getSubdirectories($path);                        
                                                                                                                                     
        foreach ($subDirectories as $directory) {                                                                                    
            $fullPath = rtrim($path, DS) . DS . $directory['name'];                                                                  
            if (!file_exists($fullPath)) {                                                                                           
                mkdir($fullPath, 0777, true);                                                                                        
            }                                                                                                                        
        }                                                                                                                            
</pre>

<p>So they will look like this:</p>

<pre>
/*        $subDirectories = Mage::getModel('core/file_storage_directory_database')->getSubdirectories($path);                        
                                                                                                                                     
        foreach ($subDirectories as $directory) {                                                                                    
            $fullPath = rtrim($path, DS) . DS . $directory['name'];                                                                  
            if (!file_exists($fullPath)) {                                                                                           
                mkdir($fullPath, 0777, true);                                                                                        
            }                                                                                                                        
        }                                                                                                                            
 */  
</pre>

<p>and then we want to run the following SQL Query</p>

<pre>
SET FOREIGN_KEY_CHECKS=0;

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
-- --------------------------------------------------------

--
-- Table structure for table `core_directory_storage`
--

CREATE TABLE IF NOT EXISTS `core_directory_storage` (
  `directory_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL DEFAULT '',
  `path` varchar(255) NOT NULL DEFAULT '',
  `upload_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `parent_id` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`directory_id`),
  UNIQUE KEY `IDX_DIRECTORY_PATH` (`name`,`path`),
  KEY `parent_id` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8_general_ci COMMENT='Directory storage' AUTO_INCREMENT=1 ;


ALTER TABLE `core_directory_storage`
  ADD CONSTRAINT `FK_DIRECTORY_PARENT_ID` FOREIGN KEY (`parent_id`) REFERENCES `core_directory_storage` (`directory_id`) ON DELETE CASCADE ON UPDATE CASCADE;


CREATE TABLE `core_file_storage` (
  `file_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `content` LONGBLOB NOT NULL,
  `upload_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `filename` VARCHAR(255) NOT NULL DEFAULT '',
  `directory_id` INT(10) UNSIGNED NULL DEFAULT NULL,
  `directory` VARCHAR(255) NULL DEFAULT NULL,
  PRIMARY KEY (`file_id`),
  UNIQUE INDEX `IDX_FILENAME` (`filename`, `directory`),
  INDEX `directory_id` (`directory_id`),
  CONSTRAINT `FK_FILE_DIRECTORY` FOREIGN KEY (`directory_id`) REFERENCES `core_directory_storage` (`directory_id`) ON UPDATE CASCADE ON DELETE CASCADE
) COMMENT='File storage' COLLATE='utf8_general_ci' ENGINE=InnoDB ROW_FORMAT=DEFAULT;

SET FOREIGN_KEY_CHECKS=1;
</pre>

]]></description>
      <pubDate>Sat, 10 Dec 2011 05:37:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[eBay Magento integration extension M2E is now free]]></title><meta http-equiv="X-UA-Compatible" content="IE=8" />
      <link>https://www.mageaustralia.com.au/blog/magento-ebay-integration-free/</link>
      <description><![CDATA[<p><a href="http://www.magentocommerce.com/magento-connect/ebay-magento-integration-order-importing-and-stock-level-synchronization.html">Link to the extension</a> or read below for more details about the extension</p>

    <p>The <strong>M2E Pro</strong> extension fully integrates Magento into eBay platform. This allows quick and simple creation as well as management of product listings (inc. automated synchronization of stock levels, pricing, and product details), import of eBay Transactions, automated feedback posting for buyers and many other tasks which significantly reduce time required for listing maintenance.</p>
<p>The extension interacts with all 23 major eBay marketplaces, including eBay Motors. It supports multiple eBay accounts and multiple Magento stores.</p>
<p>The M2E Pro listings are based on 3 types of templates: <strong>Selling Format</strong>, <strong>Description</strong> and <strong>General</strong> which provides flexibility and minimizes efforts.</p>
<ul>
<li><strong>Selling Format Template</strong> contains information about listing types, quantities, auction duration and specifies price-related data (including that of Best Offer). </li>
<li><strong>Description Template</strong> sets products “look and feel”. </li>
<li><strong>General Template</strong> contains basic settings which are required for successful eBay listing.</li>
</ul>
<p> </p>
<p>The listing data synchronization between Magento and eBay is governed by <strong>Synchronization Template</strong>.</p>
<p>The <strong>Activation / Deactivation Actions, Revise, Relist</strong> and <strong>Stop</strong> rules within templates support implementation of numerous synchronization strategies that can be applied to relevant listings. (i.e. multiple updates: quantity, price, title, description for some items while only quantity for others.) Furthermore it is possible to <strong>schedule</strong> product actions (<strong>list, relist</strong>) on eBay.</p>
<p>User friendly interface delivers: simple<strong> </strong>overview, <strong>“one click” &amp; “bulk” </strong>management (i.e. <strong>revise, relist, and stop</strong>) of listed eBay items, quick navigation to those items placed on eBay and products association in Magento store.</p>
<p>Besides managing items listed by M2E Pro, the extension fully supports (<strong>relist, stop</strong>) actions for products listed by any other tool (eBay, ChannelAdvisor, Auctiva, TurboLister, etc).</p>
<p>The most important feature of the extension is the ability to import <strong>eBay Transactions</strong> and to create <strong>Magento Orders</strong>. As far as order management, the extension treats eBay originated orders as regular Magento orders.</p>
<p>Order fulfillment process is reflected on eBay. (i.e. when shipment is created, an eBay order gets “Shipped” status. If a shipment has a tracking number, it is also posted to eBay).</p>
<p>There are flexible settings <strong>for eBay Transactions</strong> and <strong>Customer</strong> importing, which can be set for each eBay account individually.</p>
<p>It is possible to maintain a mapping between eBay Order states and Magento Order statuses. Another useful feature allows products that are sold only on eBay to be imported later into Magento catalog for order processing.</p>
<p>Additionally plug in has the ability to enable <strong>auto- response</strong> for buyers’ feedbacks using the predefined response templates. Those feedbacks settings and templates also can be set for each eBay account individually. Depending on settings auto responses can be sent either for Positive feedbacks or for any other feedback type.</p>
<p> There are various <strong>global configuration</strong> options. It is possible enable/disable certain synchronization globally - for all eBay accounts at one place. Also there are options, which allow enable/disable useful notifications (i.e when cron job is not run for last 12 hours or new negative feedback was received from buyer). In the Marketplaces section, you can enable eBay Marketplaces you will work with.</p>
<p> </p>
<p>There are various global configuration options available: not limited to synchronization for multiple eBay accounts (i.e. one point of entry), notifications (enable/disable) management (i.e cron job delay or negative feedback alert).</p>
<p><strong>Marketplaces</strong> section allows activation of any of eBay Marketplaces.</p>
<p>Finally the extension has excessive logging:</p>
<ul>
<li><strong>Listings Log</strong> – provides full information about listings during their life cycle (creation, addition to a catalog, listing on eBay, product related changes (price, quantity, etc), actions (Revise, Stop, Relist, Delete Item(s), eBay notifications, Listing deletions, etc.). </li>
<li><strong>3rd Party Listings Log</strong> – contains full information on 3rd Party Listings during their life cycle. (Import of 3rd Party Listings from eBay, 3rd Party Listings actions (Stop, Relist), eBay notifications, etc.). </li>
<li><strong>Synchronizations Log</strong> – contains Templates, Orders, Feedback and 3rd Party Listings Synchronization related errors.</li>
</ul>
<p>Users, if necessary, are able to automatically clean log files.</p>]]></description>
      <pubDate>Tue, 06 Dec 2011 12:07:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento create feeds for Google Shopping, Getprice and Shopping Comparison sites]]></title><meta http-equiv="X-UA-Compatible" content="IE=8" />
      <link>https://www.mageaustralia.com.au/blog/magento-google-shopping-getprice/</link>
      <description><![CDATA[<p>There are numerous reasons to market your Ecommerce website through shopping comparison sites. Here's a few:</p>
<ol>
<li>They provide qualified traffic back to your website - these are people who are often <strong>ready or willing to buy</strong></li>
<li>They are often <strong>experienced online shoppers</strong></li>
<li>They are tech-savvy and will often <strong>share their purchase</strong> elsewhere on <a title="Facebook" href="http://www.facebook.com" target="_blank">Facebook</a>, <a title="Twitter" href="http://www.twitter.com/" target="_blank">Twitter</a> or with friends via email.</li>
<li>These are <strong>high traffic, high ranking</strong> websites. Getting links from them back to your website increases your SEO position.</li>
</ol>
<p>Google Shopping, in particular is very popular as it enables you to get a leg-up on the competition for your products as you have the opportunity to get your products displayed in your normal product searches as this example search for Dog Beds shows in the red outline below. (also note the MyShopping link below it)</p>
<p><img title="Google Shopping Merchant" src="http://www.mageaustralia.com.au/media/wysiwyg/dog_beds_-_Google_Search.png" alt="Display your products in Google Searches via google shopping" width="538" height="506" /></p>
<p>Each of the different shopping comparison sites require the feeds provided in different formats.&nbsp;Our main 'go to' extension to do this is&nbsp;<a href="http://www.gomage.com/extensions/gomage-feed-pro.html" target="_blank">GoMage Feed Pro</a>. It's currently $139.00 for &nbsp;Magento Community Edition, Professional or Magento Enterprise Edition. It enables you to setup the individual feeds to be provided to each of the shopping comparison sites in their required format.</p>
<p>You can view Google Shopping <a title="Google Product Feed Specification" href="http://www.google.com/support/merchants/bin/answer.py?answer=188494#AU" target="_blank">feed specification here</a>. Previously, Google also used something they called "Google Rich Snippets" but have moved to another Format developed in conjunction with Microsoft &amp; Yahoo &nbsp;also has the ability to index your site and read your product data by means of tags in your HTML to convey information about the product, whether it be an ISBN, a price, a special price, the product title, the description etc. This website to view information about this Microdata format is <a title="Schema.org" href="http://schema.org/docs/schemas.html" target="_blank">Schema.org</a></p>
<p>One thing to keep in mind with Google Shopping specifically is that at the time of this post, you need to:</p>
<ol>
<li>Provide site verification, via a html file or dns entry for your site</li>
<li>The feed needs to come from your Domain name</li>
<li>There is a 4-6 week wait period on getting approval, which can't happen until AFTER your site is live.</li>
<li>There is a 500 SKU limit</li>
</ol>
<p>For this reason and others, our philosophy is to keep your <strong>Magento website development</strong>&nbsp;as short and sweet as possible and then continue to make iterative enhancements over time. This may not always be possible if you are converting your current Ecommerce site from ZenCart, Virtuemart, Volusion or OScommerce to Magento but we still try to emphasise to only make Stage 1 of the development process the minimal required to get your Magento site live in a way that exceeds your current site, if you have one</p>
<p>Again, this is just one aspect of a complete <strong>Ecommerce Marketing Effort </strong>and really just skims the surface. Make sure you sign up to our blog or Ecommerce Newsletter for more details on marketing your ecommerce business.</p>
<p>Do you Need help with GoMage Feed Pro or any other aspect of your Magento Ecommerce Website? Call us on 1300-763-863 or use our <a title="Contact Us" href="/contacts/">contact form</a> to get in touch.</p>]]></description>
      <pubDate>Mon, 28 Nov 2011 08:30:00 +0000</pubDate>
    </item>
  </channel>
</rss>
