jstc

HackForum

jstc#
čau hele mam takovej problem při vypisování novinek na jednu stranku chci treba jen 5 novinek a novinky tam vkladam ze slozky v textove podobe potreboval bych treba kdyz mam 12 novinek aby se dole udelalo 3 stranky a na kazde 5 (553) a hlavne bych to chtel bez sql.

nechcu po vas aby jste me to napsali ale treba nejakej kod uz hotovej nebo neco na inspiraci abych se koukl jak to muze fungovat :) diky
(odpovědět)
php na více stránek | 85.70.56.*3.10.2009 13:52
re: jstc#
<html>
<head>
<http-equiv="content-type" content="text/html" charset="utf-8">
<style>
.zprava {
width: 768px;
height: 180px;
overflow: auto;
border: 1px solid black;
margin-bottom: 10px;
}

.navigace {
text-align: center;
width: 768px;
}
</style>
</head>
<body>
<?php
error_reporting("!E_NOTICE");
$stranka = $_GET['stranka'] ? $_GET['stranka'] : 1;
$zpravy = scandir("zpravy");
array_splice($zpravy, 0, 2);
$pocetZprav = count($zpravy);
$pocetStranek = ceil($pocetZprav / 5);
$prvni = ($stranka - 1) * 5;
$posledni = $prvni + ($stranka < $pocetStranek ? 5 : $pocetZprav - $prvni);
for ($i = $prvni; $i < $posledni; $i++) {
echo("<div class=\"zprava\">");
echo("$zpravy[$i]:<br>".file_get_cont
ents("zpravy/{$zpravy[$i]}"));
echo("</div>");
}
if ($pocetStranek > 1) {
echo("<div class=\"navigace\">");
for ($i = 1; $i <= $pocetStranek; $i++)
echo("<a href=\"zpravy.php?stranka=$i\">$i</a&
gt;&nbsp");
echo("</span>");
} ?>
</body>
</html>

Je to jenom příklad se základní funkčností, bez kontrol, pro představu to postačí. Místama je to trochu prasárna, ale šlo mi hlavně o jednoduchost. Samozřejmě musíš mít složku "zpravy" a v ní texťáky se zprávama. Kdyby nebylo něco jasný, klidně se ptej.
(odpovědět)
800XE | 83.240.95.*4.10.2009 1:28
re: jstc#
Pár řádků je rozdělenejch, ale mělo by stačit tohle zase spojit v jeden:

echo("$zpravy[$i]:<br>".file_get_cont
ents("zpravy/{$zpravy[$i]}"));

a bude to fungovat.


Jo a ještě si oprav

echo("</span>");

na

echo("</div>");
(odpovědět)
800XE | 83.240.95.*4.10.2009 1:40
re: jstc#
ok diky moc jen by me zajimala posledni vec s kterou sem selamal uz predtim jak to radit naopak ? kdyz to pojemnuju ten txt soubor napr. 1.10.2009 a druhej 2.10.2009 tak se prvni vypise 2.10 a pak prvniho chtel bych to naopak ale k tomu sem se taky nedohledal :) jinak diky moc ;)
(odpovědět)
jstc | 85.70.56.*4.10.2009 15:07
re: jstc#
myslim ze se to musi pomoci filemtime zjistit kdy byl vytvoren dat do pole asort a foreach vypisu ale neumim to nejak dat dohromady ech
(odpovědět)
jstc | 85.70.56.*4.10.2009 15:24
re: jstc#
Tohle vlož ještě před výpis zpráv a měly by se ti řadit od nejnovějších:

for ($a = 0; $a < $pocetZprav; $a++)
for ($b = 0; $b < $pocetZprav; $b++)
if (filemtime("zpravy/{$zpravy[$a]}") > filemtime("zpravy/{$zpravy[$b]}")) {
$c = $zpravy[$a];
$zpravy[$a] = $zpravy[$b];
$zpravy[$b] = $c;
}
(odpovědět)
800XE | 83.240.95.*4.10.2009 17:28
re: jstc#
hele diky jede to ale moc ten kod nechapu myslis ze by jsi ho mohl trosku vysvetlit? nejak se tam pricita moc to neberu :)
(odpovědět)
jstc | 85.70.56.*4.10.2009 21:12
re: jstc#
CSS ti je nejspíš jasný, takže to rozebírat nebudu.

error_reporting("!E_NOTICE");

Blokování otravnejch upozornění, který stejně nikoho nezajímají - třeba neinicializovaná proměnná, v tomhle případě $_GET['stranka'] při načtení stránky bez parametru 'stranka'.

$stranka = $_GET['stranka'] ? $_GET['stranka'] : 1;

Pokud se stránka načte s parametrem 'stranka', tak se do proměnný $stranka uloží hodnota parametru. Takže po zadání adresy "zpravy.php?stranka=2" bude v proměnný $stranka hodnota 2. Když bude adresa jenom "zpravy.php"(což bude třeba při prvním načtení), tak se do ní uloží hodnota 1.

$zpravy = scandir("zpravy");

Do $zpravy načte pole, obsahující soubory ze složky "zpravy".

array_splice($zpravy, 0, 2);

Odstraní první dvě položky(0 a 1), který jsou "." a ".." - ty nás totiž nezajímají.

$pocetZprav = count($zpravy);

count() vrací počet prvků pole. Pro zjištění počtu souborů stačí zjistit počet prvků v poli $zpravy.

$pocetStranek = ceil($pocetZprav / 5);

ceil() zaokrouhluje nahoru. Pokud máš dvanáct souborů, který chceš rozdělit po pěti na stránku, tak 12 / 5 = 2,4. A ceil(2,4) je 3. Tím zjistíš, že 12 zpráv se ti vejde na 3 stránky.

$prvni = ($stranka - 1) * 5;

$prvni určuje první zprávu na stránce. Stránky v tomhle případě počítáme od jedničky, proto se od $stranka musí před vynásobením odečíst 1.

1. stránka: (1 - 1) * 5 = 0
2. stránka: (2 - 1) * 5 = 5
...

$posledni = $prvni + ($stranka < $pocetStranek ? 5 : $pocetZprav - $prvni);

$posledni určuje poslední zprávu na stránce. Pokud aktuální stránka není zároveň poslední, tak se k proměnný $prvni přičte 5. Pokud je to poslední stránka, tak ti může zbývat 5 zpráv, ale klidně jenom jedna, takže ($pocetZprav - $prvni) ti vrátí počet zpráv na poslední stránce.

No a cyklus "for" určitě znáš.
(odpovědět)
800XE | 83.240.95.*4.10.2009 22:16
re: jstc#
pani diky neco takoveho sem potreboval abych to poradne pochopil protoze je pekne ze to funguje ale chcu vedet jak :) takze diky za vsechno.

jstc
(odpovědět)
jstc | 85.70.56.*4.10.2009 22:43
re: jstc#
Není zač ;-).
(odpovědět)
800XE | 83.240.95.*4.10.2009 22:46

Zpět
 
 
 

 
BBCode