5.7.5.6 - Custom package on_start method called by conversation block

Permalink
I'm building a custom package to easely add rich snippet and structured markup data to a Concrete5 website.

In the package controller I add this code (for example):
$jsonLDSite = '<script type="application/ld+json">{';
          $jsonLDSite .= '"@context" : "http://schema.org",';
          $jsonLDSite .= '"@type" : "WebSite",';
          $jsonLDSite .= '"name" : "'.$name.'",';
          if(!empty($alternateName)){
            $jsonLDSite .= '"alternateName" : "'.$alternateName.'",';
          }
          $jsonLDSite .= '"url" : "'.$url.'"';
        $jsonLDSite .= '}</script>';
        $view->addFooterItem($jsonLDSite);


Everything works except when I add the Conversation block to the page.
Inside the Conversation block view.php my on_start method is called again and put on the website.

This means the json-ld snippet is added to the page twice.
This is the html output from the conversation block:
<div class="ccm-conversation-wrapper" data-conversation-id="5">
<script type="application/ld+json">
{"@context" : "http://schema.org","@type" : "WebSite","name" : Mywebsite Name","url" : "http://www.mywebsite.com"}
</script>
<h4>Add Message</h4>
// code of the conversation block continues



I've solved this by adding an if-condition to my on_start method, however this might not be the best solution...
// Making sure this is only called once at on_start in the index.php.
    if($_SERVER['CONTEXT_PREFIX'] == DIR_REL.'/index.php'){
        //here the code to add the json-ld to the footer
    }


I've also tried with addHeaderItem instead of the addFooterItem, and both gave the same result.
Anyone else experienced the conversation block adding data through the on_start of a custom package controller ? (my package handle is abc_snippet in case someone wants to try and reproduce)

Jozzeh
 

This website stores cookies on your computer. These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media. To find out more about the cookies we use, see our Privacy Policy.