Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Last revision Both sides next revision
litespeed_wiki:cache:litemage:troubleshooting:exclude-price-block-from-login-user [2017/12/11 20:28]
Jackson Zhang created
litespeed_wiki:cache:litemage:troubleshooting:exclude-price-block-from-login-user [2017/12/18 19:20]
Jackson Zhang
Line 1: Line 1:
-====== ​How to exclude price block from the logged ​in users? ======+====== ​Can you Exclude the Price Block from public Cache for Only the Logged-in Users? ======
  
-The Setup is+You might have a situation where pricing varies per user and is fetched ​via API from an external ERP system. This system only applies to logged-in users. Users who are logged out should not see pricing at all.
- 1. Hide prices for all "not logged in" customers +
- 2. For logged in users: Fetch product prices ​via API from external ERP system ​for each user.+
  
-How to exclude the price block "​Mage_Catalog_Block_Product_View_Type_Simple"​ And "​Mage_Catalog_Block_Product_Price"​ from template: 
-"​frontend/​base/​default/​template/​rodin/​product/​price.phtml"​ so that the logged in users see their own prices directly from API call and not cache? 
-{{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block.png?​800 |}} 
  
-How do you price for logged in users? are they different prices based on customer group? Or are they different for each user? +For non-logged-in user: 
-Currently, ​litemage ​can only do cache based on customer group, not individual users.+{{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block-loginrequired.png?​600 |}} 
 +{{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block-loginrequired-header.png?400 |}}
  
-For logged in users, you can make those price block as private ESI block and not cacheable. but this may need custom changecannot directly do by configurationBecause ​for non-logged-in users you do not want to have this logic.+For the logged-in user: 
 +{{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block-logged-in.png?​600 |}} 
 +{{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block-loginrequired-header.png?​400 |}} 
 + 
 +On product page click "​login"​ to see the discounted prices from API.  Fetch the prices directly from a external API solution to have separate customer pricing. There are two customer groups: group id 1 and group id 2. You would want the API price update for only one customer group 1 and store 1, but not group 2How?  
 + 
 +Caching pages with this kind of setup is tricky. LiteMage is able to cache different prices per customer group, ​but not per individual customers. We cannot punch a hole for price block, however, we can simply make the whole page either not cache, or privately cache. For this example, we would like to make customer group 1 logged-in user and store ID 1 to be private cache. 
 + 
 +To enable private cache, you will need to add  ''​CacheLookup private on''​ in .htaccess after ''​LiteMage on''​looks like the following:​ 
 +  <​IfModule Litespeed>​  
 +  LiteMage on  
 +  CacheLookup private on 
 +  </​IfModule>​ 
 +   
 +Also you will need to change LiteMage Esi.php code by adding the following to app/​code/​community/​Litespeed/​Litemage/​Helper/​Esi.php 
 +to  ''​protected function _getDefaultEnvCookieValue()''​ line 1160 - 1164 within ''​if ($diffGrp = $this->​_config->​getConf(Litespeed_Litemage_Helper_Data::​CFG_DIFFCUSTGRP))''​ 
 + 
 + 
 +  /* customized code added by for case 1 */ 
 +          if ($currCustomerGroup == 1 && $currStoreId == 1) { 
 +                    $this->​_cacheVars['​flag'​] |= self::​CHBM_PRIVATE;​ 
 +          } 
 +  /* end of customized code change */ 
 + 
 +The final code looks like: 
 + 
 +   ​protected function _getDefaultEnvCookieValue() 
 +    { 
 +    ... 
 +    ... 
 +                 if ($diffGrp = $this->​_config->​getConf(Litespeed_Litemage_Helper_Data::​CFG_DIFFCUSTGRP)) { 
 +                        // diff cache copy per customer group 
 +                        $currCustomerGroup = Mage::​getSingleton('​customer/​session'​)->​getCustomerGroupId() ; 
 +                        if ( Mage_Customer_Model_Group::​NOT_LOGGED_IN_ID != $currCustomerGroup ) { 
 +                                if ($diffGrp == 1) // diff copy per group 
 +                                        $default['​cgrp'​] = $currCustomerGroup ; 
 +                                elseif ($diffGrp == 2)    // diff copy for logged in user 
 +                                        $default['​cgrp'​] = '​in'​ ; 
 +                                elseif ($diffGrp == 3) { 
 +                                        $cgset = $this->​_config->​getConf(Litespeed_Litemage_Helper_Data::​CFG_DIFFCUSTGRP_SET);​ 
 +                                        if (isset($cgset[$currCustomerGroup])) 
 +                                                $default['​cgrp'​] = $cgset[$currCustomerGroup];​ 
 +                                } 
 +                /* customized code added for case 1 */ 
 +                                if ($currCustomerGroup == 1 && $currStoreId == 1) { 
 +                                        $this->​_cacheVars['​flag'​] |= self::​CHBM_PRIVATE;​ 
 +                                //      $this->​setNotCacheable();​ 
 +                                } 
 +                /* end of customized code change */ 
 +                        } 
 +                } 
 +  ... 
 +  ... 
 +  } 
 + 
 +So for the logged-in ​user with group 1 and store 1, it will be served from private cache and private ESI blocks. The rest users will be served from public cache with private ESI blocks. 
 + 
 +Updated LiteMage configuration:​ 
 +  Separate Cache Copy per Customer Group -> Yes 
 +   
 +After the above change, ​you should be able to found the pages are being served from LiteMage private cache. 
 + 
 +{{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block-logged-in.png?​600 |}} 
 +{{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block-logged-in-privatecache-header.png?​600 |}} 
 + 
 +You should make a backup of the file ''​app/​code/​community/​Litespeed/​Litemage/​Helper/​Esi.php''​ since it is a customized solution and will be overided by LiteMage upgrade next time. You should copy back the custommized solution when you complete your next upgrade.
  
-This will require a custom project to achieve what you want if you do have different pricing at each user level. 
  • Admin
  • Last modified: 2017/12/18 19:37
  • by Lisa Clarke