예제 #1
0
파일: Page.php 프로젝트: rafasashi/Phile
 /**
  * find all pages (*.md) files and returns an array of Page models
  *
  * @param array  $options
  * @param string $folder
  *
  * @return array of \Phile\Model\Page objects
  */
 public function findAll(array $options = array(), $folder = CONTENT_DIR)
 {
     $options += $this->settings;
     // ignore files with a leading '.' in its filename
     $files = Utility::getFiles($folder, '\\Phile\\FilterIterator\\ContentFileFilterIterator');
     $pages = array();
     foreach ($files as $file) {
         if (str_replace($folder, '', $file) == '404' . CONTENT_EXT) {
             // jump to next page if file is the 404 page
             continue;
         }
         $pages[] = $this->getPage($file, $folder);
     }
     if (empty($options['pages_order'])) {
         return $pages;
     }
     // parse search criteria
     $terms = preg_split('/\\s+/', $options['pages_order'], -1, PREG_SPLIT_NO_EMPTY);
     foreach ($terms as $term) {
         $term = explode('.', $term);
         if (count($term) > 1) {
             $type = array_shift($term);
         } else {
             $type = null;
         }
         $term = explode(':', $term[0]);
         $sorting[] = array('type' => $type, 'key' => $term[0], 'order' => $term[1]);
     }
     // prepare search criteria for array_multisort
     foreach ($sorting as $sort) {
         $key = $sort['key'];
         $column = array();
         foreach ($pages as $page) {
             /** @var \Phile\Model\Page $page */
             $meta = $page->getMeta();
             if ($sort['type'] === 'page') {
                 $method = 'get' . ucfirst($key);
                 $value = $page->{$method}();
             } elseif ($sort['type'] === 'meta') {
                 $value = $meta->get($key);
             } else {
                 continue 2;
                 // ignore unhandled search term
             }
             $column[] = $value;
         }
         $sortHelper[] = $column;
         $sortHelper[] = constant('SORT_' . strtoupper($sort['order']));
     }
     $sortHelper[] =& $pages;
     call_user_func_array('array_multisort', $sortHelper);
     return $pages;
 }