Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
litespeed_wiki:cache:litemage:troubleshooting:exclude-price-block-from-login-user [2017/12/18 16:16]
Jackson Zhang
litespeed_wiki:cache:litemage:troubleshooting:exclude-price-block-from-login-user [2017/12/18 19:37] (current)
Lisa Clarke
Line 1: Line 1:
-====== Can you Exclude the Price Block from public ​Cache for Only the Logged-in Users? ======+====== Can you Exclude the Price Block from Public ​Cache for Only the Logged-in Users? ======
  
-You 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.+You might have a situation where pricing varies per logged-in ​user and is fetched via API from an external ERP system. ​Under this systemlogged-out ​users would see no pricing at all.
  
- +What a non-logged-in user would see:
-For non-logged-in user:+
 {{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block-loginrequired.png?​600 |}} {{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block-loginrequired.png?​600 |}}
-{{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block-loginrequired-header.png?​600 |}}+{{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block-loginrequired-header.png?​400 |}}
  
-For the logged-in user:+What a logged-in user would see:
 {{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block-logged-in.png?​600 |}} {{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block-logged-in.png?​600 |}}
-{{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block-loginrequired-header.png?​600 |}}+{{ :​litespeed_wiki:​cache:​litemage:​troubleshooting:​exclude-price-block-loginrequired-header.png?​400 |}}
  
-but if you check the headerthe logged-in ​page is still served from litemage public cacheYou want to exclude the Price Block from public Cache for Only the Logged-in UsersHow?+Here's how it should work: When a user clicks ''​login''​that customer'​s discounted prices would be fetched directly from an external API solution. We would set this up through two customer groups: group ID 1, which would be for logged-in ​users, and group ID 2, for everyone elseThe API update would happen ​for everyone ​in group 1 and store 1, but not group 2.
  
-Caching pages with this kind of setup is tricky.+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 the price block, however, we can simply make the whole page either not cached, or privately cached. For this example, we would like to make customer group ID 1 (logged-in users) and store ID 1 to be privately cached.
  
-LiteMage ​is able to cache different prices ​per customer group, ​but not per individual customers.+To enable private cache, you will need to add  ''​CacheLookup private on''​ in ''​.htaccess''​ after ''​LiteMage ​on'',​ as follows: 
 +  <​IfModule Litespeed>​  
 +  LiteMage on  
 +  CacheLookup private on 
 +  </​IfModule>​ 
 +   
 +Also you will need to modify LiteMage'​s ''​app/​code/​community/​Litespeed/​Litemage/​Helper/​Esi.php''​. In ''​protected function _getDefaultEnvCookieValue()'',​ line 1160 - 1164 within ''​if ($diffGrp = $this->​_config->​getConf(Litespeed_Litemage_Helper_Data::​CFG_DIFFCUSTGRP))''​ add the following:​ 
 + 
 +  /* 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 so: 
 + 
 +   ​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;​ 
 +                                } 
 +                /* end of customized code change */ 
 +                        } 
 +                } 
 +  ... 
 +  ... 
 +  } 
 + 
 +So for the logged-in user in customer group 1 and store 1product pages will be served from private cache and private ESI blocks. All other users will be served from public cache with private ESI blocks. 
 + 
 +Update the LiteMage configuration:​ 
 +  Separate Cache Copy per Customer Group -> Yes 
 +   
 +After the above change, you should be able to see that 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 |}}
  
-For logged-in users, you could make the price block into a private ESI block and configure it to be uncacheable,​ but you can't treat the block differently for logged-in and non-logged-in users. A custom solution would be required. 
  
  • Admin
  • Last modified: 2017/12/18 16:16
  • by Jackson Zhang