<?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>EcomDev Magento developers</title> <atom:link href="http://www.ecomdev.org/feed" rel="self" type="application/rss+xml" /><link>http://www.ecomdev.org</link> <description>Magento Ecommerce developers</description> <lastBuildDate>Tue, 21 Feb 2012 07:35:32 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Test Driven Magento Development Seminar Video and Code</title><link>http://www.ecomdev.org/2012/01/31/test-driven-magento-development-seminar-video-and-code.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=test-driven-magento-development-seminar-video-and-code</link> <comments>http://www.ecomdev.org/2012/01/31/test-driven-magento-development-seminar-video-and-code.html#comments</comments> <pubDate>Tue, 31 Jan 2012 08:55:50 +0000</pubDate> <dc:creator>Ivan Chepurnyi</dc:creator> <category><![CDATA[News]]></category> <guid
isPermaLink="false">http://www.ecomdev.org/?p=5977</guid> <description><![CDATA[<p>Last Friday we organized a free online seminar related to real examples of using of test driven development practices in Magento. This blog posting contains the code I created during the practice and recorded video of the seminar. For some &#8230;</p>]]></description> <content:encoded><![CDATA[<p>Last Friday we organized a free online seminar related to real examples of using of test driven development practices in Magento. This blog posting contains the code I created during the practice and recorded video of the seminar. For some reason the sound of the first part of the seminar were missing, so I included only practice and some part of theory into the video.</p><p>The code you can download by the following <a
href="http://www.ecomdev.org/wp-content/uploads/2012/01/Seminar_Guestbook.zip">link</a></p><p>Video unfortunately were cropped by 720p format and parts of my mac screen is not visible.<br
/> It is recommended to view it in HD mode, otherwise it will be hard to read the code on the screen.<br
/> <iframe
src="http://player.vimeo.com/video/35937480?portrait=0&amp;color=c9ff23" width="600" height="338" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe><p><a
href="http://vimeo.com/35937480">Magento Test Driven Development Seminar &#8211; Practice Part of the Seminar</a> from <a
href="http://vimeo.com/user8455618">Ivan Chepurnyi</a> on <a
href="http://vimeo.com">Vimeo</a>.</p><p>Small notice:<br
/> I was entering <strong>phpunit &#8211;colors UnitTests.php</strong> for running the tests in the command line.</p> ]]></content:encoded> <wfw:commentRss>http://www.ecomdev.org/2012/01/31/test-driven-magento-development-seminar-video-and-code.html/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Register for Free Magento Development Seminar!</title><link>http://www.ecomdev.org/2012/01/23/register-for-free-magento-development-seminar.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=register-for-free-magento-development-seminar</link> <comments>http://www.ecomdev.org/2012/01/23/register-for-free-magento-development-seminar.html#comments</comments> <pubDate>Mon, 23 Jan 2012 13:54:24 +0000</pubDate> <dc:creator>Ivan Chepurnyi</dc:creator> <category><![CDATA[News]]></category> <guid
isPermaLink="false">http://www.ecomdev.org/?p=5945</guid> <description><![CDATA[<p><img
class="alignright size-medium wp-image-5507" title="seminar" src="http://www.ecomdev.org/wp-content/uploads/2011/08/seminar-177x300.png" alt="" width="69" height="118" />Finally, we got some time for sharing knowledge with community. We were extremely busy with our current projects during last 3 months, and only now got chance to dedicated nice Friday evening for a free webinair!</p><p>So what is waiting &#8230;</p>]]></description> <content:encoded><![CDATA[<p><img
class="alignright size-medium wp-image-5507" title="seminar" src="http://www.ecomdev.org/wp-content/uploads/2011/08/seminar-177x300.png" alt="" width="69" height="118" />Finally, we got some time for sharing knowledge with community. We were extremely busy with our current projects during last 3 months, and only now got chance to dedicated nice Friday evening for a free webinair!</p><p>So what is waiting for you this Friday?</p><p><span
id="more-5945"></span></p><h3>Magento Test Driven Development in Practice<br
/> Webinar on January 27</h3><p><strong>Space is limited.</strong></p><p>Reserve your Webinar seat now at:<br
/> <a
href="http://bit.ly/yX0jtb"> https://www3.gotomeeting.com/register/489066878</a></p><p>During 1,5 hour webinair we are going to show you how to:</p><ul><li>Writing Simple Tests for Magento</li><li>Fixtures, Expectations, Data Providers</li><li>Model/Block/Helper Tests</li><li>Controller/Layout Tests</li><li>Mocking and Stubbing Magento entities</li></ul><p>And also small Questions &amp; Answers  section for  15 mins. So be prepared for them!</p><p><strong>Date:</strong> Friday, January 27, 2012<br
/> <strong>Time:</strong> 5:00 PM &#8211; 6:30 PM CET</p><p>After registering you will receive a confirmation email containing information about joining the Webinar.</p><p><strong>System Requirements</strong></p><ul><li><strong>PC-based attendees<br
/> </strong>Required: Windows® 7, Vista, XP or 2003 Server</li><li><strong>Macintosh®-based attendees<br
/> </strong>Required: Mac OS® X 10.5 or newer</li></ul> ]]></content:encoded> <wfw:commentRss>http://www.ecomdev.org/2012/01/23/register-for-free-magento-development-seminar.html/feed</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Checkout the new office of superior Magento development</title><link>http://www.ecomdev.org/2011/12/20/checkout-the-house-of-superior-magento-development.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=checkout-the-house-of-superior-magento-development</link> <comments>http://www.ecomdev.org/2011/12/20/checkout-the-house-of-superior-magento-development.html#comments</comments> <pubDate>Tue, 20 Dec 2011 23:51:18 +0000</pubDate> <dc:creator>Aldo Wink</dc:creator> <category><![CDATA[News]]></category> <guid
isPermaLink="false">http://www.ecomdev.org/?p=5866</guid> <description><![CDATA[<p>It&#8217;s all about stepping forward, doing it, making it happen. Next week Ecomdev will have it&#8217;s own office in Kiev, hosting 8 ambitious developers who want to make the Magento ecommerce world a better place!</p><p>ps, good paint job guys!&#8230;</p>]]></description> <content:encoded><![CDATA[<p>It&#8217;s all about stepping forward, doing it, making it happen. Next week Ecomdev will have it&#8217;s own office in Kiev, hosting 8 ambitious developers who want to make the Magento ecommerce world a better place!</p><p>ps, good paint job guys!<br
/> <a
href='http://www.ecomdev.org/2011/12/20/checkout-the-house-of-superior-magento-development.html/img_20111220_170758' title='IMG_20111220_170758'><img
width="90" height="90" src="http://www.ecomdev.org/wp-content/uploads/2011/12/IMG_20111220_170758-90x90.jpg" class="attachment-thumbnail" alt="IMG_20111220_170758" title="IMG_20111220_170758" /></a> <a
href='http://www.ecomdev.org/2011/12/20/checkout-the-house-of-superior-magento-development.html/img_20111220_170932' title='IMG_20111220_170932'><img
width="90" height="90" src="http://www.ecomdev.org/wp-content/uploads/2011/12/IMG_20111220_170932-90x90.jpg" class="attachment-thumbnail" alt="IMG_20111220_170932" title="IMG_20111220_170932" /></a> <a
href='http://www.ecomdev.org/2011/12/20/checkout-the-house-of-superior-magento-development.html/img_20111220_170739-1' title='IMG_20111220_170739-1'><img
width="90" height="90" src="http://www.ecomdev.org/wp-content/uploads/2011/12/IMG_20111220_170739-1-90x90.jpg" class="attachment-thumbnail" alt="IMG_20111220_170739-1" title="IMG_20111220_170739-1" /></a> <a
href='http://www.ecomdev.org/2011/12/20/checkout-the-house-of-superior-magento-development.html/img_20111220_170752' title='IMG_20111220_170752'><img
width="90" height="90" src="http://www.ecomdev.org/wp-content/uploads/2011/12/IMG_20111220_170752-90x90.jpg" class="attachment-thumbnail" alt="IMG_20111220_170752" title="IMG_20111220_170752" /></a> <a
href='http://www.ecomdev.org/2011/12/20/checkout-the-house-of-superior-magento-development.html/img_20111220_170831' title='IMG_20111220_170831'><img
width="90" height="90" src="http://www.ecomdev.org/wp-content/uploads/2011/12/IMG_20111220_170831-90x90.jpg" class="attachment-thumbnail" alt="IMG_20111220_170831" title="IMG_20111220_170831" /></a> <a
href='http://www.ecomdev.org/2011/12/20/checkout-the-house-of-superior-magento-development.html/img_20111220_170932-1' title='IMG_20111220_170932-1'><img
width="90" height="90" src="http://www.ecomdev.org/wp-content/uploads/2011/12/IMG_20111220_170932-1-90x90.jpg" class="attachment-thumbnail" alt="IMG_20111220_170932-1" title="IMG_20111220_170932-1" /></a></p> ]]></content:encoded> <wfw:commentRss>http://www.ecomdev.org/2011/12/20/checkout-the-house-of-superior-magento-development.html/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>EcomDev breaks Magento speed record!</title><link>http://www.ecomdev.org/2011/10/08/ecomdev-breaks-magento-speed-limits.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ecomdev-breaks-magento-speed-limits</link> <comments>http://www.ecomdev.org/2011/10/08/ecomdev-breaks-magento-speed-limits.html#comments</comments> <pubDate>Sat, 08 Oct 2011 10:00:30 +0000</pubDate> <dc:creator>Ivan Chepurnyi</dc:creator> <category><![CDATA[Extensions]]></category> <category><![CDATA[News]]></category> <guid
isPermaLink="false">http://www.ecomdev.org/?p=5766</guid> <description><![CDATA[<p>I am happy to announce that we released a new FREE Magento extension that will help merchants with huge product databases make their stores SEO friendly by keeping url rewrite index up to date! I think everyone knows that URL &#8230;</p>]]></description> <content:encoded><![CDATA[<p>I am happy to announce that we released a new FREE Magento extension that will help merchants with huge product databases make their stores SEO friendly by keeping url rewrite index up to date! I think everyone knows that URL rewrite index is the slowest one in Magento, but not anymore&#8230; Now it appears to be one of the fastest!</p><h2>Numbers</h2><p>Before talking about features of this extension, I&#8217;d like to give some benchmark results for our extension.</p><p>Hardware used for benchmarks: AMD Athlon(tm) 64 X2 Dual Core Processor 6000+ 3GHz, 8GB DDR2</p><p>Magento instances used for calculation of performance:</p><ul><li>Simple: 120 Skus, 27 Categories, 3 store</li><li>Usual: 3,912 Skus, 17 Categories, 1 store</li><li>Large: 31,124 Skus, 197 Categories, 5 stores</li><li>Huge: 202,628 Skus, 401 Category, 1 store</li></ul><p>I tried to measure four full reindex processes for core rewrite indexer, but for Large and Huge instances I was too bored after waiting an hour for first run to complete, so I just killed a process. If someone wants perform such benchmarks on similar server machine, I will add results to the table.</p><p>1st run was made on clean url rewrite table, e.g. without any prepared index data.<br
/> 2nd, 3rd and 4th are reindex process on existing data.</p><h4>Results</h4><div
id="traininglist"><table
width="100%"><thead><tr><th
rowspan="2"><strong>Instance Code</strong></th><th
colspan="4"><strong>Core</strong></th><th
colspan="4"><strong>EcomDev</strong></th></tr><tr><th><strong>1st</strong></th><th><strong>2nd</strong></th><th><strong>3rd</strong></th><th><strong>4th</strong></th><th><strong>1st</strong></th><th><strong>2nd</strong></th><th><strong>3rd</strong></th><th><strong>4th</strong></th></tr></thead><tbody><tr><td>Simple</td><td>17,13 sec</td><td>6.48 sec</td><td>3.13 sec</td><td>2.52 sec</td><td>5.03 sec</td><td>3.93 sec</td><td>2.88 sec</td><td>3.72 sec</td></tr><tr><td>Usual</td><td>107.55 sec</td><td>116.76 sec</td><td>18.06 sec</td><td>22.43 sec</td><td>14.72 sec</td><td>7.41 sec</td><td>4.56 sec</td><td>6.22 sec</td></tr><tr><td>Large</td><td>too long</td><td>N/A</td><td>N/A</td><td>N/A</td><td>169.19 sec</td><td>111.67 sec</td><td>91.42 sec</td><td>84.38 sec</td></tr><tr><td>Huge</td><td>too long</td><td>N/A</td><td>N/A</td><td>N/A</td><td>346.90 sec</td><td>178.27 sec</td><td>196.10 sec</td><td>192.73 sec</td></tr></tbody></table></div><p>As you see in the result table, difference in performance between our and core implementation is more noticeable on databases with more then 600 Skus.</p><h2>Features</h2><p>So does our indexer support all the features of core url rewrite one? Sure, it has such features:</p><ul><li>Transliteration of accented latin, German, Hebrew, Russian, Ukrainian characters to default latin characters range ([a-z]).</li><li>Multi-store (language based) url paths for products &amp; categories</li><li>Nested url paths for categories &amp; categories</li><li>Nested url path for products that are in anchor categories and not assigned directly (Not supported by Core)</li><li>Handling duplicated url path with adding index to it (unique-key, unique-key-1, unique-key-2, unique-key-3, etc)</li></ul><h2>System Requirements</h2><p>MDBS is not supported for now.</p><ul><li>MySQL5.0 or higher</li><li>Magento CE1.4.2,1.5.x,1.6.x</li></ul><h2>Installation</h2><p>For now you can obtain this extension only via Git repository:<br
/> <a
title="EcomDev_UrlRewrite on GitHub" href="https://github.com/IvanChepurnyi/EcomDev_UrlRewrite" target="_blank">https://github.com/IvanChepurnyi/EcomDev_UrlRewrite</a></p><p>I will upload an extension to Magento Connect when come back from my Vacation, that will be from Oct 10th till Oct 14th.</p><p>If you have any ideas or features you would like to add to the extension, you can use <a
title="EcomDev_UrlRewrite Issue Trackeron" href="https://github.com/IvanChepurnyi/EcomDev_UrlRewrite/issues" target="_blank">Issue Tracker</a> on GitHub.</p> ]]></content:encoded> <wfw:commentRss>http://www.ecomdev.org/2011/10/08/ecomdev-breaks-magento-speed-limits.html/feed</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Magento Index Seminar Video &amp; Guide</title><link>http://www.ecomdev.org/2011/09/16/magento-index-seminar-video-guide.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=magento-index-seminar-video-guide</link> <comments>http://www.ecomdev.org/2011/09/16/magento-index-seminar-video-guide.html#comments</comments> <pubDate>Fri, 16 Sep 2011 01:39:10 +0000</pubDate> <dc:creator>Ivan Chepurnyi</dc:creator> <category><![CDATA[News]]></category> <category><![CDATA[Overview]]></category> <category><![CDATA[index]]></category> <category><![CDATA[Magento]]></category> <category><![CDATA[magento developers]]></category> <category><![CDATA[seminar]]></category> <category><![CDATA[training]]></category> <guid
isPermaLink="false">http://www.ecomdev.org/?p=5710</guid> <description><![CDATA[<p><img
class="alignright size-medium wp-image-5507" title="seminar" src="http://www.ecomdev.org/wp-content/uploads/2011/08/seminar-177x300.png" alt="" width="69" height="118" />Last week there was an online seminar about Magento Indexes functionality. In this blog post I would like to describe a bit more properly a solution for custom index creation, because there were some things that were some issues with &#8230;</p>]]></description> <content:encoded><![CDATA[<p><img
class="alignright size-medium wp-image-5507" title="seminar" src="http://www.ecomdev.org/wp-content/uploads/2011/08/seminar-177x300.png" alt="" width="69" height="118" />Last week there was an online seminar about Magento Indexes functionality. In this blog post I would like to describe a bit more properly a solution for custom index creation, because there were some things that were some issues with example in the slides. Just was a last moment change before seminar to make it multi-store instead of global.</p><h2>Custom Indexer Creation Guide</h2><p>Here you can see step by step implementation of a possible example with featured products indexer. As I told on seminar there is more easy and faster way to create featured products, for instance if you add &#8220;is_featured&#8221; to flat index. But this one is good for learning simple indexer creation.</p><p>You can download a full module code by clicking <a
title="Seminar Custom Module" href="http://www.ecomdev.org/wp-content/uploads/2011/09/CustomMagentoIndexer.zip">here</a>.</p><h3>1. Creating Product Attribute</h3><p>Let&#8217;s create a product attribute, that will be used for marking our products as featured.</p><pre class="brush: php; title: app/code/local/EcomDev/IndexSeminar/sql/ecomdev_indexseminar/install-1.6.0.0.php; notranslate">
$this-&gt;addAttribute(Mage_Catalog_Model_Product::ENTITY, 'is_featured', array(
    'type' =&gt; 'int',
    'label' =&gt; 'Is featured',
    'input' =&gt; 'select',
    'source' =&gt; 'eav/entity_attribute_source_boolean',
    'global' =&gt; Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
    'user_defined' =&gt; false,
    'required' =&gt; false
));
</pre><p>So as you see in the code, it has store view scope for making possible to define different featured products for every store view.</p><h3>2. Designing Index Table</h3><p>Before you implement  a new indexer you need to take care about how the index table will look like. E.g. you need to create  a table structure that will be optimized for using it on the frontend. So we are going to create a table with only two columns: store_id and product_id. Of course let&#8217;s use available Varien_Db_Ddl_Table.</p><pre class="brush: php; title: app/code/local/EcomDev/IndexSeminar/sql/ecomdev_indexseminar/install-1.6.0.0.php; notranslate">
// Defining table structure via object
$table = $this-&gt;getConnection()
    -&gt;newTable($this-&gt;getTable('ecomdev_indexseminar/featured_products'))
    -&gt;addColumn('store_id', Varien_Db_Ddl_Table::TYPE_SMALLINT, null,
                array(
                    'unsigned' =&gt; true,
                    'nullable' =&gt; false,
                    'primary' =&gt; true
                ))
    -&gt;addColumn('product_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null,
                array(
                    'unsigned' =&gt; true,
                    'nullable' =&gt; false,
                    'primary' =&gt; true
                ))
   -&gt;addForeignKey(
        $this-&gt;getFkName('ecomdev_indexseminar/featured_products', 'store_id', 'core/store', 'store_id'),
        'store_id', $this-&gt;getTable('core/store'), 'store_id',
        Varien_Db_Ddl_Table::ACTION_CASCADE, Varien_Db_Ddl_Table::ACTION_CASCADE
    )
    -&gt;addForeignKey(
        $this-&gt;getFkName('ecomdev_indexseminar/featured_products', 'product_id', 'catalog/product', 'entity_id'),
        'product_id', $this-&gt;getTable('catalog/product'), 'entity_id',
        Varien_Db_Ddl_Table::ACTION_CASCADE, Varien_Db_Ddl_Table::ACTION_CASCADE
    );
