/** * Get a page object in html string * * @param string $pageUID Page unique ID * @param boolean ($eval) Evaluate PHP * @throws IOException If the page does not exists * @return Page|bool Return the selected page if exists, false if not */ public function read($pageUID, $eval = false) { $this->fetchPages(); $pageUID = trim($pageUID, '/'); // If page was already loaded, return page if (isset($this->data[$pageUID])) { return $this->data[$pageUID]; } $pageFullPath = $pageUID . $this->fileExtension; $fs = new Files($this->folder); if (!$fs->exists($pageFullPath)) { // Check if it can fallback to a default file in the folder $pageUID = $pageUID . $this->folderDefaultFile; if (!$fs->exists($pageFullPath = $pageUID . $this->fileExtension)) { return false; } } // Anonymous function to use renderer engine $renderer = $this->renderer; $fn = function (\SplFileInfo $fileInfo, $data) use($pageUID, $renderer) { // Create the title from the filename if (strpos($pageUID, '/') !== false) { $pageUIDToken = explode('/', $pageUID); $pageTitle = array_pop($pageUIDToken); $parent = implode('/', $pageUIDToken); } else { $pageTitle = $pageUID; } $opts = ['slug' => $pageUID, 'title' => ucfirst(strtr($pageTitle, '-', ' ')), 'date' => '@' . $fileInfo->getMTime()]; isset($parent) ? $opts += ['parent' => $parent] : null; $pageUID[0] === '_' ? $opts += ['hidden' => true] : null; $pageUID[0] === '.' ? $opts += ['secret' => true] : null; return $renderer->parse($data, $opts); }; $page = $fs->read($pageFullPath, $fn, $eval); $this->data[$pageUID] = $page; return $page; }