Discover the previous and next pages of all pages
This commit is contained in:
parent
9b72b5c316
commit
2e880d6c7f
1 changed files with 46 additions and 25 deletions
71
lib/Pico.php
71
lib/Pico.php
|
@ -391,6 +391,7 @@ class Pico
|
|||
|
||||
$this->readPages();
|
||||
$this->sortPages();
|
||||
$this->discoverPageSiblings();
|
||||
$this->discoverCurrentPage();
|
||||
|
||||
$this->triggerEvent('onPagesLoaded', array(
|
||||
|
@ -1237,8 +1238,11 @@ class Pico
|
|||
* | date_formatted | string | formatted date of the page |
|
||||
* | raw_content | string | raw, not yet parsed contents of the page |
|
||||
* | meta | string | parsed meta data of the page |
|
||||
* | previous_page | &array | reference to the previous page |
|
||||
* | next_page | &array | reference to the next page |
|
||||
*
|
||||
* @see Pico::sortPages()
|
||||
* @see Pico::discoverPageSiblings()
|
||||
* @see Pico::getPages()
|
||||
* @return void
|
||||
*/
|
||||
|
@ -1372,11 +1376,47 @@ class Pico
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Walks through the list of all known pages and discovers the previous and
|
||||
* next page respectively
|
||||
*
|
||||
* @see Pico::readPages()
|
||||
* @see Pico::getPages()
|
||||
* @return void
|
||||
*/
|
||||
protected function discoverPageSiblings()
|
||||
{
|
||||
if (($this->getConfig('order_by') === 'date') && ($this->getConfig('order') === 'desc')) {
|
||||
$precedingPageKey = 'next_page';
|
||||
$succeedingPageKey = 'previous_page';
|
||||
} else {
|
||||
$precedingPageKey = 'previous_page';
|
||||
$succeedingPageKey = 'next_page';
|
||||
}
|
||||
|
||||
$precedingPageId = null;
|
||||
foreach ($this->pages as $id => &$pageData) {
|
||||
$pageData[$precedingPageKey] = null;
|
||||
$pageData[$succeedingPageKey] = null;
|
||||
|
||||
if ($pageData['hidden']) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($precedingPageId !== null) {
|
||||
$precedingPageData = &$this->pages[$precedingPageId];
|
||||
$pageData[$precedingPageKey] = &$precedingPageData;
|
||||
$precedingPageData[$succeedingPageKey] = &$pageData;
|
||||
}
|
||||
|
||||
$precedingPageId = $id;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the list of known pages
|
||||
*
|
||||
* @see Pico::readPages()
|
||||
* @see Pico::sortPages()
|
||||
* @return array[]|null the data of all pages
|
||||
*/
|
||||
public function getPages()
|
||||
|
@ -1385,8 +1425,8 @@ class Pico
|
|||
}
|
||||
|
||||
/**
|
||||
* Walks through the list of known pages and discovers the requested page
|
||||
* as well as the previous and next page relative to it
|
||||
* Discovers the page data of the requested page as well as the previous
|
||||
* and next page relative to it
|
||||
*
|
||||
* @see Pico::getCurrentPage()
|
||||
* @see Pico::getPreviousPage()
|
||||
|
@ -1395,8 +1435,6 @@ class Pico
|
|||
*/
|
||||
protected function discoverCurrentPage()
|
||||
{
|
||||
$pageIds = array_keys($this->pages);
|
||||
|
||||
$contentDir = $this->getConfig('content_dir');
|
||||
$contentDirLength = strlen($contentDir);
|
||||
|
||||
|
@ -1407,27 +1445,10 @@ class Pico
|
|||
}
|
||||
|
||||
$currentPageId = substr($this->requestFile, $contentDirLength, -strlen($this->getConfig('content_ext')));
|
||||
$currentPageIndex = array_search($currentPageId, $pageIds);
|
||||
if ($currentPageIndex !== false) {
|
||||
if (isset($this->pages[$currentPageId])) {
|
||||
$this->currentPage = &$this->pages[$currentPageId];
|
||||
|
||||
if (($this->getConfig('order_by') === 'date') && ($this->getConfig('order') === 'desc')) {
|
||||
$previousPageOffset = 1;
|
||||
$nextPageOffset = -1;
|
||||
} else {
|
||||
$previousPageOffset = -1;
|
||||
$nextPageOffset = 1;
|
||||
}
|
||||
|
||||
if (isset($pageIds[$currentPageIndex + $previousPageOffset])) {
|
||||
$previousPageId = $pageIds[$currentPageIndex + $previousPageOffset];
|
||||
$this->previousPage = &$this->pages[$previousPageId];
|
||||
}
|
||||
|
||||
if (isset($pageIds[$currentPageIndex + $nextPageOffset])) {
|
||||
$nextPageId = $pageIds[$currentPageIndex + $nextPageOffset];
|
||||
$this->nextPage = &$this->pages[$nextPageId];
|
||||
}
|
||||
$this->previousPage = &$this->pages[$currentPageId]['previous_page'];
|
||||
$this->nextPage = &$this->pages[$currentPageId]['next_page'];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue