Refresh Full page cache for autonav when updates from backend
Permalink
Hello All,
I am using concrete5.7.5.2. I have enabled all cache settings from the 'Cache & Speed Settings'. Now the issue is when i change the 'name' attribute of autonav from sitemap, it will not reflect on front side. so i have made some custom code to refresh the cache.
For refresh cache i have made changes in core file.
Concrete\Core\Block\BlockController.php
Here is my custom function code for 'CacheBlockClearOn'.
Here i have used 'on_page_version_approve' event and call my custom function 'CacheBlockClearOn'. But the problem is, i have enabled full page caching, so on_start does not run. If i disable full page caching my custom function is work.
So I want to know place which is always called to get this event work. Or is there something that i missed?
Any help and suggestion would be appreciated.
Thanks.
I am using concrete5.7.5.2. I have enabled all cache settings from the 'Cache & Speed Settings'. Now the issue is when i change the 'name' attribute of autonav from sitemap, it will not reflect on front side. so i have made some custom code to refresh the cache.
For refresh cache i have made changes in core file.
Concrete\Core\Block\BlockController.php
/** * Call custom function using event listener */ public function on_start() { parent::on_start(); // TODO: Change the autogenerated stub Events::addListener('on_page_version_approve', array($this, 'CacheBlockClearOn')); }
Here is my custom function code for 'CacheBlockClearOn'.
public function CacheBlockClearOn() { $bt = BlockType::getByHandle('autonav'); $db = Loader::db(); // Get the collection ID, collection version ID, And handler from the block ID $bRows=$db->getAll('select cvb.cID, cvb.cvID, cvb.arHandle, cvb.bID FROM CollectionVersionBlocksOutputCache cvb inner join blocks bks on bks.bID = cvb.bID where cvb.btCachedBlockOutputExpires !=0 AND bks.btID='.$bt->getBlockTypeID().' AND bks.btCachedBlockRecord !="" AND bks.bFilename !="" '); foreach($bRows as $row){ //Get the latest version of current collection $cvRows=$db->GetRow('select cv.cvID FROM collectionversions cv where cvIsApproved = 1 AND cv.cID='.$row['cID'].' ORDER BY cv.cvID DESC LIMIT 1'); $cIDs[] = $row['cID']; //check for the current version is greater than cache version if($cvRows['cvID'] > $row['cvID']){ //if current version is greater than cache version update expiration date for all blocks $v = array( $row['arHandle'], $row['bID']); $db->Execute( 'update CollectionVersionBlocksOutputCache set btCachedBlockOutputExpires = 0 where cID IN ('.implode(',', $cIDs).') and arHandle = ? and bID = ?',
Viewing 15 lines of 21 lines. View entire code block.
Here i have used 'on_page_version_approve' event and call my custom function 'CacheBlockClearOn'. But the problem is, i have enabled full page caching, so on_start does not run. If i disable full page caching my custom function is work.
So I want to know place which is always called to get this event work. Or is there something that i missed?
Any help and suggestion would be appreciated.
Thanks.