// Executing table creation object
$this-&gt;getConnection()-&gt;createTable($table);
</pre><p>Foreign keys just used for auto-cleaning the index table if product or store view was deleted. You may not add them if you need to have additional performance on index creation process.</p><h3>3. Defining Indexer in Configuration</h3><p>So now we going to proceed with creation indexer model itself, so let&#8217;s define it in configuration, to let Magento know about new indexer.</p><pre class="brush: xml; title: app/code/local/EcomDev/IndexSeminar/etc/config.xml; notranslate">
&lt;config&gt;
  &lt;!-- other code... --&gt;
  &lt;global&gt;
    &lt;!-- other code... --&gt;
        &lt;index&gt;
            &lt;indexer&gt;
                &lt;featured_products&gt;
                    &lt;model&gt;ecomdev_indexseminar/indexer_featured&lt;/model&gt;
                 &lt;/featured_products&gt;
            &lt;/indexer&gt;
        &lt;/index&gt;
    &lt;!-- other code... --&gt;
  &lt;/global&gt;
 &lt;!-- other code... --&gt;
&lt;/config&gt;
</pre><p>So we need just to specify our indexer code that can be used for getProcessByCode() method and model name that will realize our indexer itself. In this code snipped, indexer code is &#8220;featured_products&#8221; and model is<br
/> &#8220;ecomdev_indexseminar/indexer_featured&#8221;.</p><h3>4. Creating Indexer Model</h3><p>All the indexer models should be extended from Mage_Index_Model_Indexer_Abstract.</p><pre class="brush: php; title: app/code/local/EcomDev/IndexSeminar/Model/Indexer/Featured.php; notranslate">
class EcomDev_IndexSeminar_Model_Indexer_Featured
    extends Mage_Index_Model_Indexer_Abstract
{
}
</pre><p>Then you need to define events that this indexer should process by _registerEvent method, i.e. matching entity and event types to make them available for index.</p><pre class="brush: php; title: app/code/local/EcomDev/IndexSeminar/Model/Indexer/Featured.php; notranslate">
class EcomDev_IndexSeminar_Model_Indexer_Featured
    extends Mage_Index_Model_Indexer_Abstract
{
    protected $_matchedEntities = array(
        Mage_Catalog_Model_Product::ENTITY =&gt; array(
            Mage_Index_Model_Event::TYPE_SAVE,
            Mage_Index_Model_Event::TYPE_MASS_ACTION
        )
    );
}
</pre><p>In our case it is only save and mass product update events for catalog product.</p><p>Also lets create _construct method, that initializes our resource model (our database layer for indexer)</p><pre class="brush: php; title: app/code/local/EcomDev/IndexSeminar/Model/Indexer/Featured.php; notranslate">
class EcomDev_IndexSeminar_Model_Indexer_Featured
    extends Mage_Index_Model_Indexer_Abstract
{
// .. previous lines
    protected function _construct()
    {
        $this-&gt;_init('ecomdev_indexseminar/indexer_featured');
    }
}
</pre><p>Then we need to add methods that will return description and our indexer name for displaying on &#8220;System -&gt; Index Management&#8221; page. They are quite simple doesn&#8217;t require to explanation.</p><pre class="brush: php; title: app/code/local/EcomDev/IndexSeminar/Model/Indexer/Featured.php; notranslate">
class EcomDev_IndexSeminar_Model_Indexer_Featured
    extends Mage_Index_Model_Indexer_Abstract
{
// .. previous lines
    public function getName()
    {
        return Mage::helper('ecomdev_indexseminar')-&gt;__('Featured Product');
    }
    public function getDescription()
    {
        return Mage::helper('ecomdev_indexseminar')-&gt;__('Indexes something');
    }
}
</pre><p>Then we need to realize a method that will perform a check for changes in product, that may affect rebuilding index and store that data for our indexer further process.</p><pre class="brush: php; title: app/code/local/EcomDev/IndexSeminar/Model/Indexer/Featured.php; notranslate">
class EcomDev_IndexSeminar_Model_Indexer_Featured
    extends Mage_Index_Model_Indexer_Abstract
{
// .. previous lines
    protected function _registerEvent(Mage_Index_Model_Event $event)
    {
        /* @var $entity Mage_Catalog_Model_Product */
        $entity = $event-&gt;getDataObject();
        if ($entity-&gt;dataHasChangedFor('is_featured')) {
            $event-&gt;setData('product_id', $entity-&gt;getId());
        } elseif ($entity-&gt;getAttributesData()) {
            $attributeData = $entity-&gt;getAttributesData();
            if (isset($attributeData['is_featured'])) {
                $event-&gt;setData('product_ids', $entity-&gt;getProductIds());
            }
        }
    }
}
</pre><p>So now let take a look what it actually does:</p><ul><li>If it receives a product model that has &#8220;is_featured&#8221; attribute value changed, then it stores this product id for event data. Usually indexers add own prefix to values that are stored to event, to not conflict with each other.</li><li>Then it checks if it is a massaction object, that contains a change for &#8220;is_featured&#8221; attribute as well. If our attribute changed, then store an array of product ids to reindex.</li><li>And of course it doesn&#8217;t store anything if related data to its logic was not changed</li></ul><p>Okey, seems our indexer registers proper data for further indexing process, so let go forward. Now it&#8217;s time to create method that runs indexer resource model method depending on entity and event types.</p><pre class="brush: php; title: app/code/local/EcomDev/IndexSeminar/Model/Indexer/Featured.php; notranslate">
class EcomDev_IndexSeminar_Model_Indexer_Featured
    extends Mage_Index_Model_Indexer_Abstract
{
// .. previous lines
    protected function _processEvent(Mage_Index_Model_Event $event)
    {
        if ($event-&gt;getData('product_id') || $event-&gt;getData('product_ids')) {
            $this-&gt;callEventHandler($event);
        }
    }
}
</pre><p>So this method only checks if there is any data we set before, and uses callEventHandler() method that invokes proper resource model method. For instance if we have entity type &#8220;catalog_product&#8221; and event type &#8220;save&#8221; then the name of invoked method will be &#8220;catalogProductSave&#8221;, i.e. concatenated and &#8220;camelized&#8221; name from this two properties of event.</p><h3>5. Creating Resource Model</h3><p>So the index model is ready, the only one most important part left. It is our index model that generates all the data for index. Index module also has an abstract class for that we should extend from: Mage_Index_Model_Resource_Abstract.</p><pre class="brush: php; title: app/code/local/EcomDev/IndexSeminar/Model/Resource/Indexer/Featured.php; notranslate">
class EcomDev_IndexSeminar_Model_Resource_Indexer_Featured
    extends Mage_Index_Model_Resource_Abstract
{
    protected function _construct()
    {
        // Defining the connections prefix for our resource.
        $this-&gt;_setResource('ecomdev_indexseminar');
    }
}
</pre><p>Also as you see it does some initialization in _construct method, for letting Magento know wich connection it may use, if there will be different connections for indexer module.</p><p>Then we are going to create the main method that will be invoked for rebuilding any kind of index, I made it flexible, because I don&#8217;t like copy-paste <img
src='http://www.ecomdev.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . The method body is quite good explained by comments in the snippet itself.</p><pre class="brush: php; title: app/code/local/EcomDev/IndexSeminar/Model/Resource/Indexer/Featured.php; notranslate">
class EcomDev_IndexSeminar_Model_Resource_Indexer_Featured
    extends Mage_Index_Model_Resource_Abstract
{
// ... other code
    protected function _reindexEntity($productId = null)
    {
        // New select object for data for index retrieval
        $select = $this-&gt;_getWriteAdapter()-&gt;select();
        // Getting attribute model for retrieving its meta-information (attribute id, backend table name)
        /* @var $attribute Mage_Catalog_Model_Resource_Eav_Attribute */
        $attribute = Mage::getSingleton('eav/config')
                         -&gt;getAttribute('catalog_product', 'is_featured');
        $select
            // Select all store views
            -&gt;from(array('store' =&gt; $this-&gt;getTable('core/store')), array('store_id'))
            // Joining default store value
            -&gt;join(array('default_value' =&gt; $attribute-&gt;getBackendTable()),
                         'default_value.store_id = 0', array('entity_id'))
            // Select current store value
            -&gt;joinLeft(array('store_value' =&gt; $attribute-&gt;getBackendTable()),
                       'store_value.attribute_id = default_value.attribute_id'
                       . ' AND store_value.entity_id = default_value.entity_id'
                       . ' AND store_value.store_id = store.store_id',
                       array())
            // Limiting select by only featured products
            -&gt;where('default_value.value = ? OR store_value.value = ?', 1)
            // Add condition if current store value is not &quot;No&quot; (empty or not equals to 0)
            -&gt;where('store_value.value IS NULL OR store_value.value != ?', 0)
            // Limiting select only by our attribute data
            -&gt;where('default_value.attribute_id = ?', $attribute-&gt;getId())
            // Do not generate values for default store
            -&gt;where('store.store_id != ?', 0);
        // If index should be rebuild by one or some set of products
        if ($productId !== null) {
            // If single product id, then cast to array
            if (!is_array($productId)) {
                $productId = array($productId);
            }
            $select-&gt;where('default_value.entity_id IN(?)', $productId);
            // Cleaning existing rows for product to reindex
            $this-&gt;_getIndexAdapter()-&gt;delete(
                $this-&gt;getTable('ecomdev_indexseminar/featured_products'),
                array(
                    'product_id IN(?)' =&gt; $productId
                )
            );
        } else { // If it is full re-index clear all index data
            $this-&gt;_getIndexAdapter()-&gt;delete($this-&gt;getTable('ecomdev_indexseminar/featured_products'));
        }
        // Fullfil the index table from our select
        $this-&gt;insertFromSelect(
            $select,
            $this-&gt;getTable('ecomdev_indexseminar/featured_products'),
            array('store_id', 'product_id')
        );
    }
}
</pre><p>After we have unified method for generation of index data, we can just call it from different index event handlers:</p><pre class="brush: php; title: app/code/local/EcomDev/IndexSeminar/Model/Resource/Indexer/Featured.php; notranslate">
class EcomDev_IndexSeminar_Model_Resource_Indexer_Featured
    extends Mage_Index_Model_Resource_Abstract
{
// ... other code
    // Handler for &quot;Reindex&quot; action in the admin panel or console
    public function reindexAll()
    {
        // Call our reindex method without parameters,
        // to rebuild all data
        $this-&gt;_reindexEntity();
    }
    // Handler for save event on particular product
    public function catalogProductSave($event)
    {
        // Passing single product id to reindex method
        $this-&gt;_reindexEntity($event-&gt;getData('product_id'));
    }
    // Handler for updating products data via massaction
    public function catalogProductMassAction($event)
    {
        // Passing an array of product ids to our reindex method
        $this-&gt;_reindexEntity($event-&gt;getData('product_ids'));
    }
}
</pre><p>So congratulation you have working custom indexer!</p><p>To apply this data on the fronend you can find a small example with observer for it in the code, available to download. It observes <strong>catalog_product_collection_apply_limitations_after</strong> event and calls a method on resource model that joins our index table, so limits selection results.</p><p>Also it uses collections flag functionality to add index only when it needed. So if you want to display featured products in the block, you need to set flag &#8220;featured&#8221; to a product collection, before loading the collection itself.</p><pre class="brush: php; title: Code Snippet; notranslate">
$collection-&gt;setFlag('featured', true);
</pre><h2>Seminar Video</h2><p>Before you are going to check this video recording from seminar, I want to excuse for some issues with the presentation, I just got cold one day before it and it was first such an online seminar when you don&#8217;t have visual contact with attendees. But anyway I hope you enjoy it <img
src='http://www.ecomdev.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p><iframe
src="http://player.vimeo.com/video/28835600?portrait=0&amp;color=c9ff23" width="600" height="338" frameborder="0" webkitAllowFullScreen="true" allowFullScreen="true"></iframe><p><a
href="http://vimeo.com/28835600">Magento Index Functionality Seminar &#8211; Sep 8</a> from <a
href="http://vimeo.com/user8455618">Ivan Chepurnyi</a> on <a
href="http://vimeo.com">Vimeo</a>.</p><h2>Next Seminar</h2><p>Also we are planning to make it on regular basis. Our goal is to provide at least one seminar a month.<br
/> So the next seminar possible topics are presented in the <a
href="https://docs.google.com/a/ecomdev.org/spreadsheet/viewform?formkey=dGFzZ1ZUN1hhX3YwT2lqNVVCTW5Eamc6MQ" title="EcomDev Free Online Seminar Topic Selection">voting form</a>. The most voted topic will be prepared for the one, that will be planned for October. Most probably at the end of the month.</p> ]]></content:encoded> <wfw:commentRss>http://www.ecomdev.org/2011/09/16/magento-index-seminar-video-guide.html/feed</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Magento Index Functionality &#8211; Online Seminar on Sep 8th</title><link>http://www.ecomdev.org/2011/08/22/magento-index-functionality-online-seminar-on-sep-8th.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=magento-index-functionality-online-seminar-on-sep-8th</link> <comments>http://www.ecomdev.org/2011/08/22/magento-index-functionality-online-seminar-on-sep-8th.html#comments</comments> <pubDate>Mon, 22 Aug 2011 10:59:25 +0000</pubDate> <dc:creator>Ivan Chepurnyi</dc:creator> <category><![CDATA[News]]></category> <category><![CDATA[development]]></category> <category><![CDATA[index]]></category> <category><![CDATA[Magento]]></category> <category><![CDATA[seminar]]></category> <guid
isPermaLink="false">http://www.ecomdev.org/?p=5502</guid> <description><![CDATA[<p><img
class="alignright size-medium wp-image-5507" title="seminar" src="http://www.ecomdev.org/wp-content/uploads/2011/08/seminar-177x300.png" alt="" width="69" height="118" />We are committed  to sharing our knowledge about Magento architecture and improving quality of Magento Development around the world by writing some articles and providing training courses. But for us it is not enough, so we are going to start &#8230;</p>]]></description> <content:encoded><![CDATA[<p><img
class="alignright size-medium wp-image-5507" title="seminar" src="http://www.ecomdev.org/wp-content/uploads/2011/08/seminar-177x300.png" alt="" width="69" height="118" />We are committed  to sharing our knowledge about Magento architecture and improving quality of Magento Development around the world by writing some articles and providing training courses. But for us it is not enough, so we are going to start providing free online seminars for best practices in particular areas of Magento development. The first one is planned on September 8th 2011 from 16:00-17:30 CEST (Central European Summer Time), so try to make some room in your working schedule for it.</p><p><span
id="more-5502"></span></p><p>It is pity, but there will be only 20 places available, because of <a
title="GoToTraining" href="http://www.gotomeeting.com/fec/training/online_training" target="_blank">GoToTraining™</a> limitations. So we are starting pre-registration for this seminar with questions that will help us to select 20 attendees out of all the pre registrations. Don&#8217;t worry if you are not in selected 20 attendees, seminar will be recorded, so you can view it later.</p><p>Seminar Agenda:</p><ul><li>Overview of Magento Index module functionality (Workflow, Structure, Entities, etc)</li><li>Changes of Index Module in CE 1.6</li><li>Questions &amp; Answers (20 minutes)</li></ul><p>Add an event to you calendar: <a
href="http://www.ecomdev.org/wp-content/uploads/2011/08/Magento-Index-Seminar.ics">iCal</a></p><h2>UPDATE 06/09/2011</h2><h3>We increased the maximum number of attendees on our GoToTraining account, so now everyone can join the seminar! Please hurry up, the registration closes on Sep 7th at 23:59 CEST. Here is direct registration link: <a
href="http://bit.ly/op6vQ5" title="Register for Magento Indexes Seminar!">http://bit.ly/op6vQ5</a></h3> ]]></content:encoded> <wfw:commentRss>http://www.ecomdev.org/2011/08/22/magento-index-functionality-online-seminar-on-sep-8th.html/feed</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>CheckItOut! new major release</title><link>http://www.ecomdev.org/2011/08/02/checkitout-major-release.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=checkitout-major-release</link> <comments>http://www.ecomdev.org/2011/08/02/checkitout-major-release.html#comments</comments> <pubDate>Tue, 02 Aug 2011 10:00:42 +0000</pubDate> <dc:creator>Ivan Chepurnyi</dc:creator> <category><![CDATA[News]]></category> <category><![CDATA[checkitout]]></category> <category><![CDATA[checkout]]></category> <category><![CDATA[extension]]></category> <category><![CDATA[Magento]]></category> <guid
isPermaLink="false">http://www.ecomdev.org/?p=5465</guid> <description><![CDATA[<p>Today a new version of <a
title="CheckItOut!" href="http://www.ecomdev.org/shop/checkout/checkitout.html">CheckitOut!</a> extension is released!<br
/> <span
id="more-5465"></span><br
/> <a
title="CheckItOut!" href="http://www.ecomdev.org/shop/checkout/checkitout.html" target="_blank"><img
class="alignleft" src="http://www.ecomdev.org/shop/media/catalog/product/cache/2/image/188x264/9df78eab33525d08d6e5fb8d27136e95/c/h/checkitout.png" alt="CheckItOut!" width="132" height="185" /></a><span
style="font-weight: bold;"><strong>Changes in release 1.2.0</strong></span></p><ul
style="margin-left: 132px;"><li><strong>Full support of Magento Enterprise features!</strong><br
/> Added core code support for such Enterprise Edition features:<ul><li><strong>Reward Points</strong></li><li><strong>Customer Balance</strong></li><li><strong>Gift Wrapping</strong></li><li><strong>Gift Receipt</strong></li><li><strong>Printed Card</strong></li></ul></li><li><strong>Support of </strong></li>&#8230;</ul>]]></description> <content:encoded><![CDATA[<p>Today a new version of <a
title="CheckItOut!" href="http://www.ecomdev.org/shop/checkout/checkitout.html">CheckitOut!</a> extension is released!<br
/> <span
id="more-5465"></span><br
/> <a
title="CheckItOut!" href="http://www.ecomdev.org/shop/checkout/checkitout.html" target="_blank"><img
class="alignleft" src="http://www.ecomdev.org/shop/media/catalog/product/cache/2/image/188x264/9df78eab33525d08d6e5fb8d27136e95/c/h/checkitout.png" alt="CheckItOut!" width="132" height="185" /></a><span
style="font-weight: bold;"><strong>Changes in release 1.2.0</strong></span></p><ul
style="margin-left: 132px;"><li><strong>Full support of Magento Enterprise features!</strong><br
/> Added core code support for such Enterprise Edition features:<ul><li><strong>Reward Points</strong></li><li><strong>Customer Balance</strong></li><li><strong>Gift Wrapping</strong></li><li><strong>Gift Receipt</strong></li><li><strong>Printed Card</strong></li></ul></li><li><strong>Support of Gift Messages functionality</strong></li><li><strong>Support for upcoming new version of <a
href="http://ebizmarts.com/sage-pay-suite">Ebizmarts SagePay</a> extension</strong><br
/> Patch for current version can be issued by request.</li><li><strong>Removed dependency on payment template.</strong><br
/> Now extension uses all core templates, except a template for the order review step.</li></ul><p>If you already bought or received extension for reviewing purposes, you can download it at &#8220;My Downloads&#8221; section on your <a
title="Customer Account" href="http://www.ecomdev.org/shop/customer/account/">account page</a> in our extensions shop.</p><h4><strong>Check Our <a
title="CheckItOut! Demo" href="http://bit.ly/mf6FTO">Demo Installment</a> for seeing new version in action!</strong></h4> ]]></content:encoded> <wfw:commentRss>http://www.ecomdev.org/2011/08/02/checkitout-major-release.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Advanced Magento Training Week in Amsterdam!</title><link>http://www.ecomdev.org/2011/07/05/advanced-magento-training-week-in-amsterdam.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=advanced-magento-training-week-in-amsterdam</link> <comments>http://www.ecomdev.org/2011/07/05/advanced-magento-training-week-in-amsterdam.html#comments</comments> <pubDate>Tue, 05 Jul 2011 20:11:07 +0000</pubDate> <dc:creator>Ivan Chepurnyi</dc:creator> <category><![CDATA[Magento]]></category> <category><![CDATA[News]]></category> <category><![CDATA[training]]></category> <guid
isPermaLink="false">http://www.ecomdev.org/?p=5419</guid> <description><![CDATA[<p>Our company is happy to announce that there will be a series of <a
title="Magento Advanced Development" href="http://www.ecomdev.org/magento-development-training-programs/advanced" target="_blank">advanced training courses</a> from 2nd till 5th of August in Amsterdam. Training courses are organized by <a
title="Realvine - the e-commerce company" href="http://realvine.nl/" target="_blank">Realvine BV</a> &#8211; our training partner in the Netherlands.</p><p><span
id="more-5419"></span></p><p>The advanced &#8230;</p>]]></description> <content:encoded><![CDATA[<p>Our company is happy to announce that there will be a series of <a
title="Magento Advanced Development" href="http://www.ecomdev.org/magento-development-training-programs/advanced" target="_blank">advanced training courses</a> from 2nd till 5th of August in Amsterdam. Training courses are organized by <a
title="Realvine - the e-commerce company" href="http://realvine.nl/" target="_blank">Realvine BV</a> &#8211; our training partner in the Netherlands.</p><p><span
id="more-5419"></span></p><p>The advanced training week includes 3 different courses on the following topics:</p><h3>Magento Indexers €599,-</h3><p><strong>August 2nd</strong></p><ul><li>Index functionality advantages for Magento</li><li>Index Module Overview</li><li>Custom indexer creation</li><li>Catalog EAV  indexer (Layered Navigation)</li><li>Price Indexers</li><li>Product Visibility Indexers</li><li>Product Inventory Indexer</li><li>Catalog Search Indexer</li></ul><p>You can find more information about the topic by viewing <a
title="Magento Indexes slides from Magento Devs Meetup" href="http://slidesha.re/kOguNv" target="_blank">slides</a> from <a
title="Magento Developers Meetup in Amsterdam on June 17th" href="http://www.ecomdev.org/2011/06/10/magento-developers-meetup-in-amsterdam.html" target="_blank">Magento Developers Meetup in Amsterdam on June 17th</a>, there was one hour seminar concerning it.</p><h3>Behind Checkout &amp; Sales €999,-</h3><p><strong>August 3rd</strong></p><ul><li>Checkout Overview</li><li>Quote, Quote Address &amp; Items</li><li>Totals</li><li>Taxes</li><li>Payment &amp; Transaction</li><li>Shipping Estimation</li><li>Topics of the Second Day</li></ul><p><strong>August 4th</strong></p><ul><li>Sales After Checkout</li><li>Service Models</li><li>Order, Order Address &amp; Items</li><li>Invoices</li><li>Shipments</li><li>Credit Memos</li></ul><p>Really nice course for developers who want to write own payment/shipping module or write a customization to checkout process.</p><h3>Third-Party Integrations €599,-</h3><p><strong>August 5th</strong></p><ul><li>API vs Magento Module</li><li>Stock Management</li><li>Sales Export</li><li>Importing Shipments</li><li>Importing Creditmemos</li></ul><p>You do not know how to write fast and lightweight export / import of data to / from third-party system? Then this course is for you!</p><h3>Special Discounts!</h3><p>If you are attending more than one course, then we have nice special bundled prices for you, that are valid if you register <strong>before July 25th</strong></p><h4>Magento Indexes + Behind Checkout &amp; Sales + Third-Party Integrations <strong>€1999,-</strong></h4><h4>Behind Checkout &amp; Sales + Third-Party Integrations <strong>€1499,-</strong></h4><p
style="text-align: center;"><a
href="https://spreadsheets.google.com/a/ecomdev.org/spreadsheet/viewform?hl=en_US&amp;formkey=dGYydHZUc0xPT0JfdWNHNTU5NmplTGc6MQ#gid=0" target="_blank"><img
class="size-full wp-image-5438 aligncenter" title="Register Now!" src="http://www.ecomdev.org/wp-content/uploads/2011/07/cooltext537598533.png" alt="Register Now!" width="156" height="52" /></a></p> ]]></content:encoded> <wfw:commentRss>http://www.ecomdev.org/2011/07/05/advanced-magento-training-week-in-amsterdam.html/feed</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>CheckItOut! just got better!</title><link>http://www.ecomdev.org/2011/07/04/checkitout-just-got-better.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=checkitout-just-got-better</link> <comments>http://www.ecomdev.org/2011/07/04/checkitout-just-got-better.html#comments</comments> <pubDate>Mon, 04 Jul 2011 13:56:44 +0000</pubDate> <dc:creator>Ivan Chepurnyi</dc:creator> <category><![CDATA[Extensions]]></category> <category><![CDATA[News]]></category> <category><![CDATA[checkitout]]></category> <category><![CDATA[checkout]]></category> <category><![CDATA[extension]]></category> <category><![CDATA[Magento]]></category> <guid
isPermaLink="false">http://www.ecomdev.org/?p=5408</guid> <description><![CDATA[<p>Today a new version of <a
title="CheckItOut!" href="http://www.ecomdev.org/shop/checkout/checkitout.html">CheckitOut!</a> extension is released with stored addresses and smart validation features!<br
/> <span
id="more-5408"></span><br
/> <a
title="CheckItOut!" href="http://www.ecomdev.org/shop/checkout/checkitout.html" target="_blank"><img
class="alignleft" src="http://www.ecomdev.org/shop/media/catalog/product/cache/2/image/188x264/9df78eab33525d08d6e5fb8d27136e95/c/h/checkitout.png" alt="CheckItOut!" width="132" height="185" /></a></p><h4><strong>Changes in release 1.1.1</strong></h4><ul
style="margin-left: 132px;"><li><strong>Stored Addresses</strong><br
/> How many times your customers stop to fulfill order details because they forgot add something to cart? How</li>&#8230;</ul>]]></description> <content:encoded><![CDATA[<p>Today a new version of <a
title="CheckItOut!" href="http://www.ecomdev.org/shop/checkout/checkitout.html">CheckitOut!</a> extension is released with stored addresses and smart validation features!<br
/> <span
id="more-5408"></span><br
/> <a
title="CheckItOut!" href="http://www.ecomdev.org/shop/checkout/checkitout.html" target="_blank"><img
class="alignleft" src="http://www.ecomdev.org/shop/media/catalog/product/cache/2/image/188x264/9df78eab33525d08d6e5fb8d27136e95/c/h/checkitout.png" alt="CheckItOut!" width="132" height="185" /></a></p><h4><strong>Changes in release 1.1.1</strong></h4><ul
style="margin-left: 132px;"><li><strong>Stored Addresses</strong><br
/> How many times your customers stop to fulfill order details because they forgot add something to cart? How many times they were frustrated with empty address data after coming back on checkout page? With our checkout, you will not have this problems anymore. Customer&#8217;s address details will be stored during all the checkout process, even if customer goes back to shopping cart. (Of course except secure information, like passwords, credit card details, etc)</li><li><strong>Smart validation</strong><br
/> This version comes with more smart validation that is invoked only on fields that was just changed by customer and advises him what he is entering wrong on early steps!</li></ul><p>If you already bought or received extension for reviewing purposes, you can download it at &#8220;My Downloads&#8221; section on your <a
title="Customer Account" href="http://www.ecomdev.org/shop/customer/account/">account page</a> in our extensions shop.</p><h4><strong>Check Our <a
title="CheckItOut! Demo" href="http://bit.ly/mf6FTO">Demo Installment</a> for seeing new version in action!</strong></h4> ]]></content:encoded> <wfw:commentRss>http://www.ecomdev.org/2011/07/04/checkitout-just-got-better.html/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Magento 2.0 — What we are waiting for&#8230;</title><link>http://www.ecomdev.org/2011/06/30/magento-2-0-what-we-are-waiting-for.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=magento-2-0-what-we-are-waiting-for</link> <comments>http://www.ecomdev.org/2011/06/30/magento-2-0-what-we-are-waiting-for.html#comments</comments> <pubDate>Thu, 30 Jun 2011 13:26:37 +0000</pubDate> <dc:creator>Ivan Chepurnyi</dc:creator> <category><![CDATA[Magento]]></category> <category><![CDATA[News]]></category> <category><![CDATA[2.0]]></category> <guid
isPermaLink="false">http://www.ecomdev.org/?p=5368</guid> <description><![CDATA[<p>Just want to share with you guys what I learned about Magento 2.0 during Meet Magento Belarus that was in Minsk on June 21st. I really liked <a
title="Dmitriy Soroka LinkedIn profile" href="http://ua.linkedin.com/pub/dmitriy-soroka/3/a34/31b" target="_blank">Dmitriy&#8217;s</a> presentation, he revealed a lot of new interesting insights about the Magento &#8230;</p>]]></description> <content:encoded><![CDATA[<p>Just want to share with you guys what I learned about Magento 2.0 during Meet Magento Belarus that was in Minsk on June 21st. I really liked <a
title="Dmitriy Soroka LinkedIn profile" href="http://ua.linkedin.com/pub/dmitriy-soroka/3/a34/31b" target="_blank">Dmitriy&#8217;s</a> presentation, he revealed a lot of new interesting insights about the Magento 2.0 future and confirmed that Magento Inc. is oriented on improving their product not only from UI but also from development side as well. So what are the major highlights? <span
id="more-5368"></span></p><h3>Magento 2.0 is not the same as Magento 1.x</h3><p>As we all expected before it is not writing a new Magento version from scratch, but that doesn&#8217;t mean system will be the same in structure. They are going to perform a very deep re-factoring on it, and they already did a lot improvements in the system architecture.</p><h3>Component Oriented Modules</h3><p>This is one of my favorite changes that will be in new version. So what the component is for Magento 2.0? It is a set of modules that has high code coupling between each other. So you will be able to disable some components and/or replace it with your own implementation. For organizing relations between components there will be interfaces created that should be implemented in your component.</p><p>So you will be able to disable sales, checkout, customer components and can use only catalog. Or even disable catalog and use Magento as CMS&#8230; You will be able to write your own catalog implementation if you don&#8217;t need all the complexity of core one, but it will not affect other components functionality.</p><p>I really like this improvement, cant wait for seeing it in action&#8230;</p><h3>Good Bye Class Alias</h3><p>There will be no class alias in 2.0, all the objects will be created via createObject() factory by passing full class name. No more definitions of class aliases in configuration.</p><h3>View Modularity</h3><p>Someone likes it, someone not, but it is great improvement in organization of the module structure. Now your default layouts/templates/images/css/js will be in your module. There will be no base design package directory any more, all in one place <em>app/code/[pool]/Namespace/Module/view</em>. I suppose there will be no need to define your layout file in configuration anymore. Just create it and it works!</p><p>As for custom themes there also were added additional restrictions. All the custom themes that are created will have directories with views per module. So if you want to replace some template, layout you need to create directory with the same name as module name (Namespace_Module not Namespace/Module) and place overridden file there.</p><p>For me it seems more consistent from backend developer&#8217;s point of view, but for theme developers it will be a bit tough to change the way of customization. Anyway there will be a documentation for it, so it is not a big deal.</p><h3>Infinite Themes Inheritance</h3><p>One more cool feature for Magento, you will be able to create custom fallbacks for themes depending on any holiday, browser, store, etc&#8230; So you may create more clear theme structure for your customers, finally you will get rid of copy-pasted data.</p><p>Can not wait for it?  It is possible in current Magento version as well, you just need to perform a small customization to core/design_package model, override _fallback method and call parent with additional $fallbackScheme rules.</p><h3>ORM</h3><p>They are planning to support more than one database engine so all the resource model level logic will be re-factored. It will be  a separate service level, so maybe in future they will just switch to Doctrine ORM&#8230; Maybe in Magento 3.0 <img
src='http://www.ecomdev.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><h3>Good Bye EAV?</h3><p>It is not their final decision, but they have plans to replace EAV with more simple key/value implementation for RDBMS and you will have an option to select NoSQL adapter instead of RDBMS. I really appreciate this change, if they finally decide to make it in such a way, because EAV is just adding complexity and performance issues.</p><h3>Integration Tests</h3><p>They are writing integration test (non-isolated) that covers legacy functionality in core. Currently they have about 47% code coverage for Mage_Catalog  and 53% for Mage_Core.</p><p>That&#8217;s great news, because it is important to have some proof that the core code will work after re-factoring. Of course it would be better to use TDD practices in core, but I suppose they can implement them only after covering existing functionality.</p><h3>Different Directory Structure</h3><p>Now there will be only 5 directories in Magento root instead of current 9. All the publicity available files will be placed in &#8220;pub&#8221; directory, instead of current &#8220;media&#8221;, &#8220;js&#8221;, &#8220;skin&#8221;, &#8220;error&#8221;. So you will be able easily place your Magento application files outside of webserver document root. In &#8220;pub&#8221; will be placed &#8220;jslib&#8221; (instead of &#8220;js&#8221; in root), &#8220;error&#8221; (error reporting), &#8220;media&#8221; (uploaded media files), &#8220;skins&#8221; (theme related public files).</p><h3>Magento Contributions</h3><p>Now there will be more clear process of involving community into developing Magento 2.0. We will be able to see all the process in their public Jira and develop for core if we want.<br
/> For instance I signed MCA agreement quite a long time ago and would like to take a part in developing 2.0 features. Hope their Jira and SVN repo will be available soon.</p><p>You can also refer to Dmitriy&#8217;s slides for something that I haven&#8217;t mentioned here (some text in Russian, but mostly English):<br
/> <a
title="Dmitry's Slides from MeetMagento Belarus" href="http://www.meet-magento.by/fileadmin/user_upload/meet-magento.belarus/Magento_2_By_SorokaDmitry.pdf" target="_blank"> http://www.meet-magento.by/fileadmin/user_upload/meet-magento.belarus/Magento_2_By_SorokaDmitry.pdf</a></p> ]]></content:encoded> <wfw:commentRss>http://www.ecomdev.org/2011/06/30/magento-2-0-what-we-are-waiting-for.html/feed</wfw:commentRss> <slash:comments>11</slash:comments> </item> </channel> </rss>
