Вывод списка страниц из текстовой базы

Вывод списка страниц из текстовой базы

Вот код выводит страницы из текстовой базы
PHP:
<?
$file="base.txt";
$strok=file($file);
$all=count($strok);
$s=0;
if ($p < 1){
$p=1;
}
print "<br> Pages: ";
for($i=0;$i<$all;$i++){
$s=$s+1;
if ($s==$p){
print $s ;
}
else{
print "<a href=album.php?p=$s>$s</a> ";
}
$i=$i+8;
}
?>
выводит строки для всей базы с учетом что на одной странице будет 9 строк из базы

я вот хочу реализовать что бы список страниц выводился
так
если допустим p равно значению от 1 до 10 то выводит такой список
<< 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >>
если p = от 11 до 20 то такой
<< 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 >>
и так далее из учета количества строк из базы.

задумался как такое реализовать ... и так ни к чему толковому и не пришел.. подскажите пажалуста с чего начать.. что б реализовать задуманное..
Спасибо
 

Demiurg

Guest
во первых я бы упростил твой вывод.
что то там столько всего понапихано, что жутко аж.
что у тбея за $i, которую ты не используешь ?
 
переменная $i указывает в дальнейшем сколько значений на страницу выводить
 

Demiurg

Guest
когда в дальнейшем ?
мы кажется говорим про рисование ссылок
 

Фанат

oncle terrible
Команда форума
nofx
тебе надо разделить задачу на две части.
1. вывод нужнойстраницы.
Это просто - надо толкьо нужные значения в for подставить.
2. вывод навигации.
Это тоже несложно.
поделить количество записей всего , на количество записей на странице и вывести цифры по порядку.
А вот когда это сделаешь - уже будешь париться с ограничением списка.
Все одним махом ты не сделаешь
Жадность еще никому не помогала
 
to Demiurg:
$i определяет шаг, тоесть количество на одну страницу , тем самым полчаеться кол-во страниц.
в данном случае конечно он роли никакой не играет.

to Фанат:
Спасибо за советы. Теперь есть в каком направлении размышлять. Буду думать.
О результатах сообщу.

-~{}~ 20.02.04 12:08:

значит вот что у меня получилось...
все работает как надо...
если есть замечания пажалуста сообщите
PHP:
<?
$all=count(file("base.txt")); // всего строк в базе
$bridge=ceil(($all/6)/10);  // количество количество промежутков от 0 до 10 и т.д. (округленно)
$pages=ceil($all/6); // всего страниц (округленно)
print "
Всего строк - $all<br>
Промежутков - $bridge <br>
Страниц - $pages
";
for ($i=0; $i<=$bridge; $i++)
{$kol[$i]=$i*10;} // забили в массив $kol все промежутки по 10
$kol[$bridge]=$pages; //последний элемент массива равен всему количеству требуемых страниц
if ($p < 1){$p=1;} //если $p не указали
for ($r=0; $r<=$bridge; $r++)
{if ($p<=$kol[$r])
break;} // получив $p смотрим в каком промежутке находиться
$k=$r-1;
$pr=$kol[$k]; //значение prev
$ne=$kol[$r]+1; //значение next
$s=$kol[$k]; //начальное значение страницы
print "<br> Pages: ";
if ($pr<1){}
else {print "<b><a href=album.php?p=$pr>Prev.</a></b> ";} // убираем ненужное prev
for($o=$kol[$k];$o<$kol[$r];$o++){
$s=$s+1;
if ($s==$p){print "<font color = #6699CC>$s</font> ";}
else print "<a href=album.php?p=$s>$s</a> ";} // рисуем номера страниц
if ($ne>$pages){}
else {print "<b><a href=album.php?p=$ne>Next</a></b> ";} // убираем ненужное next
?>
да + я что-то совсем прогнал...
$i в первом коде должен быть обязательно... :)
 

Фанат

oncle terrible
Команда форума
если честно, то разбираться совсем не хочется.
уж больно код кривой.
какой-то массив кол. какой-то цикл, в котором оно получается.
ты только на счетных палочках умеешь считать, умножение в школе еще не проходили?
ЗАЧЕМ ты полез делать все скопом, когда я сказал тебе делать по частям?
ПОЧЕМУ у тебя все коды перемешаны?

