Browse Source

Core update (better sidebar)

markseu 10 years ago
parent
commit
f98a98be1a
3 changed files with 47 additions and 2 deletions
  1. 1 1
      README.md
  2. 45 1
      system/core/core.php
  3. 1 0
      system/themes/snippets/content-sidebar.php

+ 1 - 1
README.md

@@ -1,4 +1,4 @@
-Yellow 0.5.17
+Yellow 0.5.18
 =============
 =============
 [![Yellow](https://raw.githubusercontent.com/wiki/datenstrom/yellow/images/yellow.jpg)](http://datenstrom.se/yellow)
 [![Yellow](https://raw.githubusercontent.com/wiki/datenstrom/yellow/images/yellow.jpg)](http://datenstrom.se/yellow)
 
 

+ 45 - 1
system/core/core.php

@@ -5,7 +5,7 @@
 // Yellow main class
 // Yellow main class
 class Yellow
 class Yellow
 {
 {
-	const Version = "0.5.17";
+	const Version = "0.5.18";
 	var $page;				//current page
 	var $page;				//current page
 	var $pages;				//pages from file system
 	var $pages;				//pages from file system
 	var $files;				//files from file system
 	var $files;				//files from file system
@@ -363,6 +363,7 @@ class YellowPage
 	var $headerData;			//response header
 	var $headerData;			//response header
 	var $outputData;			//response output
 	var $outputData;			//response output
 	var $pages;					//page collection
 	var $pages;					//page collection
+	var $relations;				//page relations
 	var $parser;				//content parser
 	var $parser;				//content parser
 	var $parserData;			//content data of page
 	var $parserData;			//content data of page
 	var $parserSafeMode;		//page is parsed in safe mode? (boolean)
 	var $parserSafeMode;		//page is parsed in safe mode? (boolean)
@@ -378,6 +379,7 @@ class YellowPage
 		$this->metaData = array();
 		$this->metaData = array();
 		$this->headerData = array();
 		$this->headerData = array();
 		$this->pages = new YellowPageCollection($yellow);
 		$this->pages = new YellowPageCollection($yellow);
+		$this->relations = array();
 	}
 	}
 
 
 	// Set request information
 	// Set request information
@@ -707,6 +709,18 @@ class YellowPage
 		return $this->pages;
 		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
 	// Return absolute page location
 	function getLocation()
 	function getLocation()
 	{
 	{
@@ -923,6 +937,36 @@ class YellowPageCollection extends ArrayObject
 		$this->exchangeArray($array);
 		$this->exchangeArray($array);
 		return $this;
 		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
 	// Merge page collection
 	function merge($input)
 	function merge($input)

+ 1 - 0
system/themes/snippets/content-sidebar.php

@@ -2,6 +2,7 @@
 <div class="content sidebar">
 <div class="content sidebar">
 <?php $location = $yellow->lookup->getDirectoryLocation($yellow->page->location).$yellow->page->get("sidebar"); ?>
 <?php $location = $yellow->lookup->getDirectoryLocation($yellow->page->location).$yellow->page->get("sidebar"); ?>
 <?php if($page = $yellow->pages->find($location)): ?>
 <?php if($page = $yellow->pages->find($location)): ?>
+<?php $yellow->page->setPage("main", $page) ?>
 <?php $yellow->page->setLastModified($page->getModified()) ?>
 <?php $yellow->page->setLastModified($page->getModified()) ?>
 <?php echo $page->getContent() ?>
 <?php echo $page->getContent() ?>
 <?php else: ?>
 <?php else: ?>