Developer guide     >     Developing Extensions     >     Examples

Dynamic content

This Extension is executed everytime a Page gets rendered. It gets a list of all Content Blocks which got at least one Tag in common with the Page.
 
  1. <?php
  2.     namespace com\yg;
  3.    
  4.     class ExampleDynamicContent extends \pageExtension {
  5.    
  6.         public $info = array(
  7.             "NAME" => "Dynamic content example",
  8.             "DEVELOPERNAME" => "yeager GmbH",
  9.             "VERSION" => "1.0",
  10.             "API" => "1.0",
  11.             "DESCRIPTION" => "Assigns a list of Content Blocks which got the same Tags assigned as the Page",
  12.             "URL" => "http://www.yeager.cm/",
  13.             "TYPE" => EXTENSION_PAGE,
  14.             "ASSIGNMENT" => EXTENSION_ASSIGNMENT_EXT_CONTROLLED
  15.         );
  16.        
  17.         public function install() {
  18.             if (parent::install()) {
  19.                 return parent::setInstalled();
  20.             } else {
  21.                 return false;
  22.             }
  23.         }
  24.  
  25.         public function uninstall() {
  26.             if (parent::uninstall()) {
  27.                 return parent::setUnInstalled();
  28.             } else {
  29.                 return false;
  30.             }
  31.         }
  32.  
  33.         public function onRender() {
  34.             // get page
  35.             $page = $this->getPage();
  36.            
  37.             // get tags assigned to this page
  38.             $tags = $page->tags->getAssigned();
  39.  
  40.             $dynamicContent = array();
  41.  
  42.             // loop through tags
  43.             for ($i = 0; $i < count($tags); $i++) {
  44.                
  45.                 // get all content blocks which got a tag assigned
  46.                 $cbs = sCblockMgr()->tags->getByTag($tags[$i]['ID']);
  47.                 for ($j = 0; $j < count($cbs); $j++) {
  48.                    
  49.                     // instance content block object
  50.                     $cb = sCblockMgr()->getCblock($cbs[$j]['OBJECTID']);
  51.                     if ($cb) {
  52.                         // get additional information like name and push it to the $dynamicContent
  53.                         $info = $cb->get();
  54.                         $cbs[$j] = array_merge($cbs[$j], $info);
  55.                         /* optionally get the full content of each content block
  56.                            gets slow if performed for a large number of content blocks
  57.  
  58.                            $cbs[$j]["CONTENT"] = $cb->getContent();*/
  59.                         array_push($dynamicContent, $cbs[$j]);
  60.                     }                
  61.                 }
  62.             }
  63.             // assign array
  64.             sSmarty()->assign("dynamicContent", $dynamicContent);
  65.         }
  66.     }
  67. ?>