Discover the previous and next pages of all pages
This commit is contained in:
parent
9b72b5c316
commit
2e880d6c7f
71
lib/Pico.php
71
lib/Pico.php
@ -391,6 +391,7 @@ class Pico
|
|||||||
|
|
||||||
$this->readPages();
|
$this->readPages();
|
||||||
$this->sortPages();
|
$this->sortPages();
|
||||||
|
$this->discoverPageSiblings();
|
||||||
$this->discoverCurrentPage();
|
$this->discoverCurrentPage();
|
||||||
|
|
||||||
$this->triggerEvent('onPagesLoaded', array(
|
$this->triggerEvent('onPagesLoaded', array(
|
||||||
@ -1237,8 +1238,11 @@ class Pico
|
|||||||
* | date_formatted | string | formatted date of the page |
|
* | date_formatted | string | formatted date of the page |
|
||||||
* | raw_content | string | raw, not yet parsed contents of the page |
|
* | raw_content | string | raw, not yet parsed contents of the page |
|
||||||
* | meta | string | parsed meta data 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::sortPages()
|
||||||
|
* @see Pico::discoverPageSiblings()
|
||||||
* @see Pico::getPages()
|
* @see Pico::getPages()
|
||||||
* @return void
|
* @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
|
* Returns the list of known pages
|
||||||
*
|
*
|
||||||
* @see Pico::readPages()
|
* @see Pico::readPages()
|
||||||
* @see Pico::sortPages()
|
|
||||||
* @return array[]|null the data of all pages
|
* @return array[]|null the data of all pages
|
||||||
*/
|
*/
|
||||||
public function getPages()
|
public function getPages()
|
||||||
@ -1385,8 +1425,8 @@ class Pico
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Walks through the list of known pages and discovers the requested page
|
* Discovers the page data of the requested page as well as the previous
|
||||||
* as well as the previous and next page relative to it
|
* and next page relative to it
|
||||||
*
|
*
|
||||||
* @see Pico::getCurrentPage()
|
* @see Pico::getCurrentPage()
|
||||||
* @see Pico::getPreviousPage()
|
* @see Pico::getPreviousPage()
|
||||||
@ -1395,8 +1435,6 @@ class Pico
|
|||||||
*/
|
*/
|
||||||
protected function discoverCurrentPage()
|
protected function discoverCurrentPage()
|
||||||
{
|
{
|
||||||
$pageIds = array_keys($this->pages);
|
|
||||||
|
|
||||||
$contentDir = $this->getConfig('content_dir');
|
$contentDir = $this->getConfig('content_dir');
|
||||||
$contentDirLength = strlen($contentDir);
|
$contentDirLength = strlen($contentDir);
|
||||||
|
|
||||||
@ -1407,27 +1445,10 @@ class Pico
|
|||||||
}
|
}
|
||||||
|
|
||||||
$currentPageId = substr($this->requestFile, $contentDirLength, -strlen($this->getConfig('content_ext')));
|
$currentPageId = substr($this->requestFile, $contentDirLength, -strlen($this->getConfig('content_ext')));
|
||||||
$currentPageIndex = array_search($currentPageId, $pageIds);
|
if (isset($this->pages[$currentPageId])) {
|
||||||
if ($currentPageIndex !== false) {
|
|
||||||
$this->currentPage = &$this->pages[$currentPageId];
|
$this->currentPage = &$this->pages[$currentPageId];
|
||||||
|
$this->previousPage = &$this->pages[$currentPageId]['previous_page'];
|
||||||
if (($this->getConfig('order_by') === 'date') && ($this->getConfig('order') === 'desc')) {
|
$this->nextPage = &$this->pages[$currentPageId]['next_page'];
|
||||||
$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];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user