Login   Register  
PHP Classes
elePHPant
Icontem

File: plugins/tbs_plugin_navbar.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Skrol29  >  TinyButStrong template engine  >  plugins/tbs_plugin_navbar.php  
File: plugins/tbs_plugin_navbar.php
Role: Auxiliary script
Content type: text/plain
Description: Plugin NavBar
Class: TinyButStrong template engine
Template Engine for Pro and Beginners
 

Contents

Class file image Download
<?php

/*
********************************************************
TinyButStrong Plug-in: Navigation Bar
Version 1.0.6, on 2008-01-29, by Skrol29
********************************************************
*/

define('TBS_NAVBAR','tbsNavBar');

class 
tbsNavBar {

    function 
OnInstall() {
        
$this->Version '1.0.6';
        return array(
'OnCommand');
    }

    function 
OnCommand($BlockLst,$Options,$PageCurr,$RecCnt=-1,$PageSize=1) {
        
$BlockLst explode(',',$BlockLst);
        foreach (
$BlockLst as $BlockName) {
            
$BlockName trim($BlockName);
            
$this->meth_Merge_NavigationBar($this->TBS->Source,$BlockName,$Options,$PageCurr,$RecCnt,$PageSize);
        }
    }

    function 
meth_Merge_NavigationBar(&$Txt,$BlockName,$Options,$PageCurr,$RecCnt,$PageSize) {

        
$TBS =& $this->TBS;

        
// Get block parameters
        
$PosBeg 0;
        
$PrmLst = array();
        while (
$Loc $TBS->meth_Locator_FindTbs($Txt,$BlockName,$PosBeg,'.')) {
            if (isset(
$Loc->PrmLst['block'])) $PrmLst array_merge($PrmLst,$Loc->PrmLst);
            
$PosBeg $Loc->PosEnd;
        }

        
// Prepare options
        
if (!is_array($Options)) $Options = array('navsize'=>intval($Options));
        
$Options array_merge($Options,$PrmLst);

        
// Default options
        
if (!isset($Options['navsize'])) $Options['navsize'] = 10;
        if (!isset(
$Options['navpos']))  $Options['navpos'] = 'step';
        if (!isset(
$Options['pagemin'])) $Options['pagemin'] = 1;

        
// Check options
        
if ($Options['navsize']<=0$Options['navsize'] = 10;
        if (
$PageSize<=0$PageSize 1;
        if (
$PageCurr<$Options['pagemin']) $PageCurr $Options['pagemin'];

        
$CurrPos 0;
        
$CurrNav = array('curr'=>$PageCurr,'first'=>$Options['pagemin'],'last'=>-1,'bound'=>false);

        
// Calculate displayed PageMin and PageMax
        
if ($Options['navpos']=='centred') {
            
$PageMin $Options['pagemin']-1+$PageCurr intval(floor($Options['navsize']/2));
        } else {
            
// Display by block
            
$PageMin $Options['pagemin']-1+$PageCurr - ( ($PageCurr-1) % $Options['navsize']);
        }
        
$PageMin max($PageMin,$Options['pagemin']);
        
$PageMax $PageMin $Options['navsize'] - 1;

        
// Calculate previous and next pages
        
$CurrNav['prev'] = $PageCurr 1;
        if (
$CurrNav['prev']<$Options['pagemin']) {
            
$CurrNav['prev'] = $Options['pagemin'];
            
$CurrNav['bound'] = $Options['pagemin'];
        }
        
$CurrNav['next'] = $PageCurr 1;
        if (
$RecCnt>=0) {
            
$PageCnt $Options['pagemin']-intval(ceil($RecCnt/$PageSize));
            
$PageMax min($PageMax,$PageCnt);
            
$PageMin max($Options['pagemin'],$PageMax-$Options['navsize']+1);
        } else {
            
$PageCnt $Options['pagemin']-1;
        }
        if (
$PageCnt>=$Options['pagemin']) {
            if (
$PageCurr>=$PageCnt) {
                
$CurrNav['next'] = $PageCnt;
                
$CurrNav['last'] = $PageCnt;
                
$CurrNav['bound'] = $PageCnt;
            } else {
                
$CurrNav['last'] = $PageCnt;
            }
        }

        
// Merge general information
        
$Pos 0;
        while (
$Loc $TBS->meth_Locator_FindTbs($Txt,$BlockName,$Pos,'.')) {
            
$Pos $Loc->PosBeg 1;
            
$x strtolower($Loc->SubName);
            if (isset(
$CurrNav[$x])) {
                
$Val $CurrNav[$x];
                if ((
$CurrNav['bound']!==false) and ($CurrNav[$x]==$CurrNav['bound'])) {
                    if (isset(
$Loc->PrmLst['endpoint'])) {
                        
$Val '';
                    }
                }
                
$TBS->meth_Locator_Replace($Txt,$Loc,$Val,false);
            }
        }

        
// Prepare data to merge
        
$Query '';
        
$Data = array();
        
$RecSpe 0;
        
$RecCurr 0;
        if (isset(
$PrmLst['bmagnet']) and ($PageMin==$PageMax)) {
            
// No data to merge
        
} else {
            for (
$PageId=$PageMin;$PageId<=$PageMax;$PageId++) {
                
$RecCurr++;
                if (
$PageId==$PageCurr$RecSpe $RecCurr;
                
$Data[] = array('page'=>$PageId);
            }
        }

        
// Merge the nav bar
        
$TBS->meth_Merge_Block($Txt,$BlockName,$Data,$Query,'currpage',$RecSpe);

    }

}

?>