From e4ff2ea39db83b0269982b6824467640a7a44b9d Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Thu, 25 Sep 2014 12:16:54 -0600 Subject: [PATCH] new visibile() and routable() filters to Collections --- system/src/Grav/Common/Page/Collection.php | 36 ++++++++++++++++++++++ system/src/Grav/Common/Page/Page.php | 9 ++---- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/system/src/Grav/Common/Page/Collection.php b/system/src/Grav/Common/Page/Collection.php index 9aed0e089..234047d91 100644 --- a/system/src/Grav/Common/Page/Collection.php +++ b/system/src/Grav/Common/Page/Collection.php @@ -192,4 +192,40 @@ class Collection extends Iterator public function currentPosition($path) { return array_search($path, array_keys($this->items)); } + + /** + * Creates new collection with only visible pages + * + * @return Collection The collection with only visible pages + */ + public function visible() + { + $visible = []; + + foreach ($this->items as $path => $slug) { + $page = $this->pages->get($path); + if ($page->visible()) { + $visible[$path] = $slug; + } + } + return new static($visible, $this->params, $this->pages); + } + + /** + * Creates new collection with only routable pages + * + * @return Collection The collection with only routable pages + */ + public function routable() + { + $routable = []; + + foreach (array_keys($this->items) as $path => $slug) { + $page = $this->pages->get($path); + if ($page->routable()) { + $routable[$path] = $slug; + } + } + return new static($routable, $this->params, $this->pages); + } } diff --git a/system/src/Grav/Common/Page/Page.php b/system/src/Grav/Common/Page/Page.php index 1ca0c793f..3776df4cc 100644 --- a/system/src/Grav/Common/Page/Page.php +++ b/system/src/Grav/Common/Page/Page.php @@ -1650,17 +1650,14 @@ class Page $parent = $this->parent(); // Extract visible children from the parent page. - $visible = array(); + $list = array(); /** @var Page $page */ - foreach ($parent as $page) { + foreach ($parent->children()->visible() as $page) { if ($page->order()) { - $visible[$page->slug] = $page->path(); + $list[$page->slug] = $page->path(); } } - // List only visible pages. - $list = array_intersect($visible, $pages->sort($parent)); - // If page was moved, take it out of the list. if ($this->_action == 'move') { unset($list[$this->slug()]);