Magento Redis read error on connection
Magento read error on connection when using Redis. If you are using Redis as cache in Magento and read timeout is not specified, you may get this error. Below is how it looks in the error report.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | read error on connection Trace: #1 lib/Mage/Cache/Backend/Redis.php(210): Credis_Client->hGet('zc:k:0cd_FPC_DE...', 'd') #2 lib/Zend/Cache/Core.php(303): Mage_Cache_Backend_Redis->load('0cd_FPC_DESIGN_...', false) #3 lib/Varien/Cache/Core.php(158): Zend_Cache_Core->load('FPC_DESIGN_EXCE...', false, false) #4 app/code/core/Mage/Core/Model/Cache.php(379): Varien_Cache_Core->load('FPC_DESIGN_EXCE...') #5 app/code/core/Enterprise/PageCache/Model/Processor.php(185): Mage_Core_Model_Cache->load('FPC_DESIGN_EXCE...') #6 app/code/core/Enterprise/PageCache/Model/Processor.php(146): Enterprise_PageCache_Model_Processor->_getDesignPackage() #7 app/code/core/Enterprise/PageCache/Model/Processor.php(108): Enterprise_PageCache_Model_Processor->_createRequestIds() #8 app/code/core/Mage/Core/Model/Cache.php(703): Enterprise_PageCache_Model_Processor->__construct() #9 app/code/core/Mage/Core/Model/Cache.php(685): Mage_Core_Model_Cache->_getProcessor('Enterprise_Page...') #10 app/code/core/Mage/Core/Model/App.php(340): Mage_Core_Model_Cache->processRequest() #11 app/Mage.php(683): Mage_Core_Model_App->run(Array) #12 /var/www/source/index.php(87): Mage::run('', 'store') |
The solution (atleast for us) was to add a read_timeout config option in app/etc/local.xml where you have configured Redis cache for Magento.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <cache> <backend>Mage_Cache_Backend_Redis</backend> <backend_options> <server>127.0.0.1</server> <port>6379</port> <persistent></persistent> <database>0</database> <password></password> <force_standalone>0</force_standalone> <connect_retries>1</connect_retries> <read_timeout>10</read_timeout><!--add this--> <lifetimelimit>57600</lifetimelimit> <compress_data>0</compress_data> </backend_options> </cache> |
HTH!
Magento enterprise: show top mini cart when product is added to cart
Magento Enterprise comes with a top header mini-cart, which displays all the items with their custom options added to cart, when you click on My Cart in the header. This is a good feature, but what if you want to show this mini-cart each time a product is added, without clicking on that link? I will show you here how to display your mini cart automatically when a product is added to cart.
Open your cartheader.php file, which is located at:
app/design/frontend/enterprise/YOUR_DESIGN/template/checkout/cart/cartheader.phtml
In the last few lines of this file, you should find the below line in javascript:
1 2 3 | Enterprise.TopCart.initialize('topCartContent');
// Below can be used to show minicart after item added
// Enterprise.TopCart.showCart(7); |
Replace the last line, //Enterprise.TopCart.showCart(7); with the below lines:
1 2 3 4 5 6 7 8 9 | jQuery( document ).ready(function() {
if( jQuery('#messages_product_view').children().length ){
if(jQuery('#messages_product_view').children().children().attr('class') == 'success-msg') {
if(jQuery('.success-msg ul li span').text().indexOf('was added to your shopping cart') > -1) {
Enterprise.TopCart.showCart(7);
}
}
}
}); |
So whenever in the page, there will be an element with ID “#messages_product_view” and it has a children with class “success-msg” and it has a ul/li/span with text containing “was added to your shopping cart”, we will show the top mini-cart. This is only true when an product is added to shopping cart.
You can also show top mini-cart without this jquery hack, by making a new module in Magento and catch the event when product is added to cart. Then programmatically clicking the top mini cart to display it. But according to me this small piece of code is better than to create whole new Magento module.
HTH!
Magento remove session id from URL
Magento displays session ID in url, something like:
1 | http://loca.lho.st?__SID=2wewesfdgfsdm |
You can remove this in two ways:
1. Go to your Magento admin panel > System > Configuration > Web.
Under Session Validation Settings, set “No” against label “Use SID on the Frontend”.
If this doesn’t work, then move to option two below.
2. Edit the file at app/code/core/Mage/Core/Model/App.php (somewhere around line 222),
1 | protected $_useSessionInUrl = true; |
Change that value to “false”. That should now prevent session IDs appearing in URL.
Magento debug XML (layout, config) files
In Magento if there is any error in XML file, Magento silently ignores it and continues further parsing. So you never get to know where is the actual error and makes it difficult to debug. You can’t even do any logging in XML file and also Magento don’t tell that error is in XML. It makes debugging almost impossible and ends up wasting in hours to find some silly mistake.
But we can know if there is any error in XML (layout.xml or config.xml or any xml file) if you use below code in the controller action which is being called. The browser will display WHOLE XML code and if it encounters any error in it, simply gives where is the error in the XML tree.
If you are trying to load let’s say Product View page, then put this code in Mage/Catalog/controllers/ProductController.php file’s viewAction() method temporarily to display whole XML tree to find out error(s) if any. As we are saying to display the page as XML, the page will break if it finds any mal-formed XML code and will show where is the mistake.
1 2 | header("Content-Type: text/xml");
echo Mage::app()->getConfig()->getNode()->asXml();exit; |
If you want to debug Layout Handles only, you can just check by this code:
1 2 | header("Content-Type: text/xml");
echo Mage::app()->getLayout()->getUpdate()->getHandles();exit; |
Magento delete empty categories and sub-categories
Remove all empty categories and sub-categories in Magento. When there are empty categories, the website shows empty page in those categories in frontend. Create a file in the magento root, I will name it rmvEmptyCats.php, with following code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | require "app/Mage.php";
umask(0);
Mage::app();
$categoryCollection = Mage::getModel('catalog/category')->getCollection()
->addFieldToFilter('level', array('gteq' => 2)); //greater than root category id
foreach($categoryCollection as $category) {
if ($category->getProductCount() === 0) {
$category->delete();
}
}
echo 'Empty Categories Deleted!'; |
Now you can easily run it by navigating to http://loca.lho.st/rmvEmptyCats.php and wait for the message Empty Categories Deleted!
Note that this is going to DELETE those categories with zero product count.
Welcome to my Blog
Certifications
Honor
Recognition
Contributions
Categories
- Apache (2)
- ChatGPT (1)
- Domain name (2)
- eCommerce (2)
- htaccess (1)
- Humor (3)
- Instagram API (1)
- jQuery (4)
- JSON (1)
- Linux (10)
- Magento (142)
- Magento admin (58)
- Magento Certification (5)
- Magento error (13)
- Magento frontend (68)
- Magento Imagine (2)
- Magento Interview (5)
- Magento Master (2)
- Magento2 (10)
- Mobile (1)
- MySQL (7)
- OpenAI (1)
- OroCRM (2)
- Performance (2)
- PHP (8)
- Prototype JS (3)
- Security (4)
- Wordpress (3)
- XML (2)