[pLog-svn] r2245 - in plog/branches/plog-1.0.2/plugins: . categorybrowser

jondaley at devel.plogworld.net jondaley at devel.plogworld.net
Fri Jun 17 14:58:06 GMT 2005


Author: jondaley
Date: 2005-06-17 14:58:05 +0000 (Fri, 17 Jun 2005)
New Revision: 2245

Added:
   plog/branches/plog-1.0.2/plugins/categorybrowser/
   plog/branches/plog-1.0.2/plugins/categorybrowser/README.txt
   plog/branches/plog-1.0.2/plugins/categorybrowser/locale/
   plog/branches/plog-1.0.2/plugins/categorybrowser/plugincategorybrowser.class.php
Log:
new plugin, first,prev,next,last buttons for each post, stays within given category

Added: plog/branches/plog-1.0.2/plugins/categorybrowser/README.txt
===================================================================
--- plog/branches/plog-1.0.2/plugins/categorybrowser/README.txt	2005-06-16 15:51:34 UTC (rev 2244)
+++ plog/branches/plog-1.0.2/plugins/categorybrowser/README.txt	2005-06-17 14:58:05 UTC (rev 2245)
@@ -0,0 +1,71 @@
+Category Browser plugin for pLog.
+Author: Jon Daley
+URL: http://limedaley.com/
+
+Example URL using this plugin: http://limedaley.com/~jondaley/plog/
+
+The default getNext and getPrev post do not obey category boundaries,
+and you might have readers who are only interested in certain
+categories.
+
+This plugin has four functions to get the first, previous, next, and
+latest posts in any given category.
+
+Here are the available functions:
+{assign var="postInCategoryFirst"
+    value=$categorybrowser->getFirstArticle($categoryId, $blogId)}
+{assign var="postInCategoryPrev"
+    value=$categorybrowser->getPrevArticle($post, $categoryId, $blogId)}
+{assign var="postInCategoryNext"
+    value=$categorybrowser->getNextArticle($post, $categoryId, $blogId)}
+{assign var="postInCategoryLast"
+    value=$categorybrowser->getLastArticle($categoryId, $blogId)}
+
+
+
+Here is the code I use in my template, it might be fancier that you
+want, but I think this looks pretty good.
+
+Category
+  {foreach name=categories from=$post->getCategories()
+           item=postCategory}
+    {assign var=categoryName value=$postCategory->getName()}
+    {assign var="blogId" value=$blog->getId()}
+    {assign var="categoryId" value=$postCategory->getId()}
+    {assign var="postInCategoryFirst"
+          value=$categorybrowser->getFirstArticle($categoryId, $blogId)}
+    {assign var="postInCategoryPrev"
+          value=$categorybrowser->getPrevArticle($post, $categoryId, $blogId)}
+    {assign var="postInCategoryNext"
+          value=$categorybrowser->getNextArticle($post, $categoryId, $blogId)}
+    {assign var="postInCategoryLast"
+          value=$categorybrowser->getLastArticle($categoryId, $blogId)}
+
+    <a href="{$url->categoryLink($postCategory)}">{$categoryName}</a>:
+    <span class="nodisplay">
+      {if $postInCategoryFirst &&
+          ($postInCategoryFirst->getId() != $post->getId())}
+        </span>[<a
+        href="{$url->postPermalink($postInCategoryFirst)}">first</a>]<span
+            class="nodisplay">
+      {/if}
+      {if $postInCategoryPrev &&
+          ($postInCategoryPrev->getId() != $postInCategoryFirst->getId())}
+        </span>[<a
+        href="{$url->postPermalink($postInCategoryPrev)}">previous</a>]<span
+        class="nodisplay">
+      {/if}
+      {if $postInCategoryNext &&
+          ($postInCategoryNext->getId() != $postInCategoryLast->getId())}
+        </span>[<a
+        href="{$url->postPermalink($postInCategoryNext)}">next</a>]<span
+          class="nodisplay">
+      {/if}
+      {if $postInCategoryLast &&
+          ($postInCategoryLast->getId() != $post->getId())}
+        </span>[<a
+        href="{$url->postPermalink($postInCategoryLast)}">newest</a>]<span
+          class="nodisplay">
+      {/if}
+    </span>
+  {/foreach}