Коду вывода строк нужен ТОЛЬКО номер страницы, а вся эта лабуда не нужна.
Сам же через неделю уже не будешь понимать, что у тебя зачем?

Сделай два блока - вывод строк и вывод навигации.
И нафигацию упрости раз в 10.

-~{}~ 21.02.04 13:10:

Я тебе сказал - "бриджи" твои делать в ПОСЛЕДНЮЮ очередь!
потому, что они - только украшение.
НИКАКОГО отношения к выволду строк не имеют.
А у тебя на них весь код завязан
 
привет!
[стараяюсь попрядку отвечать на вопросы ]

вивдимо в школе по php я еще только на палочках умею... :(

я не совсем понял, что ты мне посоветовал...
а именно
1. вывод нужной страницы.
это есть и мне писать заново не зачем было....
2. вывод навигации
ворос топика заключался только в выводе навигации
исключительно по 10 значений...
вывод навигации уже был и код приведен в первом сообщении....
потому, что толком не понял твои советы..
еще раз вопрос у меня заключался только в выводе навигации
по 10 значений

в данный код(второй) не занимаеться выводом страницы...
это код толко навигацию выводит

боюсь моих знаний не хватит что бы сделать проще...

:) :confused:

помоги подскажи как нужно было сделать проще и почему...
спасибо.
 

Фанат

oncle terrible
Команда форума
вывод навигации уже был и код приведен в первом сообщении....
скажи, ты просто врешь или сам в это веришь?
там приведен код вывода ОДНОЙ страницы!
безо всякой навигации!

это есть и мне писать заново не зачем было....
зачем врать?
не было у тебя вывода НУЖНОЙ страницы.
у тебя был только вывод всех записей на ОДНУ страницу.

Помочь я тебе ничем не могу.
Ты не делаешь что, что я тебе говорю.
Какой смысл тогда просить о помощи?

вивдимо в школе по php
НЕ НАДО сюда приплетать пхп.
пхп - это только описание действий.
а сами действия ты должен придумать, и к языку это не относится.
Это все равно, если бы тебе надо было написать статью, а потом перевести ее на английский, а ты бы не сделал, оправдываясь тем, что не знаешь английского.

Ты просто не понимаешь, что тебе нужно сделать.
пхп здесь вторичен.
он делает то, что ты ему скажешь.
Но тебе надо сначала придумать, что сделать.
а вот это ты и безо всякого пхп не можешь.
и не надо на него сваливать
 

Фанат

oncle terrible
Команда форума
офигенно.
человеку, который не понимает, что он делает, вместо одного кривого кода предлагают другой
 
Originally posted by Фанат
скажи, ты просто врешь или сам в это веришь?
Я не вру!

я не вру еще раз

не было у тебя вывода НУЖНОЙ страницы.
яне постил я в топик кусок кода который этим занимаеться...хотя на самом деле оно у меня есть
вот что я хотел, и вопрос заключался исключитьльно толко в этом!
>>я вот хочу реализовать что бы список страниц выводился
так
если допустим p равно значению от 1 до 10 то выводит такой список
<< 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >>
если p = от 11 до 20 то такой
<< 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 >>
и так далее из учета количества строк из базы.



у тебя был только вывод всех записей на ОДНУ страницу.
да привильно!

Помочь я тебе ничем не могу.
Ты не делаешь что, что я тебе говорю.
Какой смысл тогда просить о помощи?
как я могу сделать то, что ты просишь если я не понял о чем ты меня просишь???

НЕ НАДО сюда приплетать пхп.
ну так Фанат, прошу выскажи как надо было реализовать единственное!!!!
вывод на страницу Цифр которые указывают на другие страницы..
пример
1 2 3 4 5 6 7 8 9 и так далее

Но тебе надо сначала придумать, что сделать.
я и придумал как это сделать могу описать все как создавался код!

Фанат! не стоит так агрессивно!
Спасибо.
 

