commit f98a98be1a82c48e3a81f33f26c8dc4295fcee9a
parent 7867b1fe4150791bafc0cdd5045c60f30a53615f
Author: markseu <mark2011@mayberg.se>
Date: Sat, 30 May 2015 17:25:27 +0200
Core update (better sidebar)
Diffstat:
3 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
@@ -1,4 +1,4 @@
-Yellow 0.5.17
+Yellow 0.5.18
=============
[](http://datenstrom.se/yellow)
diff --git a/system/core/core.php b/system/core/core.php
@@ -5,7 +5,7 @@
// Yellow main class
class Yellow
{
- const Version = "0.5.17";
+ const Version = "0.5.18";
var $page; //current page
var $pages; //pages from file system
var $files; //files from file system
@@ -363,6 +363,7 @@ class YellowPage
var $headerData; //response header
var $outputData; //response output
var $pages; //page collection
+ var $relations; //page relations
var $parser; //content parser
var $parserData; //content data of page
var $parserSafeMode; //page is parsed in safe mode? (boolean)
@@ -378,6 +379,7 @@ class YellowPage
$this->metaData = array();
$this->headerData = array();
$this->pages = new YellowPageCollection($yellow);
+ $this->relations = array();
}
// Set request information
@@ -707,6 +709,18 @@ class YellowPage
return $this->pages;
}
+ // Set page relation
+ function setPage($type, $page)
+ {
+ $page->relations[$type] = $this;
+ }
+
+ // Return related page
+ function getPage($type)
+ {
+ return !is_null($this->relations[$type]) ? $this->relations[$type] : $this;
+ }
+
// Return absolute page location
function getLocation()
{
@@ -923,6 +937,36 @@ class YellowPageCollection extends ArrayObject
$this->exchangeArray($array);
return $this;
}
+
+ // Sort page collection by meta data similarity
+ function similar($page, $ascendingOrder = false)
+ {
+ $location = $page->location;
+ $keywords = $page->get("keywords").",".$page->get("tag").",".$page->get("author");
+ $tokens = array_unique(array_filter(explode(',', $keywords), "strlen"));
+ if(!empty($tokens))
+ {
+ $array = array();
+ foreach($this->getArrayCopy() as $page)
+ {
+ $searchScore = 0;
+ foreach($tokens as $token)
+ {
+ if(stristr($page->get("title"), $token)) $searchScore += 10;
+ if(stristr($page->get("tag"), $token)) $searchScore += 5;
+ if(stristr($page->get("author"), $token)) $searchScore += 2;
+ }
+ if($page->location != $location)
+ {
+ $page->set("searchscore", $searchScore);
+ array_push($array, $page);
+ }
+ }
+ $this->exchangeArray($array);
+ $this->sort("searchscore", $ascendingOrder);
+ }
+ return $this;
+ }
// Merge page collection
function merge($input)
diff --git a/system/themes/snippets/content-sidebar.php b/system/themes/snippets/content-sidebar.php
@@ -2,6 +2,7 @@
<div class="content sidebar">
<?php $location = $yellow->lookup->getDirectoryLocation($yellow->page->location).$yellow->page->get("sidebar"); ?>
<?php if($page = $yellow->pages->find($location)): ?>
+<?php $yellow->page->setPage("main", $page) ?>
<?php $yellow->page->setLastModified($page->getModified()) ?>
<?php echo $page->getContent() ?>
<?php else: ?>