/** * Renders a particular view for a block or a block type * @param Block | BlockType $obj * @param string $view * @param array $args */ public function render($obj, $view = 'view', $args = array()) { if ($this->hasRendered) { return false; } $this->blockObj = $obj; $customAreaTemplates = array(); if ($obj instanceof BlockType) { $bt = $obj; $base = $obj->getBlockTypePath(); } else { $bFilename = $obj->getBlockFilename(); $b = $obj; $base = $b->getBlockPath(); $this->block = $b; $this->c = $b->getBlockCollectionObject(); if ($bFilename == '' && is_object($this->area)) { $customAreaTemplates = $this->area->getCustomTemplates(); $btHandle = $b->getBlockTypeHandle(); if (isset($customAreaTemplates[$btHandle])) { $bFilename = $customAreaTemplates[$btHandle]; } } } $btHandle = $obj->getBlockTypeHandle(); if (!isset($this->controller)) { $this->controller = Loader::controller($obj); } if (in_array($view, array('view', 'add', 'edit'))) { $_action = $view; } else { $_action = 'view'; } $u = new User(); $outputContent = false; $useCache = false; $page = Page::getCurrentPage(); if ($view == 'view') { if ($this->controller->cacheBlockOutput() && ($obj instanceof Block)) { if ((!$u->isRegistered() || ($this->controller->cacheBlockOutputForRegisteredUsers())) && (($_SERVER['REQUEST_METHOD'] != 'POST' || ($this->controller->cacheBlockOutputOnPost() == true)))) { $useCache = true; } if ($useCache) { $cID = 0; if (is_object($page)) { $cID = $page->getCollectionID(); } $outputContent = Cache::get('block_view_output', $cID . ':' . $obj->getBlockID() . ':' . $obj->getAreaHandle()); } } } if ($outputContent == false) { $this->controller->setupAndRun($_action); } extract($this->controller->getSets()); extract($this->controller->getHelperObjects()); $headerItems = $this->controller->headerItems; extract($args); if ($this->controller->getRenderOverride() != '') { $_filename = $this->controller->getRenderOverride() . '.php'; } if ($view == 'scrapbook') { $template = $this->getBlockPath(FILENAME_BLOCK_VIEW_SCRAPBOOK) . '/' . FILENAME_BLOCK_VIEW_SCRAPBOOK; if (!file_exists($template)) { $view = 'view'; } } if (!in_array($view, array('composer','view', 'add', 'edit', 'scrapbook'))) { // then we're trying to render a custom view file, which we'll pass to the bottom functions as $_filename $_filename = $view . '.php'; $view = 'view'; } switch($view) { case 'scrapbook': $header = DIR_FILES_ELEMENTS_CORE . '/block_header_view.php'; $footer = DIR_FILES_ELEMENTS_CORE . '/block_footer_view.php'; break; case 'composer': case 'view': if (!$outputContent) { if (!isset($_filename)) { $_filename = FILENAME_BLOCK_VIEW; } $bvt = new BlockViewTemplate($obj); if ($bFilename) { $bvt->setBlockCustomTemplate($bFilename); // this is PROBABLY already set by the method above, but in the case that it's passed by area we have to set it here } else if ($_filename != FILENAME_BLOCK_VIEW) { $bvt->setBlockCustomRender($_filename); } $template = $bvt->getTemplate(); } if ($view == 'composer') { $displayEditLink = true; $header = DIR_FILES_ELEMENTS_CORE . '/block_header_composer.php'; $footer = DIR_FILES_ELEMENTS_CORE . '/block_footer_composer.php'; $cpFilename = $obj->getBlockComposerFilename(); if ($cpFilename) { $cmpbase = $this->getBlockPath(DIRNAME_BLOCK_TEMPLATES_COMPOSER . '/' . $cpFilename); if (file_exists($cmpbase . '/' . DIRNAME_BLOCK_TEMPLATES_COMPOSER . '/' . $cpFilename)) { $template = $base . '/' . DIRNAME_BLOCK_TEMPLATES_COMPOSER . '/' . $cpFilename; $displayEditLink = false; } } if ($displayEditLink) { $cmpbase = $this->getBlockPath(FILENAME_BLOCK_COMPOSER); if (file_exists($cmpbase . '/' . FILENAME_BLOCK_COMPOSER)) { $template = $base . '/' . FILENAME_BLOCK_COMPOSER; $displayEditLink = false; } } } else { $header = DIR_FILES_ELEMENTS_CORE . '/block_header_view.php'; $footer = DIR_FILES_ELEMENTS_CORE . '/block_footer_view.php'; } break; case 'add': if (!isset($_filename)) { $_filename = FILENAME_BLOCK_ADD; } $header = DIR_FILES_ELEMENTS_CORE . '/block_header_add.php'; $footer = DIR_FILES_ELEMENTS_CORE . '/block_footer_add.php'; break; case 'edit': if (!isset($_filename)) { $_filename = FILENAME_BLOCK_EDIT; } $header = DIR_FILES_ELEMENTS_CORE . '/block_header_edit.php'; $footer = DIR_FILES_ELEMENTS_CORE . '/block_footer_edit.php'; break; } if (!isset($template)) { $base = $this->getBlockPath($_filename); $template = $base . '/' . $_filename; } if (isset($header)) { include($header); } if ($outputContent) { print $outputContent; } else if ($template) { ob_start(); include($template); $outputContent = ob_get_contents(); ob_end_clean(); print $outputContent; if ($useCache) { $cID = 0; if (is_object($page)) { $cID = $page->getCollectionID(); } Cache::set('block_view_output', $cID . ':' . $obj->getBlockID() . ':' . $obj->getAreaHandle(), $outputContent, $this->controller->getBlockTypeCacheOutputLifetime()); } } if (isset($footer)) { include($footer); } $this->template = $template; $this->header = $header; $this->footer = $footer; }
/** * Gets a full URL to a block's tools directory * @param BlockType $bt * @return string $url */ public function getBlockTypeToolsURL($bt) { return REL_DIR_FILES_TOOLS_BLOCKS . '/' . $bt->getBlockTypeHandle(); }