Фанат

oncle terrible
Команда форума
я написал тебе уже несколько раз.
не надо хвататься за все сразу.
Надо делать постепенно. ПО. ШАГАМ.
Неужели это непонятно?

ПЕРВОЕ.
научиться выводить любую страницу.
просто РУКАМИ задавая начальное и конечное значение.
С грехом пополам ты это умеешь.

ВТОРОЕ
научиться выводить навигацию, список ссылок на страницы безо всяких ограничений.
если сто страниц - то сто и выводим. Для простоты. чтобы научиться это делать.

И вот только после того, как мы этот скрипт сделаем, отладим и упростим - ТОЛЬКО ТОГДА будем укорачивать список страниц.

Что из написанного мной непонятно?

-~{}~ 23.02.04 11:09:

я и придумал как это сделать могу описать все как создавался код!
раз придумал, то не стоит валить на незнание пхп свое неумение умножать.
ы?
 
я написал тебе уже несколько раз.
не надо хвататься за все сразу.
Надо делать постепенно. ПО. ШАГАМ.
Неужели это непонятно?
понятно.

ПЕРВОЕ.
научиться выводить любую страницу.
просто РУКАМИ задавая начальное и конечное значение.
С грехом пополам ты это умеешь.
да это я сдеал
ну вот допустим
как у меня это в коде
выводит
PHP:
<?
// передали скрипту $p тоесть номер страницы. 
$file="base.txt";
$strok=file($file);
if ($p < 1){$p=1;}//если не передали.
$r1=$p*9-9;// по девять строк.
$r2=$p*9;
// подставили нужное в for
for($i=$r1;$i<$r2;$i++){

list ($a01,$a02)=split("\|","$strok[$i]"); 
echo "$a01 и $a02";
}
?>

ВТОРОЕ
научиться выводить навигацию, список ссылок на страницы безо всяких ограничений.
если сто страниц - то сто и выводим. Для простоты. чтобы научиться это делать.
хорошо переходим ко второму шагу.

PHP:
<?
$file="base.txt";
$strok=file($file);
$all=count($strok);
$s=0;
if ($p < 1){$p=1;}
for($i=0;$i<$all;$i++){
$s=$s+1;
if ($s==$p){
print "<a href=album.php?p=$s>$s</a> ";
}
else{
print "<a href=album.php?p=$s>$s</a> ";}$i=$i+8;}
?>
какие замечания ?

теперь я просто эти два кода объединю в один файл
PHP:
<?
$file="base.txt";
$strok=file($file);
$all=count($strok);
$s=0;
if ($p < 1){$p=1;}
for($i=0;$i<$all;$i++){
$s=$s+1;
if ($s==$p){
print "<a href=album.php?p=$s>$s</a> ";
}else{
print "<a href=album.php?p=$s>$s</a> ";}$i=$i+8;}
print "<br>";
 
$r1=$p*9-9;// по девять строк.
$r2=$p*9;
// подставили нужное в for
for($i=$r1;$i<$r2;$i++){

list ($a01,$a02)=split("\|","$strok[$i]"); 
echo "$a01 и $a02<br>";
}?>
каки замечания..?

И вот только после того, как мы этот скрипт сделаем, отладим и упростим - ТОЛЬКО ТОГДА будем укорачивать список страниц.
я это реализовал тем большим кодом с комментариями и "бриджами".

Что из написанного мной непонятно?
все понятно..
а что теперь из моего не понятно?

раз придумал, то не стоит валить на незнание пхп свое неумение умножать.
ну так объясни где и как надо применять умножение в пхп я не пойму для чего..? [речь только о выводе навигации]
Спасибо.
 

Фанат

oncle terrible
Команда форума
хе, и правда.
вот этого $i=$i+8; я и не заметил.
Вот откуда у твоей кривизны ноги и растут.

Замечания такие.
ты пляшешь не от количества СТРАНИЦ, что было бы естественно, а от количества записей.
Это еще прокатывает, пока ты выводишь полный список, но когда ты этот метод пытаешься натянуть на ограничение списка, получается совсем уж монстр.