Added: plog/branches/plog-1.0.2/plugins/categorybrowser/plugincategorybrowser.class.php
===================================================================
--- plog/branches/plog-1.0.2/plugins/categorybrowser/plugincategorybrowser.class.php	2005-06-16 15:51:34 UTC (rev 2244)
+++ plog/branches/plog-1.0.2/plugins/categorybrowser/plugincategorybrowser.class.php	2005-06-17 14:58:05 UTC (rev 2245)
@@ -0,0 +1,132 @@
+<?php
+
+include_once( PLOG_CLASS_PATH."class/plugin/pluginbase.class.php" );
+include_once( PLOG_CLASS_PATH."class/plugin/pluginmanager.class.php" );
+include_once( PLOG_CLASS_PATH."class/dao/articles.class.php" );
+include_once( PLOG_CLASS_PATH."class/dao/article.class.php" );
+    
+    /*
+     * Plugin that offers features to return links to the next and previous articles
+     * within the current category
+     */
+class PluginCategoryBrowser extends PluginBase
+{
+	var $_articles;
+    var $_prefix;
+	
+    function PluginCategoryBrowser(){
+        $this->author = "Jon Daley";
+        $this->desc = "This plugin adds the ability to have next
+	            and previous buttons that stay within the same category as the
+		    current post<br/>Usage:<br/>Functions:<br/>
+		    getPrevArticle(currArticle, blogId)<br/>
+		    getNextArticle(currArticle, blogId)<br/>
+		    getFirstArticle(categoryId, blogId) and<br/>
+		    getLastArticle(categoryId, blogId)<br/>
+		    Given an article the Prev and Next functions will
+		    return the previous and next posts in the same
+		    category as the given article.<br/>
+		    Given a category id, the First and Last functions
+		    will return the first and last posts in the same
+		    category.<br/>
+		    They will return false if it doesn't exist, or an Article
+                    object if it does.<br/>";
+            
+        $this->PluginBase();
+	    $this->db =& Db::getDb();
+	    $config =& Config::getConfig();
+	    $this->_prefix = $config->getValue('db_prefix');
+	    $this->id = "categorybrowser";
+	    $this->$_articles = new Articles();
+    }
+
+    function getPrevArticle($article, $categoryId, $blogId){
+            // gets the article that is just before this one in
+            // the same category
+        $query = "SELECT id FROM " . $this->_prefix . 
+            "articles, " . $this->_prefix."article_categories_link" .
+            " WHERE date < '" . $article->getDate() . 
+            "' AND status=1 AND blog_id = " . $blogId . 
+            " AND category_id = " . $categoryId . 
+            " and article_id = id" .
+            " ORDER BY date DESC LIMIT 1;";
+
+        $result = $this->db->Execute($query);
+	    if(!$result || ($result->RecordCount() == 0))
+            return false;
+
+            // get the information from the article
+        $row = $result->FetchRow();
+
+            // fetch the article
+	    return $this->$_articles->getBlogArticle($row["id"], $blogId);
+    }
+
+    function getNextArticle($article, $categoryId, $blogId){
+            // gets the article that is just after this one in
+            // the same category
+        $query = "SELECT id FROM " . $this->_prefix . 
+            "articles, " . $this->_prefix."article_categories_link" .
+            " WHERE date > '" . $article->getDate() . 
+            "' AND status=1 AND blog_id = " . $blogId . 
+            " AND category_id = " . $categoryId . 
+            " and article_id = id" .
+            " ORDER BY date LIMIT 1;";
+
+        $result = $this->db->Execute($query);
+	    if(!$result || ($result->RecordCount() == 0)){
+            return false;
+        }
+
+            // get the information from the article
+        $row = $result->FetchRow();
+        print $row["id"];
+        
+
+            // fetch the article
+	    return $this->$_articles->getBlogArticle($row["id"], $blogId);
+    }
+
+    function getFirstArticle($categoryId, $blogId){
+            // gets the first article in the category
+        $query = "SELECT id FROM " . $this->_prefix . 
+            "articles, " . $this->_prefix."article_categories_link" .
+            " WHERE status=1 AND blog_id = " . $blogId . 
+            " AND category_id = " . $categoryId . 
+            " and article_id = id" .
+            " ORDER BY date LIMIT 1;";
+
+        $result = $this->db->Execute($query);
+	    if(!$result || ($result->RecordCount() == 0))
+            return false;
+
+            // get the information from the article
+        $row = $result->FetchRow();
+
+            // fetch the article
+	    return $this->$_articles->getBlogArticle($row["id"], $blogId);
+    }
+
+    function getLastArticle($categoryId, $blogId){
+            // gets the last article in the category
+        $query = "SELECT id FROM " . $this->_prefix . 
+            "articles, " . $this->_prefix."article_categories_link" .
+            " WHERE status=1 AND blog_id = " . $blogId . 
+            " AND category_id = " . $categoryId . 
+            " and article_id = id" .
+            " ORDER BY date DESC LIMIT 1;";
+
+        $result = $this->db->Execute($query);
+	    if(!$result || ($result->RecordCount() == 0))
+            return false;
+
+            // get the information from the article
+        $row = $result->FetchRow();
+
+            // fetch the article
+	    return $this->$_articles->getBlogArticle($row["id"], $blogId);
+    }
+}
+        
+        
+?>




More information about the pLog-svn mailing list