Hole punching with Magento Enterprise Edition full page cache

Magento Full Page CacheIn my last article on this topic I explained how Magento Enterprise Edition Full Page Cache works, and how to use performance boost it provides at your own controller action. In the second part of this mini article series, I will try to explain concept of Enterprise_PageCache containers used for allowing dynamic behavior for certain blocks, even though page is served from full page cache.

Continue reading

Catalog price rules not applied when creating order from Magento admin

Magento BugEven though I'm in love with the platform, as it turns out, I tend to blog about Magento bugs quite often. I like to believe this is a good thing, because besides helping other Magento developers, finding and fixing bugs makes our favorite ecommerce platform better. It has nothing to do with frustration couple of days debugging session can cause, I ensure you. In this article I'm about to explain and provide workaround for bug affecting all Magento versions (including latest Magento CE 1.9.0.1 at the time of writing), one that's causing catalog price rules not being applied to final price and totals not getting calculated correctly when creating orders from Magento admin, all this under specific and hard to reproduce circumstances. Honestly, this is probably the ugliest bug I've ever seen in my coding career, largely due to fact that client's bug report is usually that catalog price rules prices revert when creating orders from Magento admin, but only sometimes and without any pattern.

Continue reading

Routing in Magento - tracing single HTTP request

Magento routingRouting is an essential part of every MVC, Magento is not an exception to this rule. In order to understand how Magento routing works, it is necessary to get acquainted with execution flow that leads to certain request getting (or not getting) dispatched. It goes without saying that this knowledge comes in handy when you need to explain that 404 being thrown.

Continue reading

Bug behind before/after="Mage_Adminhtml" in Magento

Magento Standard Router BugSince Magento CE 1.3.0 version, creating Magento admin controller required you to specify before="Mage_Adminhtml" or after="Mage_Adminhtml" attribute for your node at admin/routers/adminhtml/args/modules XML Path, depending on type of behavior you want to achieve. Like me, you probably have doubts on why this is necessary, and what is the background of this requirement? Simple answer would be that without it, it simply doesn't work. More precisely, Magento hits you right in the schnoz with 404 after you try accessing admin controller in question, if you don't set one of these attributes at your node. In this article I'll do my best to explain bug in Magento standard router causing this behavior, one that somehow managed to get packaged with last 25+ Magento CE versions without being noticed.

Continue reading

Using Magento Enterprise Edition full page cache at your own controller action

Magento Full Page CacheAs a number one open source eCommerce platform with several years of development behind it, I'm sure you'll agree that Magento is one of the most complex pieces of PHP software ever created. Logical consequence of complexity Magento brings to the table is relatively low performance when compared to custom made eCommerce solutions. In order to improve this situation, Magento stacked several layers of caching one on top of another, with full page cache being the topmost layer, and one that's exclusive to Magento Enterprise Edition. Having power of full page cache nearby is great, but I must point out that by creating custom controller action in Magento you don't automatically benefit from performance boost FPC offers. In this article I'll outline how Magento Enterprise Edition full page cache works, and what you need to do in order to take advantage of features it provides at your custom controller action.

Continue reading

Adding layered navigation to custom controller action in Magento

Cart LayersIn my last article I tried to outline Magento way of displaying custom product collection using custom controller action at store frontend. I also made a promise to write a follow-up on the topic covering adding layered navigation to custom controller action with goal of making your product collection easier to navigate. For purposes of writing this article, I'll shift my focus back to Magento extension for managing catalog price rules based sale items, code I originally wrote to demonstrate adding custom layered navigation filter in Magento in one of my previous articles. As a part of this extension, I also created custom controller action used to display only sale items and added the layered navigation to that controller action, something I'll do my best to explain here.

Continue reading

Displaying custom product collection at Magento frontend

Product collectionDisplaying list of products somewhere at store fronted is very common task when developing for Magento. Whether it's featured products, sale items or the new arrivals, most developers take the custom block - custom .phtml approach. To be honest, there's nothing wrong with that if you have a good reason to roll your own solution, but 99% of the time, Magento way should be the only way. With that being said, idea behind this article is demonstrating Magento way of displaying custom product collection at store frontend by using Magento built-in blocks and templates combined with a little bit of layout magic.

Continue reading

Create a custom layered navigation filter for filtering sale products in Magento

NavigationRetail store project I'm currently involved with heavily relies on Magento catalog price rules to offer pre-cart discounts on selected articles. Even though Magento CatalogRule module does most heavy lifting when it comes to placing products on sale, code allowing logical organization and filtering for sale products at store frontend is left to the solution provider's imagination. In this article I'll cover the filtering part of this scenario, specifically how to make it possible for customer to filter sale and not on sale products while browsing category view pages. There are couple of ways to tackle this problem, with creating custom layered navigation filter being probably the most logical approach.

Continue reading

Catalog price rules not being applied after product save in Magento CE 1.8.0.0

Magento LogoMagento project I'm currently in charge for has had the catalog price rules not sticking issue for some time now. This issue has been first reported as catalog price rules being unapplied on their own without any obvious pattern. Since, due to nature of it's catalog, catalog price rules are very backbone of the store in question, situation where prices change on their own was certainly problematic. Even though this Magento project wasn't of this edition or version, it was using Mage_Catalogrule module that was shipped with Magento Community Edition 1.8.0.0. Later research revealed that this issue has been fixed in Magento CE 1.8.1.0 (and all Magento editions and version derived from it), but immediate upgrade wasn't viable alternative at the time because I didn't know what causes this issue and has it been fixed upstream. Allow me to share debug path I had to take to get to the bottom of this.

Continue reading

How to make specific WordPress posts visible only when accessed directly

Wordpress Logo BlueRecently I had to to publish an article in a way that common site visitors aren't aware of it's existence. Basically this article had to be excluded from all WordPress loops and visible only when accessed directly. General idea of solution presented in this article is to use pre_get_posts hook to alter WP_Query. Goal is excluding hidden post on frontend, area that isn't single post and when area is single post other than hidden post it self. Now allow me to share code snippet that can be used for this purpose.

Continue reading