Reusable Content Blocks
From Code + Tonic.
Order Number: #00129  
accounts@maynarddesign.com.  
product-reusable-blocks.html
Password apple-pear
Link to the plugin: https://codeandtonic.com/rub1
PAGE Code Snippet:
Create page in SS. replace url slug.
(in SHF website, .sidebar1 class is my addition - for styling only in css. Remove in snippet if style not in use)
<!--Reusable block--> <div class=sidebar1><div class="vp-reusable-content"></div></div> <script> reusableBlock("URLSLUG"); </script>
Code Snippets
Reusable Content Block / PAGE:
Place on the page in a code block. Can add css style class - see above. You may need to Hard-Refresh.
Content Blocks Used on This Site
RCB-BOOKS
<!--Reusable block--> <div class=sidebar1><div class="vp-reusable-content"></div></div> <script> reusableBlock("URLSLUG"); </script>
RCB-LEY-Sidebar
<!--Reusable block--> <div class=sidebar1><div class="vp-reusable-content"></div></div> <script> reusableBlock("rcb-ley-sidebar"); </script>
<!--Reusable block-->
<div class="vp-reusable-content"></div>
<script>
reusableBlock("URL-SLUG-HERE");
</script>SITE HEADER SNIPPET / Block 1:
Insert into Site Header with Code Injection
<!--jQuery--> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
SITE HEADER SNIPPET / Block 2:
Insert into Site Header with Code Injection after block 1
<!--REUSABLE BLOCKS INIT START-->
<style>
  /* Non-rendered Newsletter Blocks are hidden by default. Fix.*/
  .vp-reusable-content .newsletter-block:not(.rendered) {
  opacity:1 !important;
  }
</style>
<script>
function reusableBlock(fetchUrl) {
  // in case there are several on page, get the last / latest div.vp-reusable-content as we want to only work on that
  var thisReusableBlock = $(".vp-reusable-content:last");  
   
   
  //JS-fetch location: http/https + domain + page url + SQS json format
  var fetchUrl = window.location.protocol + "//" + window.location.hostname + "/" + fetchUrl + "?format=json-pretty";
   
    
    fetch(fetchUrl, {credentials: 'include'})
    .then(response => {
    return response.json();
  })
    .then(data => {
      thisReusableBlock.html(data.mainContent);
      thisReusableBlock.find('.sqs-layout').removeClass('sqs-layout');
      
      // loop images and set data-src as src
      thisReusableBlock.find( ".image-block" ).each(function(i) {
        var reusableImg = $( this ).find( "img" );
        reusableImg.attr("src", reusableImg.attr("data-src"));
    });
    //remove double paddings
    thisReusableBlock.closest(".sqs-block.code-block")
        .addClass("vp-reusable-parent-codeblock")
        .css("padding", "0px");
    
  })
    .catch(err => {
    // Fetch Erorr
      console.log("REUSABLE BLOCKS ERROR: Error fetching content. Check fetchUrl. Might also be caused by an older browser. Please update to new Chrome, Firefox, Safari or Microsoft Edge");
  });
}
 </script>
 <!--REUSABLE BLOCKS INIT END-->
