Автор Тема: 1 2 3 .... last  (Прочитано 25007 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн bhor

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 767
  • +0/-0
  • 0
    • Просмотр профиля
1 2 3 .... last
« : 30 Января 2002, 15:41:23 »
Есть каталог в нем 300 наименований. На странице показывается 20 наименований. Как сделать чтобы было например как на этом форуме (1 2...10... last)
Помогите

Ооо. Как раз и у меня 300:super:
« Последнее редактирование: 30 Января 2002, 15:48:41 от bhor »

Оффлайн Britva

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1660
  • +0/-0
  • 0
    • Просмотр профиля
    • http://eugeny.com
1 2 3 .... last
« Ответ #1 : 30 Января 2002, 19:08:36 »

function getPages($total$page$link$perpage) {
	
$mpp $perpage;
	
$prev_page $page 1
	
$next_page $page 1

	
if (
$total <= $mpp$pages 1
	
elseif(
$total $mpp == 0$pages $total $mpp;
	
else 
$pages $total $mpp 1;
	
$pages = (int) $pages;

	
$s_pages
	
$page<10 floor($page 10) * 10;
	
$e_pages
	
$page 9;

	
if (
$e_pages $pages) {
	
	
$e_pages $pages;
	
}

	
$s "";

	
if(
$prev_page != 0$s "<a href=\\"".$link."page=1\\"><<</a> \\n";
	
if(
$prev_page) {
	
	
$s .= "<a href=\\"".$link."page=$prev_page\\"><</a> \\n";
	
}

	
for(
$i=$s_pages;$i<=$e_pages;$i++) {
	
	
if (
$i != $page) { 
	
	
	
$s .= "<a href=\\"".$link."page=$i\\">$i</a> \\n"
	
	
} elseif (
$i != 1) {
	
	
	
$s .= " <b>$i</b> "
	
	
} elseif (
$page != $pages) {
	
	
	
$s .= " <b>1</b> ";
	
	
}
	
}
	
if(
$page != $pages) {
	
	
$s .= "<a href=\\"".$link."page=$next_page\\">></a> \\n";
	
	
$s .= "<a href=\\"".$link."page=$pages\\">>></a> \\n";
	
}

	
return 
$s;
}


а вызывать, например

$print_pages = getPages($total, $page, "$PHP_SELF?param1=1& param2=2&", $pp);
где $total - всего записей, $page - текущая страница, $pp - кол-во записей на страницу.
« Последнее редактирование: 30 Января 2002, 21:20:48 от Britva »
Евгений aka Razor,

Оффлайн Dj Fly

  • Simply Dj :-)
  • Постоялец
  • ***
  • Сообщений: 157
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.digitals-pace.com
1 2 3 .... last
« Ответ #2 : 30 Января 2002, 19:37:13 »
Или вот такой вариант, какой больше нравится


<?#########
require("дляSQLконнекта.php");

@
$result=mysql_query("select * from таблновост order by id desc");
@
$n=mysql_num_rows($result);
$ppp=5;
$numpages=ceil($n/$ppp);
if(isset(
$pagenum))
   {
     if(
$pagenum==$numpages)
	
{
$pagestart=($pagenum-1)*$ppp;$pageend=$n;}
     else
	
{
$pageend=$pagenum*$ppp;$pagestart=$pageend-$ppp;}
   }
else
   {
	
if(
$numpages<=1){$pagestart=0;$pageend=$n;}
	
else{
$pagestart=0;$pageend=$ppp;}
   }
for(
$i=$pagestart;$i<$pageend;$i++)
{
 @
$postdate=mysql_result($result,$i,\'postdate\');
 @$newstext=mysql_result($result,$i,\'newstext\');
 @$header=mysql_result($result,$i,\'header\');
 print "<p class=\\"style4\\">".$header." -::- ".$postdate."</p>";
 print "<p class=\\"style3\\">".$newstext."</p>";
}
if($numpages>1)
 {
	
print "<p class=\\"admin\\">Pages: ";
	
?>
	
<a class="admin" href=home.php>1</a>
	
<?
	
for($i=2;$i<=$numpages;$i++)
	
{?>
	
   <a class="admin" href=home.php?pagenum=<?print $i?>> <?print $i?></a>
	
<?}?></p><?
 }
#############
?>


Его реализация на http://www.digitals-pace.com/home.php

Единственно что, я пока его тестировал - запихивал кучу новостей, а сейчас - чистовой вариант - и новости уже начальник будет пихать, так что пока там их мало...

Оффлайн bhor

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 767
  • +0/-0
  • 0
    • Просмотр профиля
1 2 3 .... last
« Ответ #3 : 31 Января 2002, 11:01:29 »
Britva
Dj Fly
Спасибо. Щас буду скрещивать ;)

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
1 2 3 .... last
« Ответ #4 : 31 Января 2002, 20:14:10 »
while($i<$total_katalog){
           if($i%20==0){
             $b_1="";$b_2="";
             $page_print=$i/20;
             if($page_print==$page){$b_1="[";$b_2="]";}
             print "$b_1$page_print$b_2 ";
            }
           ++$i;
           }
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Matvey

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 14
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alfa-spb.ru
Еще раз о разбивке на страницы....?
« Ответ #5 : 13 Марта 2002, 02:04:53 »
Господа, помогите, предположнм есть массив
$massiv=($test); //например для простоты
                               //в нем порядка 1000 элементов            //необходимо их вывести постранично

что нибудь в духе
$i=0
while ($i<1000)
print"$massiv=($test);"
$i++;
endwhile;

выыедит весь "фарш" на одной странице.
Прочитав все вышесказанное я так и не понял как мне  сделать постраничный вавод :)


Возьмем последний пример господина AlieN~а

while($i<$total_katalog){
if($i%20==0){
$b_1="";$b_2="";
$page_print=$i/20;
if($page_print==$page){$b_1="[";$b_2="]";}
print "$b_1$page_print$b_2 ";
}
++$i;
}

Вроде все понятно, ну и что дальше-то, и ссылочки создаются и нумерация, а как страницы генерируются не понимаю... :(





____________________________________________________
Огромная просьба помогите....

Оффлайн Britva

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1660
  • +0/-0
  • 0
    • Просмотр профиля
    • http://eugeny.com
беру мой пример
« Ответ #6 : 13 Марта 2002, 10:27:50 »

<?
if(!isset(
$page)) $page 1;

$pp 50// всего на страницу
$total sizeof($array); // всего записей

$res intval($total $page);
$rem $total $page;

if(
$rem 0) { $res++; }

$pages $res// получили кол-во страниц

$npst = ($page-1)*$pp;
$print_pages getPages($total$page"$PHP_SELF?&"$pp);

print \
'pages: \'.$print_pages.\'
\';
for($i=$npst;$i<($npst+$pp);$i++) {
  print array[$i];
}
?>

вроде правильно.
Евгений aka Razor,

Оффлайн Matvey

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 14
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alfa-spb.ru
Ответ и вопрос?
« Ответ #7 : 14 Марта 2002, 20:51:17 »
INCLUDE("getpages.inc");

$i=0;
while ($i<1000) {
$i++;
$array[$i]=$i;
}
if(!isset($page)) $page = 1; //если $page не существует, то $page=1
$pp = 50; // всего на страницу
$total = sizeof($array); // всего записей  (число элементов массива $array)
$res = intval($total / $page); //целочисленное значение переменной в десятичной системе счисления.
$rem = $total % $page; //остаток от деления

if($rem > 0) { $res++; }

$pages = $res; // получили кол-во страниц
$npst = ($page-1)*$pp; // в начале 0
$print_pages = getPages($total, $page, "$PHP_SELF?&", $pp); //задействовали функцию
print "";
print "";
print "";
print "";
print "";
for($i=$npst;$i<($npst+$pp);$i++) {
print "
$print_pages
";
print "";
print "";
print "";
print "";

}
?>
 Пример работает на ура, большое спасибо,  НО моя проблема заключается в том, то вышеуказанный код вызывается не из самого скрипта, а из библиотеки ( и является функцией).
Например код находится в файле test.inc и заключен между
function view()
{
..............
.............
}
 Тогда...---->



        Untitled



INCLUDE("test.inc")
view();
?>


 Почему-то в этом случае выводиться заголовок, выводится первая страница, но при нажатии на ссылочки (1 2 3 ...) не происходит.
 Как с этим бороться?
Мне кажется, что  дело в "$PHP_SELF?&", но я не уверен.
ПОМОГИТЕ ПОЖАЛУЙСТО..... :(

Оффлайн Matvey

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 14
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alfa-spb.ru
Добавлю....
« Ответ #8 : 14 Марта 2002, 20:55:38 »
Добавлю, что этот пример как тест, задача решается естественно совершенно иная, и выглядет там все гораздо страшней... :)

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
1 2 3 .... last
« Ответ #9 : 15 Марта 2002, 12:19:15 »
Элементарно:
ты просто модульделай без функций т.е. он запускается по вызову и ему уже ничего передавать не надо разве глобализацию тебе придётся сделать
у меня так сделано вот сурс:

function print_type($name,$path,$comment)
{
print \'
$array[$i]

   
     
   
 

       
         
           
         
         
           
           
         
       

             
\'.$name.\'

           
\'.$comment.\'  Смотреть

     

\';
}
if(!$path && !$img)   
{
 $handle = opendir(\'raboty\');
 while (false !== ($file = readdir($handle)))
   {
     if ($file != "." && $file != "..")
    {
    $file1="raboty/$file";
   $infofile="$file1"."/"."info.txt";
   if(is_dir($file1) && file_exists("$infofile"))
      {
      $infodata=file("$infofile");
      $name=rtrim($infodata[0]);
      $path=$file;
      $comment=$infodata[1];
      print_type($name,$path,$comment);
      }
       }
   }
$path=null;
}
if($path && !$img)   
{
 if(!$page){$page=1;}
 $file_img="raboty/"."$path"."/"."$page".".jpg";
 $file_plan="raboty/"."$path"."/"."$page"."_1".".jpg";
 $file_info="raboty/"."$path"."/"."$page".".txt";
 if(file_exists($file_img)){print "  ";}
 if(file_exists($file_plan)){print "  ";}
 if(!file_exists($file_img)){print "
Фотография отсуствует
";}
 if(file_exists($file_info)){readfile($file_info);}
 $count=1;
 $img_file="raboty/"."$path"."/"."1.jpg";
 print "

";
 while(file_exists($img_file))
    {
    if($count==$page){print "";}
   print "$count";
    if($count==$page){print "
";}
    print " ";
    ++$count;$img_file="raboty/"."$path"."/"."$count".".jpg";
   }
}
// СДЕЛАТЬ ПРОТОКОЛИРОВАНИЕ НА КРИВЫЕ КАРТИНКИ
if($img && $pic && $type)
{
$file="raboty/".$img."/".$pic.".jpg";
$src_img=imagecreatefromjpeg($file);
if($type=="mini"){
              $w=250;              
              $h=intval(imagesy($src_img)/(imagesx($src_img)/250));              
             }
if($type=="full"){$w=imagesx($src_img);$h=imagesy($src_img);}
header("Content-type: image/jpeg");
$im=ImageCreate($w,$h);
ImageCopyResized($im,$src_img,0,0,0,0,$w,$h,ImageSX($src_img),ImageSY($src_img));
imagejpeg($im);
}
?>

Вызываётся он инклудом из главного файла index.php сам он jobs.php
« Последнее редактирование: 15 Марта 2002, 19:40:17 от AlieN »
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Matvey

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 14
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alfa-spb.ru
Там еще проблемка...
« Ответ #10 : 15 Марта 2002, 21:40:57 »
Alien это я пишу еще до теста твоего примера, если делать как я писал выше, то ошибка кроется в потере переменных, т.е. при вызове функии getpages, (хоть include, хоть в теле php, который вызываем) например

PHP:--------------------------------------------------------------------------------
INCLUDE("getpages.inc");

$i=0;
while ($i<1000) {
$i++;
$array[$i]=$i;
}
if(!isset($page)) $page = 1; //если $page не существует, то $page=1
$pp = 50; // всего на страницу
$total = sizeof($array); // всего записей (число элементов массива $array)
$res = intval($total / $page); //целочисленное значение переменной в десятичной системе счисления.
$rem = $total % $page; //остаток от деления

if($rem > 0) { $res++; }

$pages = $res; // получили кол-во страниц
$npst = ($page-1)*$pp; // в начале 0
$print_pages = getPages($total, $page, "$PHP_SELF?&", $pp); //задействовали функцию
print "";
print "";
print "";
print "";
print "";
for($i=$npst;$i<($npst+$pp);$i++) {
print "
$print_pages
";
print "";
print "";
print "";
print "";

}
?>
PHP:--------------------------------------------------------------------------------
Вот ример который приведен выше он работает, но как только я изменяю
while ($i<1000) {
$i++;
$array[$i]=$i; }
 положем на

while ($i<$kolvo) {
$i++;
$array[$i]=$i; }

где $kolvo задается не явно ($kolvo=1000;), а передается из другой формы, то превое отображение в норме (первый вызов getpages), но второе и последующее к сожалению нет. Проследил теряется значение $kolvo, попытался обозвать GLOBAL, ноль имоций и даже STATIC, как сделать чтобы getpages заодно возвращала и другие преременные, пускай переданные ей насельно и не используемые
getPages($total, $page, "link", $pp, $kolvo)  ;) ?

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
1 2 3 .... last
« Ответ #11 : 15 Марта 2002, 21:52:43 »
сделай инит кол-ва т.е. хотябы проверь передано ли оно главному скрипту если не поможет - кинь сурс
kex_net@mail.ru
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Matvey

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 14
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alfa-spb.ru
AlieN
« Ответ #12 : 16 Марта 2002, 01:59:57 »
У меня уже параноя скоро начнется, измучился, вообщем добился я того чтобы  на странички разбивалось все что надо, пришлось в параметре
getPages($total, $page, $linc, $pp , $tttt);  добавить еще одну возвращаемую переменную ($tttt- количество записей), но возникла другая проблемма, возможно я не с внимательно читаю оитературу, но ради бога объясните почему например
test.php
INCLUDE \'bbb.inc\'
-----
----
print "$www";

?>

____________________  
bbb.inc
GLOBAL $www;
--------
$www=666;
?>
_____________________

переменная не видится, во вторых почему иногда в годе пишется В третьих обясните как сделать чтобы переменные были видны из включаемых библиотек,
 И самое интересное, допустим есть массив $array=////
ну вообщем в нем много всего $array[1]=1
array[2]=2 и т.п.

почему он толком не передается при
ааа($array) - function в каком-нибудь INCLUDе

Или
возвращаясь к началу разговора
getPages($total, $page, $linc, $pp , $array);  массив не передается.
__________________________________________________
Короче господа, если не лень научите обявлять глобальные массивы и передавать их целиком в какие-нибудь управляющие функции.
И что за зверь return т.к. его вызов ни к чему хорошему не приводит, я всегда пологал, что эта ф-ция возвращает значение функции и прерывает ее действие, но тут что-то похитрее.... :)
PS/
Если так и дальше пойдет плюну на разбиение постраничное и выложу так как есть ;(

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
1 2 3 .... last
« Ответ #13 : 16 Марта 2002, 15:39:19 »
должно всё без global работать если ты не используешь функций а если используешь то объявлешь ей в функции глобальной после её определения а потом в test.php
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Matvey

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 14
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alfa-spb.ru
Вроде Ок
« Ответ #14 : 16 Марта 2002, 16:24:13 »
После долгих мучений все заработало, я использую функции и при передаче параметров приходится очень много лишнего тащить, избавиться от этого можно если передавать массив в getPages($total, $page, $linc, $pp , $array), но почему-то массив не передается
 как передать массив
$array[$i] - всего-то?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 

$array[$i]