Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Php разделение на страницы с картинками (http://forum.oszone.net/showthread.php?t=43775)

Maloy clickonline 13-01-2005 22:01 288347

Php разделение на страницы с картинками
 
Вот значит код

PHP код:

<?php
function img() 

    global 
$f$f1$f2
    static 
$nimg=0
    
$nimg++; 
    return 
'<a href="img'.$f.$f1.$f2.$nimg.'.png"><img src="img'.$f.$f1.$f2.$nimg.'.png"></a>'
}
function 
paginate_file($howmuch$filename)
{
    
$out = array();
    
$strings file($filename);
    
$page_num = @$_GET['page'];

    
$total_pages ceil(count($strings) / $howmuch);
    if(
$page_num<|| $page_num>$total_pages$page_num 1;
    
$offset = ($page_num-1) * $howmuch;
    for(
$i=$offset$i<($offset+$howmuch)&&isset($strings[$i]); $i++)
{
    if(
stristr($strings[$i],'#img') )
    {
        
$strings[$i] = str_replace('#','',$strings[$i]); # убираем декорации
        
$strings[$i] = eval($strings[$i].';'); # выполняем строку кода
    
}
        
$out[]=$strings[$i]; # добавляем в выходной массив
}
    
$pages range(1$total_pages);

            return array(
$out$pages);
}


list(
$items$pages) = paginate_file(20"$f$f1$f2.txt");
$npages count($pages);
if (
$npages 1)
{
echo 
'| ';
foreach(
$pages as $number) echo '<a href="'.$_SERVER["PHP_SELF"].'?page='.$number.'&f='.$f.'&f1='.$f1.'&f2='.$f2.'">'.$number.'</a> | ';
echo 
'<br>';
}
foreach(
$items as $item) print ($item."<br>\n");
?>

Необходимо чтобы страницы разделялись по 20 строк, брались из файла $f$f$f2.txt. В том файле может быть строчка #img()# на отдельной строке, при нахождении этой строки должна выполнятся функция img() и появляться картинка на 1 номер больше чем предидущая. Т.е. $f$f1$f2$nimg.png со ссылкой на нее же.Так вот при нахождении #img()# в файле функция не выполняется, она то может и выполняется, но по крайней мере вместо картинки выводится пустая строчка.

mar 13-01-2005 22:38 288353

Maloy clickonline
Цитата:

при нахождении этой строки должна выполнятся функция img()
в упор не вижу в приведенном коде вызова функции img()

Maloy clickonline 13-01-2005 22:46 288354

$strings[$i] = eval($strings[$i].';'); # выполняем строку кода

mar 13-01-2005 22:59 288357

Maloy clickonline
пардон, проглядела. Но больно уж вычурно. А зачем так сложно?

Цитата:

A return statement will terminate the evaluation of the string immediately. In PHP 4, eval() returns NULL unless return is called in the evaluated code, in which case the value passed to return is returned. In PHP 3, eval() does not return a value.
Примените в вашей if - конструкции просто вызов img() и все отработает.

Vlad Drakula 14-01-2005 00:18 288380

Maloy clickonline
1) для вставок PHP кода есть спечиальный тег - [ php ]
2) а почему не сделать так:

PHP код:

<?php
function paginate_file($howmuch$filename)
{
    global 
$f$f1$f2;
    
$nimg=0;
    
$strings file($filename);
    
$page_num = (int)@$_GET['page'];
    
$total_pages ceil(count($strings) / $howmuch);
    if(
$page_num <|| $page_num>$total_pages)
        
$page_num 1;
    
$offset = ($page_num-1) * $howmuch;
    for(
$i=$offset$j = ($offset+$howmuch)<=count($strings)?($offset+$howmuch):count($strings); $i<$j$i++)
      
$out[]=preg_replace('/#img#/ie'"'<a href=\"img\'.$f.$f1.$f2.$nimg.\'.png\"><img src=\"img\'.$f.$f1.$f2.($nimg++).\'.png\"></a>\'",$strings[$i]);

    return array(
$out$total_pages);
}

list(
$items$pages) = paginate_file(20"$f$f1$f2.txt");

if (
$pages 1)
{
for( 
$i 1$i <= $pages$i++)
  echo 
'| <a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'&f='.$f.'&f1='.$f1.'&f2='.$f2.'">'.$i.'</a> ';
echo 
'|<br>';
}
foreach(
$items as $item) print ($item."<br>\n");
?>

помоему так на много понятнее и удобнее!

Maloy clickonline 14-01-2005 01:01 288392

mar
А вот как бы ни фиг, применял уже но вот проблема - Никаких картинок не вылазит!
Если вам будет не сложно, предложите свой вариант кода, напишите.
Vlad Drakula
А спасиба!

Vlad Drakula 14-01-2005 01:16 288400

Maloy clickonline
а что тот ког который я написал сразу взял и заработал???

Maloy clickonline 14-01-2005 01:37 288401

Ну не совсем, страницы то он делит, а вот строки функции img() из текстового файла не читает! И соответственно никаких тебе картинок!

mar 14-01-2005 01:57 288403

хорошо, с функцией:
меняем if(stristr($strings[$i],'#img') ) {bla-bla-bla;} на:
PHP код:

if(stristr($strings[$i],'#img') )
        
$strings[$i] = img(); # выполняем строку кода 


Maloy clickonline 14-01-2005 12:02 288501

mar
Все замечательно работает, почти. (Раньше вроди так пробовал, не получалось, мож после того что-то переработал)

Почти.... Картинки, при переходе начинают исчисляться заново, т.е.
1page: 121.png, 122.png, 123.png, 124.png
2page: 121.png, 122.png
3page: 121.png, 122.png, 123.png
и т.д.
Проблема я думаю ясна надо 9 картинок заставить располагаться по порядку т.е.
1page: 121.png, 122.png, 123.png, 124.png
2page: 125.png, 126.png
3page: 127.png, 128.png, 129.png

Maloy clickonline 14-01-2005 23:08 288633

Все сделал в HTML и не стал мучить мозги!


Время: 10:55.

Время: 10:55.
© OSzone.net 2001-