Автор Тема: Друзья, помогите чайнику!  (Прочитано 6872 раз)

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

Оффлайн kornels

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Друзья, помогите чайнику!
« : 27 Июня 2002, 10:43:56 »
Я хочу переделать скрипт фотоальбома так, чтобы слева выводилось по 20 подписей к фото, а ниже страницы 1,2,3, ... каждая по 20 фото, подскажите пожалуйста, как это сделать?
Скрипт ниже.


                       
                       
Чемпионы

$basefile="champ.dat";
?>

 

$file=fopen($basefile, "r");
$rf = fread($file, filesize ($basefile));
fclose($file);
$records = explode("\\r\\n", $rf);
$total = count($records) -1;
if(!isset($what)){$what=0;};
   for($i=0; $i <= $total; $i++){
       $record = explode("::", $records[$i]);
       $showi = $i+1;
       $showis = $record[1];
       $counter++;
          if($what==$i){echo "$showis
";
          } else {
                echo "
  • $showis
     ";}
                      if($counter==$per_page) { break; }
    }


    ????????????????????


    ?>                      
             

  • $therecord = explode("::", $records[$what]);
    echo "\\"".$therecord[1]."\\"
    ";
    echo "
  • ".$therecord[1]."
    ";
    $nadprecord = explode("::", $records[$what]);
    echo "".$nadprecord[2]."

    ";
    if($what != 0){
      $previ = $what-1;
      echo "Предыдущая | ";
     }
     if($what < $total){
      $nexti = $what+1;
      echo " Следующая ";
     }
    ?>

  • « Последнее редактирование: 28 Июня 2002, 12:04:32 от kornels »

    Оффлайн ThE0ReTiC

    • Главный по тарелочкам
    • Глобальный модератор
    • Ветеран
    • *****
    • Сообщений: 4041
    • +2/-0
    • 2
      • Просмотр профиля
      • http://
    AS IS...

    Оффлайн kornels

    • Заглянувший
    • Новичок
    • *
    • Сообщений: 8
    • +0/-0
    • 0
      • Просмотр профиля
      • http://
    Друзья, помогите чайнику!
    « Ответ #2 : 28 Июня 2002, 12:02:23 »
    Спасибо конечно, но мне нужна более "чайниковская" консультация, я ведь только начинаю!

    Оффлайн Maniac

    • Ума нет - считай коллега
    • Глобальный модератор
    • Ветеран
    • *****
    • Сообщений: 844
    • +0/-0
    • 2
      • Просмотр профиля
      • http://
    Друзья, помогите чайнику!
    « Ответ #3 : 28 Июня 2002, 12:34:11 »
    Даю совсем уж чайниковую консультацию. Написанный тобой скрипт совсем не оптимален (и очень даже совсем).
    Во-первых, зачем ты считываешь данные из файла, а затем разбиваешь их на строки, которые потом преобразуешь в массив, который потом пользуешь целиком, когда практически все за тебя уже сделали добрые создатели PHP.

    Для того, чтобы считать строки из файла есть специальная функция file(), которая не требует от тебя даже открытия файла и возвращает массив, разбитый на строки.

    Далее, уж коли ты делаешь массив - оптимизируй его, позволь php делать то, что он умеет делать. Функция array_chunk разбивает массив на куски.
     
    Ну и, наконец, зачем использовать один цикл в котором проводится проверка дабы не гипперлинкить текущую страницу, когда такая проверка проводится за тебя компилятором (при прокрутке цикла)? Разбиваешь его на два - и нет проблем.
    Итак, я думаю, ты понял то, что я хотел тебе сказать :)) Поэтому на сладкое привожу код, который делает почти все, что тебе хочется.

    Итак, файл myphotos.txt содержит информацию в формате :
    адрес_картинки::подпись_картинки.
    Поехали...

    <?php
    if (!isset($cur_chunk)) $cur_chunk=0;
    $names=file(\'myphotos.txt\');
    $names=array_chunk($names,20);

    foreach ($names[$cur_chunk] as $photo)
    {
        $photo=explode ("::",$photo);
        print "<a href=\'".$photo[0]."\'>".$photo[1]."</a>
    ";
    }

    print "<hr>
    ";
    for ($i=0;$i<$cur_chunk;$i++)
        print "<a href=\'test.php?cur_chunk=$i\'>$i</a> | ";
    print "$i | ";
    for ($i=$cur_chunk+1;$i<count($names);$i++)
        print "<a href=\'test.php?cur_chunk=$i\'>$i</a> | ";
    ?>
    TANSTAAFL

    Оффлайн kornels

    • Заглянувший
    • Новичок
    • *
    • Сообщений: 8
    • +0/-0
    • 0
      • Просмотр профиля
      • http://
    Друзья, помогите чайнику!
    « Ответ #4 : 28 Июня 2002, 14:20:29 »
    Maniac
    Попробовал протестировать твой код, выдается ошибка:
    Fatal error: Call to undefined function: array_chunk() in f:\\www\\test.php on line 4
    ???
    « Последнее редактирование: 28 Июня 2002, 14:51:15 от kornels »

    Оффлайн Меняздесьдавнонет

    • новичЕк
    • Глобальный модератор
    • Ветеран
    • *****
    • Сообщений: 5698
    • +0/-0
    • 2
      • Просмотр профиля
      • http://
    Друзья, помогите чайнику!
    « Ответ #5 : 28 Июня 2002, 14:39:56 »
    Чунк тут сто лет не нужен.
    Тем более, если менять версию РНР из-за нее.
    Не все ставят себе новый РНР за два дня до выхода. Некоторые работают на старом и проверенном.

    kornels
    Тебе надо просто почитать популярную какую-нибудь книжку про циклы, программирование...

    Оффлайн kornels

    • Заглянувший
    • Новичок
    • *
    • Сообщений: 8
    • +0/-0
    • 0
      • Просмотр профиля
      • http://
    Друзья, помогите чайнику!
    « Ответ #6 : 28 Июня 2002, 14:44:55 »
    RomikChef
    Скажи пожалуйста свое мнение о книге PHP4 Д. Котерова.

    Оффлайн Меняздесьдавнонет

    • новичЕк
    • Глобальный модератор
    • Ветеран
    • *****
    • Сообщений: 5698
    • +0/-0
    • 2
      • Просмотр профиля
      • http://
    Друзья, помогите чайнику!
    « Ответ #7 : 28 Июня 2002, 15:31:51 »
    Не читал, но Котерова уважаю.
    Он в чем-то наивный, но старательный.
    Но в данном случае тбе эта книга поможет слабо.
    Ну, это все равно, что человеку, который вообще водить машину не умеет, рассказывать, чем отличается вождение автобуса от легковушки.
    Тебе надо принцип понимать, а не то, как он реализуется в РНР.
    Тебе надо просто учебник программирования а не конкретно РНР.
    Есть массив. Нумерованные строчки.
    Их можно перебрать циклом, подставляя все возрастающую переменную в индекс массива.
    Это как ячейки в камере хранения. Заглядываем в первую, вторую, третью... сотую.
    Но можно же заглядывать сначала с порвой по десятую, потом с 11 по 20...  и так далее.
    просто в цикл подставлять эти цифры.
    от 21 до 30 по одному подставляем все значения, увеличивая на единицу.
    Число, от которого начинать перебор, передаем по ссылке. Число, до которого перебирать получаем прибавив к первому число ссылок на странице.

    что здесь такого трудного - я правда не понимаю.
    Вместо
    for($i=0; $i <= $total; $i++){
    написать
    for($i=$start; $i <= $start+$fotok_per_page; $i++){

    Оффлайн Maniac

    • Ума нет - считай коллега
    • Глобальный модератор
    • Ветеран
    • *****
    • Сообщений: 844
    • +0/-0
    • 2
      • Просмотр профиля
      • http://
    Друзья, помогите чайнику!
    « Ответ #8 : 30 Июня 2002, 14:28:40 »
    RomikChef
    Вообще-то с точки зрения логики удобнее сразу разбить массив на сегменты дабы в случае возникновения надобности обрабатывать такие сегменты как-то по особому не возиться с циклами и не усложнять программу.
    А array_chunk() работает в версиях начиная с 4.0  - он, по-твоему, зарелизен за два дня до выхода?

    kornels
    Исходник array_chunk (взял с php.net, так что претензии к автору):
    Цитировать


    function array_chunk ($a$s$p=false) {
     
    $r = Array();
     
    $ak array_keys($a);
     
    $i 0;
     
    $sc 0;
     for (
    $x=0;$x<count($ak);$x++) {
      if (
    $i == $s){$i 0;$sc++;}
      
    $k = ($p) ? $ak[$x] : $i;
      
    $r[$sc][$k] = $a[$ak[$x]];
      
    $i++;
     }
     return 
    $r;
    }

    TANSTAAFL

    Оффлайн kornels

    • Заглянувший
    • Новичок
    • *
    • Сообщений: 8
    • +0/-0
    • 0
      • Просмотр профиля
      • http://
    Друзья, помогите чайнику!
    « Ответ #9 : 30 Июня 2002, 18:27:29 »
    Maniac
    Посмотри пожалуйста, что опять не так делаю.
    Скрипт строки считает, говорит на сколько разбито страниц, а на следующую двадцатку не переводит?
    Мне не до изысков, лишь бы надежно работал.

     

    $basefile="champ.dat";
    $per = 22;
    $file=fopen($basefile, "r");
    $rf = fread($file, filesize ($basefile));
    fclose($file);
    $records = explode("\\r\\n", $rf);
    $total = count($records) -1;
    $start = 0;
    if(!isset($what)) $what=0;
    for($i=$start; $i <= $start+$per; $i++)
    {
    $record = explode("::", $records[$i]);
    $showi = $record[1];
    if($what==$i){echo "$showi
    ";
    }
    else
    {
    echo "
  • $showi
     ";
    }
    }
    $general=file($basefile);
    $lines=count($general);
    $all_foto = $lines;
    $pfoto = file("$basefile");
    if ($page == "" or $page < 0)
    {
    $page = "1";
    }
    $first = count($pfoto) - ($per * ($page - 1));
    $second = count($pfoto) - ($per * $page) + 1;
    if ($second < 1)
    {
    $second = 1;
    }
    $pages = (int) ((count($pfoto) + $per) / $per);
    $line = "$symbol";
    for ($per = 1; $per <= $pages; $per++)
    {
    if ($per != $page)
    {
    $line .= " $per $symbol";
    }
    if ($per == $page)
    {
    $line .= " $per $symbol";
    }
    }
    echo "
    ";
    echo "Cтраница: $line";
    ?>                    

  • $therecord = explode("::", $records[$what]);
    echo "\\"".$therecord[1]."\\"
    ";
    echo "
  • ".$therecord[1]."
    ";
    $nadprecord = explode("::", $records[$what]);
    echo "".$nadprecord[2]."

    ";
    if($what != 0){
      $previ = $what-1;
      echo "Предыдущая | ";
     }
     if($what < $total){
      $nexti = $what+1;
      echo " Следующая ";
     }
    ?>


  • Оффлайн Maniac

    • Ума нет - считай коллега
    • Глобальный модератор
    • Ветеран
    • *****
    • Сообщений: 844
    • +0/-0
    • 2
      • Просмотр профиля
      • http://
    Друзья, помогите чайнику!
    « Ответ #10 : 30 Июня 2002, 18:41:46 »
    А с чего бы ему переходить правильно? Ты же каждый раз, когда бежишь по страницам, начинаешь с одного и того же значения $start=0? :)
    Исправь $start=0; на
    $start=($page-1)*$per;

    и все заработает
    TANSTAAFL

    Оффлайн kornels

    • Заглянувший
    • Новичок
    • *
    • Сообщений: 8
    • +0/-0
    • 0
      • Просмотр профиля
      • http://
    Друзья, помогите чайнику!
    « Ответ #11 : 01 Июля 2002, 17:00:15 »
    Maniac
    Спасибо за подсказку.
    Действительно скрипт заработал, но при его запуске появляется только первая запись из champ.dat без ссылок на другие записи, а при постраничном переходе ссылки появляются, но при клике по ним попадаю на начало скрипта. Т. е. показывается только первая запись из champ.dat.
    Как быть с этим?

    Оффлайн kornels

    • Заглянувший
    • Новичок
    • *
    • Сообщений: 8
    • +0/-0
    • 0
      • Просмотр профиля
      • http://
    Друзья, помогите чайнику!
    « Ответ #12 : 11 Июля 2002, 19:33:54 »
    Кто-нибудь! проверьте пожалуйста!
    $show = "20";
    $file = file(\'champ.dat\');
    $count = count($file);
    $start = $show * ($page - 1);
    if(! isset ($what)) $what = 0;
       for($i = $start; $i <= $start+$show; $i++){
           $record = explode("::", $file[$i]);
           $showi = $record[1];
              if($what==$i){echo "$showi
    ";
              } else {
                    echo "$showi
     ";}
    }
    $pages = (int) (($count + $show - 1) / $show);
    if (!is_numeric($page) or $page < 1 or $page > $pages)
    {
    $page = "1";
    }
    $beginning = $count - ($show * ($page - 1));
    $end = $count - ($show * $page) + 1;
    if ($end < 1)
    {
    $end = 1;
    }
    for ($show = 1; $show <= $pages; $show++)
    {
    if ($show != $page)
    {
    $navigation .= " |$show| ";
    }
    if ($show == $page)
    {
    $navigation .= "|$show|";
    }
    }
    echo "
    ";
    echo "Cтраница: $navigation";
    $therecord = explode("::", $file[$what]);
    echo "\\"".$therecord[1]."\\"
    ";
    echo "
  • ".$therecord[1]."
    ";
    $nadprecord = explode("::", $file[$what]);
    echo "".$nadprecord[2]."

    ";
    if($what != 0){
      $previ = $what-1;
      echo "Предыдущая | ";
     }
     if($what < $count){
      $nexti = $what+1;
      echo " Следующая ";
     }
    ?>

  • Оффлайн Covex

    • Только встал и уже устал.
    • Постоялец
    • ***
    • Сообщений: 208
    • +0/-0
    • 2
      • Просмотр профиля
    Друзья, помогите чайнику!
    « Ответ #13 : 11 Июля 2002, 21:34:13 »
    array_chunk
    (PHP 4 >= 4.2.0)

    Оффлайн kornels

    • Заглянувший
    • Новичок
    • *
    • Сообщений: 8
    • +0/-0
    • 0
      • Просмотр профиля
      • http://
    Друзья, помогите чайнику!
    « Ответ #14 : 12 Июля 2002, 13:34:19 »
    Про array_chunk я уже понял, что версия другая. Но мой скрипт над предыдущей зписью не работает так, как хочется.
    Если не трудно, проверьте и подскажите что не так.

     

    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