Тебе список СТРАНИЦ надо?
Ну так и пляши от списка СТРАНИЦ.
определи количество страниц, и цикл делай по нему!
во-первых, ты избавишься от паразитной переменной $s
Во-вторых, и самое главное - ты при таком подходе на список страниц перенесешь ТОТ ЖЕ САМЫЙ принцип, что и на вывод нужной страницы!
только там ты определяешь, с какой по какую выводить запись, а тут - с какой по какую выводить номера страниц.
И ТОЧНО ТАК ЖЕ подставляешь начальное и конечное значение в цикл.
все.

как получить эти значения умножением, а не в цикле, сам уж, надюсь, сообразишь? Номер записи, с которой выводить, ты же получаешь умножением?

для узнавания количества страниц тебе понадобится функция [m]ceil[/m]()

будешь отвечать - не забывай принцип.
сначала приведи здесь код навигации по ВСЕМ страницам, мы на него посмотрим и поправим, если надо, а потом будешь делать с ограничением.

-~{}~ 23.02.04 12:24:

и еще очень важное замечание.
Если тебе захочется изменить количество выводимых записей на страницу, то тебе придется править свой код в огромной куче мест.
сделай переменную, присвой ей значение, и подставляй в вычисления вместо своих 8 и 9
 
вот упрощенный, как ты мне посоветовал
выводит навигацию от списка страниц
без ограничения
PHP:
<?
$v=10; //количество на страницу
$pages=ceil(count(file("base.txt"))/$v);
if ($p<1){$p=1;}
for($i=1;$i<=$pages;$i++)
{if ($i==$p){print " $i ";}
else{print "<a href=2album.php?p=$i>$i</a> ";}}
?>
теперь, думаю как сделать ограничение
по принцыпу кода "монстра"
тоесть определяем в каком промежутке стоит $p
и потом подставляем ограницения промежутка в for
в примере с аналогичным выводом требуемой страницы дела обстоят
не так
там ведь выводит строки на страницу точно по значению переменной
$p.
а в навигации если $p рано от 1 до 11 то естественно
for ($i=1;$i<=11;$i++);
 

Фанат

oncle terrible
Команда форума
$pages=ceil(count(file("base.txt"))/$v);
ужас какой.
надеюсь, в рабочем скрипте ты подставишь $all вместо count(file("base.txt"))?
в остальном нормально.

хотя погоди
вот за это
{if ($i==$p){print " $i ";}
надо бить по рукам. больно
ты знаешь, КАКУЮ подлянку ты делаешь человеку, который будет читать этот твой код?
у тебя строку открывает фигурная скобка от одного оператора, а закрывает - от другого!
Это, конечно, ошибка не в скрипте, а в оформлении, но ошибуа чудовищная.

ну специально же люди придумали отступы и переносы на другую строку, чтобы видеть ЛОГИКУ скрипта!
PHP:
<? 
$v=10; //количество на страницу 
$pages=ceil(count(file("base.txt"))/$v); 
if ($p<1){$p=1;} 
for($i=1;$i<=$pages;$i++) {
  if ($i==$p) {
    print " $i ";
  } else {
    print "<a href=2album.php?p=$i>$i</a> ";
  }
} 
?>
ну тебе же самому будет легче читать этот структурированный код, чем ту мешанину!

в примере с аналогичным выводом требуемой страницы дела обстоят так же.
надо в цикл подставить начальное и конечное значение.
ЕСТЕСТВЕННО, что не на 100% так же - эти значения надо сначала найти.
Но ПРИНЦИП - тот же.
А найти - это 4 строчки.
вместо твоей одной про п

берешь, отнимаешь 10 (переменной, конечно же) от п, потом подравниваешь слева (как раз твоя существующая строчка)
потом к полученному прибавляешь 10, и подравниваешь справа.
вот тебе и готовы твои начальное и конечное.
 
да в рабочем я поставлю $all
по поводу правильности написания кода понял :)
непонял единственное
"подравниваешь слева"
"подравниваешь справа"
тем самым проявляя всю свою тупость :)
 
Сверху