<--- --------------------------------------------------------------------------------------- ---- Blog Entry: Oh Baby, It's So Hot When You Paginate! (aka Paginating Results In ColdFusion) Author: Ben Nadel / Kinky Solutions Link: http://www.bennadel.com/index.cfm?dax=blog:281.view Date Posted: Sep 21, 2006 at 1:21 PM ---- --------------------------------------------------------------------------------------- ---> // Set up an instance structure to hold instance data. VARIABLES.Instance = StructNew(); // Set default instance data. VARIABLES.Instance.Page = 0; VARIABLES.Instance.Pages = 0; VARIABLES.Instance.PageSize = 15; VARIABLES.Instance.Bucket = 0; VARIABLES.Instance.Buckets = 0; VARIABLES.Instance.BucketSize = 10; VARIABLES.Instance.BucketStartPage = 0; VARIABLES.Instance.BucketEndPage = 0; VARIABLES.Instance.RecordCount = 0; VARIABLES.Instance.Offset = 0; VARIABLES.Instance.Prev = 0; VARIABLES.Instance.Next = 0; VARIABLES.Instance.End = 0; VARIABLES.Instance.Start = 0; VARIABLES.Instance.URL = ""; // Check properites for valid values and ranges. If any of the values is invalid, // set the default or most appropriate value. if (VARIABLES.Instance.PageSize LT 1){ VARIABLES.Instance.PageSize = 15; } if (VARIABLES.Instance.BucketSize LT 1){ VARIABLES.Instance.BucketSize = 5; } if (VARIABLES.Instance.Offset GT VARIABLES.Instance.RecordCount){ VARIABLES.Instance.Offset = VARIABLES.Instance.RecordCount; } if (VARIABLES.Instance.Offset LT 1){ VARIABLES.Instance.Offset = 1; } // Only update the list page if we have a record count to work with. Otherwise, // just return default values. if (VARIABLES.Instance.RecordCount GT 0){ // Figure out how many total pages. VARIABLES.Instance.Pages = Ceiling(VARIABLES.Instance.RecordCount / VARIABLES.Instance.PageSize); // Figure out which page we are on. VARIABLES.Instance.Page = Ceiling(VARIABLES.Instance.Offset / VARIABLES.Instance.PageSize); // Figure out how many total buckets exist. VARIABLES.Instance.Buckets = Ceiling(VARIABLES.Instance.Pages / VARIABLES.Instance.BucketSize); // Figure out which bucket we are in. VARIABLES.Instance.Bucket = Ceiling(VARIABLES.Instance.Page / VARIABLES.Instance.BucketSize); // Get bucket start page. VARIABLES.Instance.BucketStartPage = (((VARIABLES.Instance.Bucket - 1) * VARIABLES.Instance.BucketSize) + 1); // Get bucket end page. VARIABLES.Instance.BucketEndPage = (VARIABLES.Instance.BucketStartPage + VARIABLES.Instance.BucketSize - 1); // Validate end bucket range. if (VARIABLES.Instance.BucketEndPage GT VARIABLES.Instance.Pages){ VARIABLES.Instance.BucketEndPage = VARIABLES.Instance.Pages; } // Readjust the current offset by page. ie. Make the current offset the first item // on the current page. VARIABLES.Instance.Offset = (((VARIABLES.Instance.Page - 1) * VARIABLES.Instance.PageSize) + 1); // Calculate Prev Link. if (VARIABLES.Instance.Page GT 1){ VARIABLES.Instance.Prev = (VARIABLES.Instance.Offset - VARIABLES.Instance.PageSize); } // Calculate Next Link. if (VARIABLES.Instance.Page LT VARIABLES.Instance.Pages){ VARIABLES.Instance.Next = (VARIABLES.Instance.Offset + VARIABLES.Instance.PageSize); } // Set up start and end values. VARIABLES.Instance.Start = VARIABLES.Instance.Offset; VARIABLES.Instance.End = (VARIABLES.Instance.Offset + VARIABLES.Instance.PageSize - 1); // Validate the end row. if (VARIABLES.Instance.End GT VARIABLES.Instance.RecordCount){ VARIABLES.Instance.End = VARIABLES.Instance.RecordCount; } } // Return out. return(true);