params= new JRegistry(); $this->params->loadString($plugin->params, 'JSON'); $this->_cacheEnabled = $this->params->get('cache_enabled'); if ($this->_cacheEnabled === null) $this->_cacheEnabled == 1; $this->_autoflush = $this->params->get('autoFlush'); if ($this->_autoflush === null) $this->_autoflush = 1; $this->_autoflush3rdParty = $this->params->get('autoFlush-ThirdParty'); if ($this->_autoflush3rdParty === null) $this->_autoflush3rdParty = 1; $this->_autoflushClientSide = $this->params->get('autoFlush-ClientSide'); if ($this->_autoflushClientSide === null) $this->_autoflushClientSide = 0; } /** * Heartbeat cache checking function. Will also monitor $_GET for the jSGCache parameter * (pressing the purge cache button in admin) * * * @access public * @return null */ public function onAfterInitialise() { if (!$this->_cacheEnabled || $this->_isBlacklisted($this->_applicationPath)) { JResponse::setHeader('X-Cache-Enabled','False',true); return; } if ($this->_cacheEnabled) { JResponse::allowCache(true); JResponse::setHeader('X-Cache-Enabled','True',true); } //Init the application url $this->_applicationPath = str_replace(array('administrator/index.php','index.php'),'',str_replace($_SERVER['DOCUMENT_ROOT'],'',$_SERVER['SCRIPT_FILENAME'])); //Check for any admin action and proceed to flushMonitor and 3rd party plugins if ( isset($_POST['task']) || isset($_GET['task']) || isset($_GET['cart_virtuemart_product_id'])) { $this->_flushMonitor(); if ($this->_autoflush3rdParty) $this->_monitorThirdPartyPlugins(); } //Check if we have a logged in user and enable cache bypass cookie 'task' => string 'user.login' $user = JFactory::getUser(); if (!$user->guest || (isset($_POST['task']) && preg_match('/login/i', $_POST['task']))) { $_POST[JSession::getFormToken()] = 1; //Force the correct token, since the login box on the page is cached with the 1st visitors' token //Enable the cache bypass for logged users by setting a cache bypass cookie setcookie('jSGCacheBypass',1,time() + 6000,'/'); } if ($user->guest || (isset($_POST['task']) && $_POST['task'] == 'user.logout')) { //Remove the bypass cookie if not a logged user if (isset($_COOKIE['jSGCacheBypass'])) setcookie('jSGCacheBypass',0, time() - 3600,'/'); } // Handle purge button press when get has jSGCache=purge, but only in admin with a logged user if(isset($_GET['jSGCache']) && $_GET['jSGCache'] == 'purge' && JFactory::getApplication()->isAdmin() && !$user->guest ) $this->_purgeCache(true); } /** * Admin panel icon display * * @access public * @param string $context * @return array */ public function onGetIcons( $context ) { return array(array( 'link'=>'?jSGCache=purge', 'image'=>'refresh', 'text'=>JText::_('Purge jSGCache'), 'id'=>'jSGCache' )); } /** * Calls the cache server to purge the cache * * @access public * @param string|bool $message Message to be displayed if purge is successful. If this param is false no output would be done * @return null */ private function _purgeCache( $message = true ) { $purgeRequest = $this->_applicationPath . '(.*)'; // Construct the PURGE request $hostname = str_replace( 'www.', '', $_SERVER['HTTP_HOST'] ); $purge_method = "PURGE"; $cacheServerSocket = fsockopen($hostname, 80, $errno, $errstr, 2); if(!$cacheServerSocket) { JError::raise(E_ERROR,500,JText::_('Connection to cache server failed!')); JError::raise(E_ERROR,500,JText::_($errstr ($errno))); return; } $request = "$purge_method {$purgeRequest} HTTP/1.0\r\nHost: {$_SERVER['SERVER_NAME']}\r\nConnection: Close\r\n\r\n"; if (preg_match('/^www\./',$_SERVER['SERVER_NAME'])) { $domain_no_www = preg_replace('/^www\./', '', $_SERVER['SERVER_NAME']); $request2 = "$purge_method {$purgeRequest} HTTP/1.0\r\nHost: {$domain_no_www}\r\nConnection: Close\r\n\r\n"; } else $request2 = "$purge_method {$purgeRequest} HTTP/1.0\r\nHost: www.{$_SERVER['SERVER_NAME']}\r\nConnection: Close\r\n\r\n"; fwrite($cacheServerSocket, $request); $response = fgets($cacheServerSocket); fclose($cacheServerSocket); $cacheServerSocket = fsockopen($hostname, 80, $errno, $errstr, 2); fwrite($cacheServerSocket, $request2); fclose($cacheServerSocket); if($message !== false) { if(preg_match('/200/',$response)) { if ($message === true) JFactory::getApplication()->enqueueMessage(JText::_('SG Cache Successfully Purged!')); else JFactory::getApplication()->enqueueMessage(JText::_( $message )); } else { JError::raise(E_NOTICE,501, JText::_('SG Cache: Purge was not successful!')); JError::raise(E_NOTICE,501, jText::_('Error: ' . $response)); } } } /** * Check if url is in caching blacklist * * @param string $applicationPath * * @return bool */ private function _isBlacklisted($applicationPath) { $blacklistArray = explode("\n",$this->params->get('blacklist')); $blacklistRegexArray = array(); $indexIsBlacklisted = false; foreach($blacklistArray as $key=>$row) { $row = trim($row); if ($row != '/' && $quoted = preg_quote($row,'/')) $blacklistRegexArray[$key] = $quoted; if ($row == '/') $indexIsBlacklisted = true; } if ($indexIsBlacklisted && $_SERVER['REQUEST_URI'] == $applicationPath) return true; if (empty($blacklistRegexArray)) return false; $blacklistRegex = '/('.implode('|',$blacklistRegexArray) . ')/i'; return preg_match($blacklistRegex, $_SERVER['REQUEST_URI']); } /** * 3rd party plugin monitor * * @access private * @return null */ private function _monitorThirdPartyPlugins() { // Kunena & K2 if ($this->params->get('autoFlush-ThirdParty') == 1 && isset($_POST['option']) && ($_POST['option']=='com_k2' || $_POST['option' ]== 'com_kunena')) { $this->_purgeCache(false); } // VirtueMart if ( (isset($_POST['option']) && $_POST['option'] == 'com_virtuemart') || ( isset($_GET['option']) && $_GET['option'] == 'com_virtuemart' ) || isset($_GET['cart_virtuemart_product_id']) ) { if($this->params->get('autoFlush-ThirdParty') == 1) $this->_purgeCache(false); } } /** * Action monitor * * @access private * @return null */ private function _flushMonitor() { $user = JFactory::getUser(); if ((!JFactory::getApplication()->isAdmin() && !$this->_autoflushClientSide) || $user->guest) return; $autoflush = $this->params->get('autoFlush'); if ($autoflush === null) $autoflush = 1; if (isset($_POST['task']) && $_POST['task'] && !in_array($_POST['task'],self::$_ignoreTasks) && $autoflush == 1) $this->_purgeCache(false); } } Community Support Forums - Sellacious
  Sunday, 17 March 2019
  5 Replies
  3.5K Visits
  Subscribe
Hi,
I am trying to setup hyperlocal. The option available down till area and zipcode levels. I think, I am missing some setting.
Any help will be highly appreciated.

Thanks
Arshad
5 years ago
·
#3095
Accepted Answer
Hello All,

1. Hyperlocal Setup:-
This setup can be done from Seller Panel on pressing Hyper local Settings tab. Although, there is a dropdown button to select the Zip code in Shipping Availability Section. But, the selection in this dropdown become clear on pressing the Save Button.

I have added this to our pipeline and this will be fixed in the next release of sellacious.


2. Shipping Rules:-
This setup can be done from Super Admin Panel on pressing Shop>> Shipping Rules. Here two approach provided to define shipping rules based on zip codes. One is through the Filter tab. and another is through Shipping Rule tab by uploading CSV files containing this rule. But, the first one only works for district level and the second one calculates prices according to the weight ranges; this also ignores the Country and State Column and does not have District Column.

The first step for which you said only works for the district level, I have checked it on my local and it's working. Please check, if you have added any filter for the ZIP code in global configuration > Shipment.
And for the Slabs, what are using for the Country/state (their name?). If yes, please use their ISO codes. (Like for India use IN)
Most of the countries don't have districts, they have cities or counties. And 1 district can have multiple ZIP codes, so sellacious preferred ZIP codes selection in shipping rules csv. example if you want to add shipping for a district and if that district has 3 zip codes just add 3 rows in the sheet of those zip codes.

I hope this helps.

Thank You



Hi Vijaye,
Thanks a lot for kind cooperation. The second issue got fixed. When will the next version be released? I am desperately waiting for the fist issue to be fixed.

Regards,
Arshad
5 years ago
·
#3073
Hello Arshad,

Can you please explain more about this issue?

Thank You
5 years ago
·
#3085
Hello Arshad,

Can you please explain more about this issue?

Thank You



Hello Vijaya,
I am pointing to the following two issues:-
1. Hyperlocal Setup:-
This setup can be done from Seller Panel on pressing Hyper local Settings tab. Although, there is dropdown button to select the Zip code in Shipping Availability Section. But, the selection in this dropdown become clear on pressing the Save Button.
2. Shipping Rules:-
This setup can be done from Super Admin Panel on pressing Shop>> Shipping Rules. Here two approach provided to define shipping rules based on zip codes. One is through Filter tab. and another is through Shipping Rule tab by uploading csv files containing this rule. But, the first one only works for district level and the second one calculates prices according to the weight ranges; this also ignores the Country and State Column and does not have District Column.

Thanks & Regard,
Arshad
5 years ago
·
#3086
The same thing happens to me and I do not know how to solve it
5 years ago
·
#3092
Hello All,

1. Hyperlocal Setup:-
This setup can be done from Seller Panel on pressing Hyper local Settings tab. Although, there is a dropdown button to select the Zip code in Shipping Availability Section. But, the selection in this dropdown become clear on pressing the Save Button.

I have added this to our pipeline and this will be fixed in the next release of sellacious.


2. Shipping Rules:-
This setup can be done from Super Admin Panel on pressing Shop>> Shipping Rules. Here two approach provided to define shipping rules based on zip codes. One is through the Filter tab. and another is through Shipping Rule tab by uploading CSV files containing this rule. But, the first one only works for district level and the second one calculates prices according to the weight ranges; this also ignores the Country and State Column and does not have District Column.

The first step for which you said only works for the district level, I have checked it on my local and it's working. Please check, if you have added any filter for the ZIP code in global configuration > Shipment.
And for the Slabs, what are using for the Country/state (their name?). If yes, please use their ISO codes. (Like for India use IN)
Most of the countries don't have districts, they have cities or counties. And 1 district can have multiple ZIP codes, so sellacious preferred ZIP codes selection in shipping rules csv. example if you want to add shipping for a district and if that district has 3 zip codes just add 3 rows in the sheet of those zip codes.

I hope this helps.

Thank You
5 years ago
·
#3095
Accepted Answer
Hello All,

1. Hyperlocal Setup:-
This setup can be done from Seller Panel on pressing Hyper local Settings tab. Although, there is a dropdown button to select the Zip code in Shipping Availability Section. But, the selection in this dropdown become clear on pressing the Save Button.

I have added this to our pipeline and this will be fixed in the next release of sellacious.


2. Shipping Rules:-
This setup can be done from Super Admin Panel on pressing Shop>> Shipping Rules. Here two approach provided to define shipping rules based on zip codes. One is through the Filter tab. and another is through Shipping Rule tab by uploading CSV files containing this rule. But, the first one only works for district level and the second one calculates prices according to the weight ranges; this also ignores the Country and State Column and does not have District Column.

The first step for which you said only works for the district level, I have checked it on my local and it's working. Please check, if you have added any filter for the ZIP code in global configuration > Shipment.
And for the Slabs, what are using for the Country/state (their name?). If yes, please use their ISO codes. (Like for India use IN)
Most of the countries don't have districts, they have cities or counties. And 1 district can have multiple ZIP codes, so sellacious preferred ZIP codes selection in shipping rules csv. example if you want to add shipping for a district and if that district has 3 zip codes just add 3 rows in the sheet of those zip codes.

I hope this helps.

Thank You



Hi Vijaye,
Thanks a lot for kind cooperation. The second issue got fixed. When will the next version be released? I am desperately waiting for the fist issue to be fixed.

Regards,
Arshad
  • Page :
  • 1
There are no replies made for this post yet.
Be one of the first to reply to this post!
  • +1 (408) 821-8283
  • Email hello@sellacious.com