Beispiel #1
0
 /**
  * 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;
 }