PHP Classes

File: plugins/tbs_plugin_bypage.php

Recommend this page to a friend!
  Classes of Skrol29  >  TinyButStrong template engine  >  plugins/tbs_plugin_bypage.php  >  Download  
File: plugins/tbs_plugin_bypage.php
Role: Auxiliary script
Content type: text/plain
Description: Plugin ByPage
Class: TinyButStrong template engine
Template Engine for Pro and Beginners
Author: By
Last change:
Date: 14 years ago
Size: 2,971 bytes
 

Contents

Class file image Download
<?php

/*
********************************************************
TinyButStrong plug-in: ByPage (requires TBS >= 3.1.0)
Version 1.0.5, on 2006-10-26, by Skrol29
********************************************************
*/

define('TBS_BYPAGE','tbsByPage');

class
tbsByPage {

    function
OnInstall() {
       
$this->Version = '1.0.5';
       
$this->PageSize = 0;
        return array(
'OnCommand','BeforeMergeBlock','AfterMergeBlock');
    }

    function
OnCommand($PageSize,$PageNum=0,$RecKnown=0) {
       
// Activate ByPage Mode
       
$this->PageSize = $PageSize;
       
$this->PageNum = $PageNum;
       
$this->RecKnown = $RecKnown;
       
$this->RecNbr = 0;
    }

    function
BeforeMergeBlock(&$TplSource,&$BlockBeg,&$BlockEnd,$PrmLst,&$Src) {

        if (
$this->PageSize<=0) return; // ByPage Mode not actived
       
if (isset($Src->ByPage)) return; // ByPage Mode already processed for the current Data source
       
if ($Src->RecSet===false) return; // No data available

       
if ($Src->RecSaved) {
           
// Data is an array

           
$this->RecNbr = count($Src->RecSet);
            if (
$this->PageNum==-1) { // Last record
               
$Reminder = $this->RecNbr % $this->PageSize;
                if (
$Reminder==0) $Reminder = $this->PageSize;
               
$Src->RecNumInit = $this->RecNbr - $Reminder;
            } else {
               
$Src->RecNumInit = ($this->PageNum-1) * $this->PageSize;
            }

           
$Src->RecSet = array_slice($Src->RecSet, $Src->RecNumInit, $this->PageSize);
           
$Src->RecNbr = $Src->RecNumInit + count($Src->RecSet);

        } else {

           
// Data is not an array => read records, saving the last page in $this->RecBuffer

           
if ($this->PageNum==-1) {
               
$RecStop = -1;
            } else {
               
$RecStop = $this->PageNum * $this->PageSize;
            }

           
// Init internal buffer
           
unset($Src->RecBuffer);
           
$Src->RecSaving = true;

           
// Read records
            
$Src->RecBuffer = array();
           
$RecNum = 0;
           
$Modulo = 0;
           
$ModuloStop = $this->PageSize + 1;
            while ((
$Src->CurrRec!==false) and ($RecNum!==$RecStop)) {
               
$Src->DataFetch(); // Updates $Src->RecBuffer
               
if ($Src->CurrRec!==false) {
                   
$Modulo++;
                   
$RecNum++;
                    if (
$Modulo===$ModuloStop) {
                       
$Src->RecBuffer = array($Src->RecKey => $Src->CurrRec);
                       
$Src->RecNumInit += $this->PageSize;
                       
$Modulo = 1;
                    }
                }
            }

           
// Retreiveing the number of records
           
$this->RecNbr = $RecNum;
            if (
$this->RecKnown==-1) {
               
$Src->RecSaving = false;
                while (
$Src->CurrRec!==false) {
                   
$Src->DataFetch();
                    if (
$Src->CurrRec!==false) $this->RecNbr++;
                }
               
$Src->RecSaving = true;
            }
           
           
$Src->DataClose(); // Close the real recordset source

       
}

       
$x = '';
       
$Src->DataOpen($x); // Read first record, like it is done by TBS before calling this method

        // Deactivate ByPage Mode
       
$this->PageSize = 0;
       
$Src->ByPage = true;

    }

    function
AfterMergeBlock(&$Buffer,&$Src) {
        if (!isset(
$Src->ByPage)) return;
        if (
$this->RecKnown==-1) $Src->RecNum = $this->RecNbr;
    }

}

?>