/** * @param string $blockName * @param array $options * @return mixed|string */ public function block($blockName, $options = []) { // force query available if block details changed in current request $block = Block::preloadClone($blockName, isset($options['force_query'])); $pageId = !empty($options['page_id']) ? Path::unParsePageId($options['page_id']) : $this->pageId(); $usingGlobalContent = false; $blockData = null; if (($customBlockData = $this->_getCustomBlockData($blockName)) !== null) { // load custom block data for (is also used for repeater content) $blockData = $customBlockData; } elseif ($block->exists) { // load block data $globalBlockData = PageBlockDefault::preload($block->id); $pageBlockData = PageBlock::preloadPageBlock($pageId, $block->id, $this->pageVersion($pageId)); // get languages $loadForLanguages = [Language::current()]; if (config('coaster::frontend.language_fallback') == 1 && !in_array(config('coaster::frontend.language'), $loadForLanguages)) { $loadForLanguages[] = config('coaster::frontend.language'); } // run through languages until block data found foreach ($loadForLanguages as $language) { if (!empty($pageBlockData[$language])) { // if custom page block for selected language exists $blockData = $pageBlockData[$language]->content; } elseif (!empty($globalBlockData[$language])) { // if default block for selected language exists $blockData = $globalBlockData[$language]->content; $usingGlobalContent = true; break; } } // return raw data if (isset($options['raw']) && $options['raw']) { return $blockData; } } else { return 'block not found'; } // set version that data has been grabbed for (0 = latest) if (empty($options['version'])) { $options['version'] = $usingGlobalContent ? 0 : $this->pageVersion($pageId); } // pass block details and data to display class return $block->setPageId($pageId)->setVersionId($options['version'])->getTypeObject()->display($blockData, $options); }