|
|
|
| Есть несколько страниц, например, с новостями, списком статей. Так вот блок кода, отвечающего за постраничный вывод повторяется на каждой странице. Меняется лишь количество выводимых записей и имени таблицы. К примеру:
Часть первая. До выборки из базы
$p_records = 10
$db->query("SELECT * FROM _news");
$result = $db->FetchArray();
$all_lines = $db->numRows($result);
if (!isset($entry) or empty($page) or $entry<=0) $entry=1;
else $entry=(int)$entry;
$page_for_query = $entry-1;
$page_for_query2 = $entry+1;
$p_start = $page_for_query * $p_records;
|
..................................Выборка из базы
Часть вторая. После выборки из базы
$count_pages = ceil($all_lines / $p_records);
if ($count_pages>1)
{
// NavArrows Back
echo ' <b>'Страницы:'</b> ';
for ($i=1; $i<=$count_pages; $i++)
{
if($entry==$i and $i!=1)
{
echo ' <span class="navtext"> [ '.$i.' ] </span> ';
}
elseif ($entry==$i and $i==1)
{
echo ' <span class="navtext"> [ 1 ] </span> ';
}
elseif($i==1 and $entry!=$i)
{
echo ' <a class="navlink" href="?page=main&entry='.$i.'"> '.$i.' </a> ';
}
elseif($i!=1 and $entry!=$i)
{
echo ' <a class="navlink" href="?page=main&entry='.$i.'"> '.$i.' </a> ';
}
}
}
|
Вопрос: как превратить первую часть приведенного кода в функцию с учетом меняющихся названий таблиц (откуда выбираются записи) и меняющегося количества выводимых записей.? Это делается чтобы не писать один и тот же код на 10 страницах .
Со второй функцией все просто. Она вызывает навигационную строку.
function DisplayNav($all_lines, $p_records, $entry)
{
$count_pages = ceil($all_lines / $p_records);
if ($count_pages>1)
{
echo ' <b>'Страницы: '</b> ';
for ($i=1; $i<=$count_pages; $i++)
{
if($entry==$i and $i!=1)
{
echo ' <span class="navtext"> [ '.$i.' ] </span> ';
}
elseif ($entry==$i and $i==1)
{
echo ' <span class="navtext"> [ 1 ] </span> ';
}
elseif($i==1 and $entry!=$i)
{
echo ' <a class="navlink" href="?page=news&entry='.$i.'"> '.$i.' </a> ';
}
elseif($i!=1 and $entry!=$i)
{
echo ' <a class="navlink" href="?page=news&entry='.$i.'"> '.$i.' </a> ';
}
}
}
}
|
Заранее спасибо. | |
|
|
|
|
|
|
|
для: Clocker
(23.10.2005 в 01:24)
| | Можно так
<?php
list($all_lines, $entry, $page_for_query, $page_for_query2, $p_start) = pager("_news", $entry, $page, $p_records);
function pager($tbl, $entry, $page, $p_records)
{
$db->query("SELECT * FROM $tbl");
$result = $db->FetchArray();
$all_lines = $db->numRows($result);
if (!isset($entry) or empty($page) or $entry<=0) $entry=1;
else $entry=(int)$entry;
$page_for_query = $entry-1;
$page_for_query2 = $entry+1;
$p_start = $page_for_query * $p_records;
return array($all_lines, $entry, $page_for_query, $page_for_query2, $p_start);
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(23.10.2005 в 13:39)
| | Вываливается ошибка:
Fatal error: Call to a member function on a non-object in F:\home\site\public_html\functions\page.func.php on line 5
На этой строке как раз запрос к базе
$db->query("SELECT * FROM $tbl");
|
Все подключение и работа с базой выненсена в отдельный класс. Может скрипт "рубиться" из-за этого? | |
|
|
|
|
|
|
|
для: Clocker
(23.10.2005 в 16:57)
| | А ну да... думал как бы не забыть передать объект и забыл, $db должно фигурировать в параметрах, как и всё, что потребуется внутри функции
<?php
list($all_lines, $entry, $page_for_query, $page_for_query2, $p_start) = pager("_news", $entry, $page, $p_records, $db);
function pager($tbl, $entry, $page, $p_records, $db)
{
$db->query("SELECT * FROM $tbl");
$result = $db->FetchArray();
$all_lines = $db->numRows($result);
if (!isset($entry) or empty($page) or $entry<=0) $entry=1;
else $entry=(int)$entry;
$page_for_query = $entry-1;
$page_for_query2 = $entry+1;
$p_start = $page_for_query * $p_records;
return array($all_lines, $entry, $page_for_query, $page_for_query2, $p_start);
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(23.10.2005 в 19:57)
| | 2Cheops
Спасибо огромное.
Кому интересно и может пригодится этот код. Разница только в использовании мною класса по работе с базой данных MySQL:
<?
//postr_fns.php
// Функция подсчета строк на постраничный вывод
//Примечание: в принципе, необязательно делать выборку всего из таблицы. Достаточно
//выбрать все id'ы
function DisplayRows($tbl, $db, $entry, $page, $p_records)
{
$db->query("SELECT * FROM $tbl");
$result = $db->FetchArray();
$all_lines = $db->numRows($result);
if (!isset($entry) or empty($page) or $entry<=0) $entry=1;
else $entry=(int)$entry;
$page_for_query = $entry-1;
$page_for_query2 = $entry+1;
$p_start = $page_for_query * $p_records;
return array($all_lines, $entry, $page_for_query, $page_for_query2, $p_start);
}
///////////////////////////////////
// Функция выдает навигационную строку на постраничный вывод
function DisplayNav($all_lines, $p_records, $entry)
{
$count_pages = ceil($all_lines / $p_records);
if ($count_pages>1)
{
echo ' <b>'._PAGE_NAV_PAGES.'</b> ';
for ($i=1; $i<=$count_pages; $i++)
{
if($entry==$i and $i!=1)
{
echo ' <span class="navtext"> [ '.$i.' ] </span> ';
}
elseif ($entry==$i and $i==1)
{
echo ' <span class="navtext"> [ 1 ] </span> ';
}
elseif($i==1 and $entry!=$i)
{
echo ' <a class="navlink" href="?page=main&entry='.$i.'"> '.$i.' </a> ';
}
elseif($i!=1 and $entry!=$i)
{
echo ' <a class="navlink" href="?page=main&entry='.$i.'"> '.$i.' </a> ';
}
}
}
}
?>
|
..........................................................
<?
news.php
// Соответственно в него инклудтся файлы класса и функций
$p_records = 25;
$tbl = 'tbl_news;
list($all_lines, $entry, $page_for_query, $page_for_query2, $p_start) = DisplayRows($tbl, $db, $entry, $page, $p_records);
if (!$db->query("SELECT * FROM $tbl ORDER by id DESC limit ".$p_start." , ".$p_records.""))
{
die($db->error());
}
while ($row = $db->fetchAssoc())
{
//..................................................................................................................
}
//Вывод навигационной строки
DisplayNav($all_lines, $p_records, $entry);
?>
|
| |
|
|
|