/** * @param DisplayPageCommand $command */ public function handle(DisplayPageCommand $command) { $id = $command->getId(); $this->vars = $command->getVars(); $this->request = $command->getRequest(); $this->output = $command->getStream(); $this->container = $command->getContainer(); $this->registerContentTypes(); /** @var RepositoryFactory $repositoryFactory */ $repositoryFactory = $this->container->get('Repository'); $repository = $repositoryFactory->forEntity(Page::class); $page = $repository->getById($id); $contentItems[] = $page->content->getAll(); for ($m = $page->layout; $m != null; $m = $m->parent) { array_unshift($contentItems, $m->content->getAll()); } $contentItems = $this->flatten($contentItems); if (!isset($page->parent)) { $page->parent = $page->layout; } $contentTree = $this->buildTree($contentItems); $data = get_object_vars($page); if ($data['title'][0] == ':') { // @todo Retrieve the title } $templatePath = $page->layout->template->path; $this->output->setTemplate($templatePath); $template = $this->loadTemplate(JPATH_ROOT . '/' . $templatePath . '/index.php', $data); $parts = preg_split('~</body>~', $template, 2); $parts[1] = '</body>' . $parts[1]; $this->output->write($parts[0]); foreach ($contentTree as $root) { $root->accept($this->output); } $queryParams = $this->request->getQueryParams(); if (isset($queryParams['debug'])) { $this->dumpSql(); } $this->output->writeJavascript(); $this->output->writeCss(); $this->output->write($parts[1]); }