new visibile() and routable() filters to Collections

This commit is contained in:
Andy Miller
2014-09-25 12:16:54 -06:00
parent e3c5234038
commit e4ff2ea39d
2 changed files with 39 additions and 6 deletions

View File

@@ -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);
}
}

View File

@@ -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()]);