В целом при разработке PHP, когда код php и html смешаны, управлять нумерацией страниц относительно просто, и ее также можно сконструировать в форме функции. В недавней разработке использовалась структура Pear::DB + Smarty, поэтому я рассмотрел возможность разбиения шаблона на страницы. Поскольку страницей нельзя манипулировать напрямую, я рассмотрел возможность создания строки подкачки.
Поскольку это трехуровневая структура в виде библиотеки классов -> вызов PHP -> шаблон, вся обработка данных выполняется в библиотеке классов, поэтому управление подкачкой выполняется при вызове PHP, а шаблон комплексно анализирует результат звонка. Давайте посмотрим непосредственно на код подкачки в нашем вызове PHP:
-------------------------------------- - ----------------------------------------
<?php
/**
* Файл: Type.php
* Функция: отображение книг по категориям.
* Автор: heiyeluren
**/
//Содержит общедоступные файлы, включая библиотеки классов и т. д.
require_once("include.php");
//Создаем экземпляр объекта операции
$Type = new CTypes();
//Количество записей на странице
define("PAGE_SIZE", 10
//Получаем переменные, отправленные GET
$TypeID = $tid ? $tid : intval($_REQUEST['tid']);
//Общее количество книг
$BookTotal = $Type->getBookTotal($TypeID)
/* Ядро отображения страниц*/;
//Получаем общее количество страниц
$pageCount = ($BookTotal/PAGE_SIZE);
//Номер текущей страницы
if (isset($_GET[страница]) && !empty($_GET[страница])) {
$page = intval($_GET[страница]);
} еще {
$страница = 1;
}
если ($page==1) {
$startNum = 0;
} еще {
$startNum = ($page-1) * PAGE_SIZE;
}
//Генерируем строку ссылки на пейджинг
if ($page==1 && $pageCount>1) {
$pageStr = "Предыдущая страница | <a href=/Type.php?tid=".$TypeID."&page=".($page+1).">Следующая страница</a>";
} elseif ($page==$pageCount && $pageCount>1) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1).">Предыдущая страница</a> | Следующая страница";
} elseif ($page>1 && $page<=$pageCount) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1).">Предыдущая страница</a> |
<a href=/Type.php?tid=".$TypeID."&page=".($page+1).">Следующая страница</a>";
} еще {
$pageStr = "Предыдущая страница | Следующая страница";
}
//Получаем текущую запись по количеству страниц
$allBook = $Type->getBookFromType($TypeID, $start=$startNum, $offset=PAGE_SIZE
//Умное присвоение переменной
);
$tpl->assign('BookTotal', $BookTotal);
$tpl->assign('allBook', $allBook);
$tpl->assign('pageStr', $pageStr);
$tpl->display('Type.html');
unset($Type)
;
-------------------------------------------------- ----------------------------------
Для более четкого понимания приведем краткое описание основного содержимого библиотеки классов: (Код неполный)
-------------------------------------------------- ----------------------------------
<?php
/**
* Файл: Type.class.php.
* Функция: тип обработки класса
* www.knowsky.com
* Автор: heiyeluren
**/
Тип класса
{
вар $mDsn;
вар $mTableName;
вар $hPearDB;
//Конструктор;
Тип функции()
{
//...
}
//Получить метод дескриптора класса Pear DB
функция _getDBClass($fetchMode = DB_FETCHMODE_ASSOC)
{
if(!is_object($this->hPearDB)){
$this->hPearDB = DB::connect($this->mDsn);
$this->hPearDB->query("установить имена 'utf8'");
$this->hPearDB->setFetchMode($fetchMode);
if(DB::IsError($this->hPearDB)){
вернуть ложь;
}
}
верните $this->hPearDB;
}
//Получаем общее количество книг
функция getBookTotal($TypeId)
{
$db = $this->_getDBClass();
$sql = "SELECT COUNT(*) AS total FROM...";
$rs = $db->getOne($sql);
если (DB::isError($rs))
вернуть $rs->getMessage();
еще
вернуть $rs;
}
//Получаем все книги
функция getBookFromType($TypeId, $start, $offset)
{
$db = $this->_getDBClass();
$sql = "SELECT * FROM ... LIMIT $start,$offset";
$rs = $db->getAll($sql);
если (DB::isError($rs))
вернуть $rs->getMessage();
еще
вернуть $rs;
}
}
?>
-------------------------------------------------- ----------------------------------
Наконец, давайте посмотрим, как обрабатывается этот шаблон Type.html:
-------------------------------------------------- ----------------------------------
{*Вставьте заголовочный файл*}
{include file="Cendar/head.html"}
<div id="сторона">
<ул>
<li>Общее количество книг: {$BookTotal</li>
</ul>
</div>
<div id="Книга">
<h2 class="cata">Конкретное содержание книги</h2>
<ул>
{имя раздела=Книжный цикл=$allBook}
<li><a href="show_Book.php?tid={$allBook[Book].id}">{$allBook[Book].title}</a></li>
{разделelse}
<li class="warning">Книг на данный момент нет</li>
{/раздел}
</ul>
</div>
{* Отображение строки нумерации страниц*}
<div align="right">
{"GBK"|icov:"utf-8":$pageStr}
</div>
{* вставить нижний файл*}
{include file="Cendar/foot.html"}
-------------------------------------------------- ----------------------------------
Затем мы понимаем ключевой момент и знаем, что мы можем управлять $pagStr из программы PHP как нашей строкой подкачки, и, наконец, она будет заменена в файле шаблона для достижения эффекта.
К этому моменту вы в основном понимаете, как выполнять обработку разбиения по страницам в шаблоне. Конечно, вы также можете написать функцию разбиения на страницы как функцию или инкапсулировать ее в класс, чтобы ее можно было вызывать где угодно. Ха-ха~~~
(Пожалуйста, не перепечатывайте приведенный выше код без разрешения)
Автор: heiyeluren
Дата: 2 августа 2005 г.