Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Функция постраничного вывода.
 
 автор: Clocker   (23.10.2005 в 01:24)   письмо автору
 
 

Есть несколько страниц, например, с новостями, списком статей. Так вот блок кода, отвечающего за постраничный вывод повторяется на каждой странице. Меняется лишь количество выводимых записей и имени таблицы. К примеру:

Часть первая. До выборки из базы


$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>&nbsp;&nbsp;&nbsp; ';
     for ($i=1; $i<=$count_pages; $i++)
         {
          if($entry==$i and $i!=1)
              {
              echo ' <span class="navtext"> [ '.$i.' ] </span>&nbsp; ';
              }
               elseif ($entry==$i and $i==1)
               {
               echo ' <span class="navtext"> [ 1 ] </span>&nbsp;&nbsp; ';
               }
              elseif($i==1 and $entry!=$i)
              {
              echo ' <a class="navlink" href="?page=main&entry='.$i.'"> '.$i.' </a>&nbsp; ';
              }
              elseif($i!=1 and $entry!=$i)
            {
            echo ' <a class="navlink" href="?page=main&entry='.$i.'"> '.$i.' </a>&nbsp;&nbsp; ';
            }
         }
    }


Вопрос: как превратить первую часть приведенного кода в функцию с учетом меняющихся названий таблиц (откуда выбираются записи) и меняющегося количества выводимых записей.? Это делается чтобы не писать один и тот же код на 10 страницах .

Со второй функцией все просто. Она вызывает навигационную строку.

function DisplayNav($all_lines, $p_records, $entry)
    {
    $count_pages = ceil($all_lines / $p_records);
        if ($count_pages>1)
            {
            echo ' <b>'Страницы: '</b>&nbsp;&nbsp;&nbsp; ';
                 for ($i=1; $i<=$count_pages; $i++)
                     {
                      if($entry==$i and $i!=1)
                          {
                              echo ' <span class="navtext"> [ '.$i.' ] </span>&nbsp; ';
                          }
                               elseif ($entry==$i and $i==1)
                           {
                               echo ' <span class="navtext"> [ 1 ] </span>&nbsp;&nbsp; ';
                           }
                              elseif($i==1 and $entry!=$i)
                          {
                              echo ' <a class="navlink" href="?page=news&entry='.$i.'"> '.$i.' </a>&nbsp; ';
                          }
                              elseif($i!=1 and $entry!=$i)
                        {
                            echo ' <a class="navlink" href="?page=news&entry='.$i.'"> '.$i.' </a>&nbsp;&nbsp; ';
                        }
                     }
            }
    }



Заранее спасибо.

   
 
 автор: cheops   (23.10.2005 в 13:39)   письмо автору
 
   для: 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);
}
?>

   
 
 автор: Clocker   (23.10.2005 в 16:57)   письмо автору
 
   для: 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"); 


Все подключение и работа с базой выненсена в отдельный класс. Может скрипт "рубиться" из-за этого?

   
 
 автор: cheops   (23.10.2005 в 19:57)   письмо автору
 
   для: 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); 

?>

   
 
 автор: Clocker   (23.10.2005 в 20:39)   письмо автору
 
   для: 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>&nbsp;&nbsp;&nbsp; ';
                 for (
$i=1$i<=$count_pages$i++)
                     {
                      if(
$entry==$i and $i!=1)
                         {
                          echo 
' <span class="navtext"> [ '.$i.' ] </span>&nbsp; ';
                         }
                          elseif (
$entry==$i and $i==1)
                           {
                            echo 
' <span class="navtext"> [ 1 ] </span>&nbsp;&nbsp; ';
                           }
                            elseif(
$i==and $entry!=$i)
                             {
                              echo 
' <a class="navlink" href="?page=main&entry='.$i.'"> '.$i.' </a>&nbsp; ';
                             }
                              elseif(
$i!=and $entry!=$i)
                                {
                                 echo 
' <a class="navlink" href="?page=main&entry='.$i.'"> '.$i.' </a>&nbsp;&nbsp; ';
                                }
                      }
            }
     }


?>


..........................................................

<?
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);

?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования