Класс Paginator

все. Я работаю над сайтом с шаблонами smarty, использующими php и базу данных mysql. Это более конкретный вопрос, чем мой первый вопрос о том, как передать методы классу. Я думал, что будет проще переупаковать вопрос, чем отредактировать старый.

Я написал сценарий paginator для моей галереи изображений, в которой отображаются изображения на странице. Если пользователь выбрал категорию, будут показаны только изображения в определенной категории, и результаты всегда будут разбиты на страницы. Скрипт показан ниже.

$page_num = (isset($_GET['page_num']))?$_GET['page_num']:1; //if $_GET['page_num'] is set then assign to var $page_num. Otherwise set $page_num = 1 for first page $category = (isset($_GET['req1']))?$_GET['req1']:'null'; //if $_GET['req1'] is set assign to $category other set $category to null $items_pp = 5; $total = $db->num_images_gallery($category); //returns the number of records in total('null') or in a particular category('category_name') $pages_required = ceil($total/$items_pp); //total records / records to display per page rounded up if($page_num > $pages_required){//in case the current page number is greater that the pages required then set it to the amount of pages required $page_num = $pages_required; } if($page_num < 1){//in case the current page num is set to less that one set it back to 1 $page_num = 1; } $limit = "LIMIT " .($page_num - 1)*$items_pp . "," . $items_pp . ""; //if 5 results pre page and we on page 3 then LIMIT 10,5 that is record 10,11,12,13 and 14 $result = $db->get_images_gallery($category,$limit); $i = 0; while($row = $result->fetch_assoc()){ $images[$i]['file'] =$row['file']; $images[$i]['file_thumb'] = str_replace('.','_thumbnail.',$row['file']);//show the thumbnail version of the image on the page $images[$i]['title'] = $row['title']; $images[$i]['description'] = $row['description']; $i++; } if(!empty($images)){ $smarty->assign('images',$images);}else{ $smarty->assign('message',"There are no images to display in the ".ucwords(str_replace('_',' ',$category))." category");} if($total > 0 && $pages_required >= 1){//only display this navigation if there are images to display and more than one page $smarty->assign('page_scroll',$page_num . ' of ' . $pages_required); $page_scroll_first = "<a href='".$_SERVER['REDIRECT_URL'] . "?page_num=1"."' >FIRST</a> <a href='".$_SERVER['REDIRECT_URL'] . "?page_num=" . ($page_num-1)."' >&lt;&lt;PREVIOUS</a>"; $page_scroll_last = " <a href='".$_SERVER['REDIRECT_URL'] . "?page_num=". ($page_num+1) . "'>NEXT&gt;&gt;</a> <a href='" . $_SERVER['REDIRECT_URL'] . "?page_num=".$pages_required."'>LAST</a>"; if($page_num == 1){$page_scroll_first = "FIRST &lt;&lt;PREVIOUS";} if($page_num == $pages_required){$page_scroll_last = "NEXT&gt;&gt; LAST";} $smarty->assign('page_scroll_first',$page_scroll_first);//just use if statements to set the values for page scroll first and page scroll last and then assign them here $smarty->assign('page_scroll_last',$page_scroll_last); $smarty->assign('page_num',$page_num); } 

Сценарий вызывает два метода из моего класса базы данных: $ db-> num_images_gallery, который выглядит так:

 function num_images_gallery($cat='null'){ $query = ($cat == 'null')? "SELECT COUNT(*) AS images FROM images LEFT JOIN image_categories ON (images.image_categories_id = image_categories.id) WHERE images.gallery='1' AND image_categories.gallery = '1'"//no images should be shown in a category which is not intended to be shown at all : "SELECT COUNT(*) AS images FROM images LEFT JOIN image_categories ON (images.image_categories_id = image_categories.id) WHERE category = '{$cat}' AND images.gallery='1' AND image_categories.gallery = '1'"; $result = $this->connection->query('SELECT COUNT(*) AS images FROM (?)',$x); $row = $result->fetch_assoc(); $row_count = $row['images']; echo $row_count; return $row_count; } 

и метод $ db :: get_images_gallery (), который выглядит следующим образом:

 function get_images_gallery($category,$limit){ $query = ($category=='null')? "SELECT `file`,title,images.description,sizes,images.gallery,category FROM images LEFT JOIN image_categories ON (images.image_categories_id = image_categories.id) WHERE images.gallery='1' AND image_categories.gallery = '1' {$limit}" : "SELECT `file`,title,images.description,sizes,images.gallery,category FROM images LEFT JOIN image_categories ON (images.image_categories_id = image_categories.id) WHERE category = '{$category}' AND images.gallery='1' AND image_categories.gallery = '1' {$limit}"; $result = $this->connection->query($query); return $result; } 

Теперь я хочу создать класс под названием paginate и поместить в него этот скрипт, чтобы я мог отображать страницы сайта с разбивкой по страницам. Основная проблема заключается в том, что мне нужно использовать разные функции, чтобы получить количество продуктов в моей таблице продуктов, а затем вернуть разбитые на страницы результаты. Как превратить скрипт в класс, где я могу изменить используемые функции. Я почти получил ответ на мой предыдущий вопрос , но вопрос был недостаточно конкретным. Благодаря андрей