Извеждане и подреждане на резултати от файл + странициране.

HunteR

Super Moderator
Сега в този урок ще се опитам да Ви обясня как от даден файл да изкараме резултати като ги подреждаме по брой точки примерно.
Кода включва и странициране.

Така ето какво представлява урокът.
Примерно имаме файла example.txt.
Той съдържа:
Код:
Stoqn|15
Go6o|123
Pe6o|3
Hristo|33
Rumen|10
Nqkaf_si|333
Druga|222

Така както виждате той се съдържа от имена и цифри.
От ляво на "|" са имената на потребителите примерно, а от дясно да кажем са точките им :)
Целта ни е да направим странициране и подреждане по точки.

Ето как ще стане това. Просто си направете един файл с подобни на горните данни и страница с долният код, който ще изкарва тези данни.
Код:
<?php
$file = "example.txt"; // тук пишете файла от, който ще четем
$str = 3; // по колко резултата да изкарва на страница

// тук взимаме информацията от файла
$filesize = @filesize($file);
$fp = @fopen ($file ,"r");
$text = @fread($fp,$filesize);
@fclose($fp);

$razdelqne = explode("\n",$text); // разделяме файла на редове
$kolkooo = count($razdelqne); // преброяваме колко редове съдържа файла
$i = 0;
while($i < $kolkooo) {
$line = explode("|",$razdelqne[$i]);
$masiv[$line[0]] = $line[1]; // вкарваме всяко едно име с неговите точки в масив
$i++;
}
natsort($masiv); // подреждаме масива по-големина на точките
$masiv = array_reverse($masiv); // обръщаме стойностите в масива.
// Ако желаете да започне да показва потребителтие с най-малко точки просто сложете "#" пред горната функция
// Пример: #$masiv = array_reverse($masiv);


$masiv = array_chunk($masiv, $str,TRUE); // разделяме масива на части за да се осъществи страницирането

// определяме на колко страници да извеждаме резултатите
$stranici = floor($kolkooo / $str);
if (($kolkooo % $str) > 0) { $stranici++; }

// правим проверка за избраната страница
if (isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page'] <= $stranici) {
$page = $_GET['page']; // присвояваме избраната страница
} else {
$page = 1; // ако не сме избрали страница се задава по подразбиране
}

$m = $page - 1; // определяме от коя стойност да започне масива
foreach ($masiv[$m] as $key => $value) {
echo "Потребител: <b>$key</b>, Точки: <b>$value</b><br />"; // изкарваме резултатите Може да ги променяте.
}

// Тук извеждаме страниците
echo "<br><br>Страници: ";
for ($i=1;$i<=$stranici;$i++) {
if ($page != $i) {
echo "<a href=\"?page=$i\">$i</a> ";
} else {
echo "$i ";
}
}
?>


Надявам се урокът да Ви е бил полезен :)


Урокът е авторски и забранявам преписването му в други сайтове без мое съгласие!
 
Ти си някъв уникален :D 1 месец не ти чувам ника, освен ако някой не спори нещо за гората и в следващия момент ти идва музата и правиш по 2-3 урока наведнъж или някой друг уникален сайт :) Поздрави
 
deam0n каза:
Ти си някъв уникален :D 1 месец не ти чувам ника, освен ако някой не спори нещо за гората и в следващия момент ти идва музата и правиш по 2-3 урока наведнъж или някой друг уникален сайт :) Поздрави
Хах мерси.
Просто сега нямам много време да пиша, защото разработвам един проект, от който се надявам да припечеля нещо :)
 
Абе скрипта е добър ама имаше някой неща новите редове и това да изкараш повече стойности по-лесно и направих следната модификация:

Код:
14:30|Anonymous|default.jpg|Linux|first title|short descripttion for me|long topic[@#-]

PHP:
<?php
$file = "news.txt";
$str = 4; // по колко резултата да изкарва на страница
$fp = @fopen ($file ,"r");
$filesize = @filesize($file);
$text = @fread($fp,$filesize);
@fclose($fp);

$row = explode("[@#-]",$text);
$countrows = count($row);

// вкарваме всяко едно име с неговите точки в масив
$i = 0;
while($i < ($countrows - 1)) {
$line = explode("|",$row[$i]);
$masiv["$line[$i]"] = $line; 
$i++;
}

// разделяме масива на части за да се осъществи страницирането
$masiv = array_chunk($masiv, $str,TRUE); 
// обръщаме стойностите в масива.
$masiv = array_reverse($masiv); 
// определяме на колко страници да извеждаме резултатите
$stranici = floor($countrows / $str);
if (($countrows % $str) > 0) { $stranici++; }

// правим проверка за избраната страница
if (isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page'] <= $stranici) {
$page = $_GET['page']; // присвояваме избраната страница
} else {
$page = 1; // ако не сме избрали страница се задава по подразбиране
}

$firstrow = $page - 1; // определяме от коя стойност да започне масива
foreach ($masiv[$firstrow] as $value) {
echo "
	<table border=0 cellspacing=0 cellpadding=0 width=500px>
		<tr><td colspan=2><img src=$value[2] width=100 /><br><br></td></tr>
		<tr><td colspan=2 bgcolor=#cccccc><b>Title: </b>$value[4]</td></tr>
		<tr><td colspan=2 bgcolor=#cccccc><b>Author: </b>$value[1]<b> at: </b>$value[0]<b> in category: </b>$value[3]</td></tr>
		<tr><td colspan=2 bgcolor=#cccccc><b>Short text</b></td></tr>
		<tr><td colspan=2>$value[5]</td></tr>
		<tr><td colspan=2 bgcolor=#cccccc><b>Full text</b></td></tr>
		<tr><td colspan=2>$value[6]<hr></td></tr>
	</table>
";
}

// Самото странициране
echo "<br><br>Pages: ";
for ($i=1;$i<=($stranici - 1);$i++) {
if ($page != $i) {
echo "<a href=?page=$i>$i</a> ";
} else {
echo "$i ";
}
}
?>
 

Back
Горе