Войти

Показать полную графическую версию : Php разделение на страницы с картинками


Maloy clickonline
13-01-2005, 22:01
Вот значит код




<?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<1 || $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
Maloy clickonline
при нахождении этой строки должна выполнятся функция img()
в упор не вижу в приведенном коде вызова функции img()

Maloy clickonline
13-01-2005, 22:46
$strings[$i] = eval($strings[$i].';'); # выполняем строку кода

mar
13-01-2005, 22:59
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
Maloy clickonline
1) для вставок PHP кода есть спечиальный тег - [ php ]
2) а почему не сделать так:




<?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 <1 || $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
mar
А вот как бы ни фиг, применял уже но вот проблема - Никаких картинок не вылазит!
Если вам будет не сложно, предложите свой вариант кода, напишите.
Vlad Drakula
А спасиба!

Vlad Drakula
14-01-2005, 01:16
Maloy clickonline
а что тот ког который я написал сразу взял и заработал???

Maloy clickonline
14-01-2005, 01:37
Ну не совсем, страницы то он делит, а вот строки функции img() из текстового файла не читает! И соответственно никаких тебе картинок!

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

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

Maloy clickonline
14-01-2005, 12:02
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
Все сделал в HTML и не стал мучить мозги!




© OSzone.net 2001-2012