Jako první si nadefinujeme funkci "odkazy", která zajistí, aby veškeré textové odkazy v textu byly převedeny na živé linky. Umí ftp,http,https a mailto. Podotýkám, že fci jsem já nedělal, našel jsem ji kdesi na netu pomocí google.
1 <?
2 function odkazy($text){
3
4 $slovo = split("[[:blank:]]+", $text);
5
6 for ($y = 0; $y < count($slovo); $y++)
7 {
8 if (eregi("^(www\..+\..{2,4}/?.*)", $slovo[$y])) //jedna se odkaz typu www...
9
10
11 {
12 $odkaz = eregi_replace("^(www\..+\..{2,4}/?.*)",
13 "<a href=\"http://\\1\" onclick=\"return!window.open(this.href);\">\\1</a> ", $slovo[$y]);
14 } elseif (eregi("^([fh]{1}[t]{1,2}[p]?[s]?://.+\..{2,4}/?.*)", $slovo[$y])) //jedna se odkaz typu http://...,ftp://... nebo https://...
15 {
16 $odkaz = eregi_replace("^([fh]{1}[t]{1,2}[p]?[s]?://.+\..{2,4}/?.*)",
17 "<a href=\"\\1\" target=\"_blank\">\\1</a> ", $slovo[$y]);
18 } elseif (eregi("^(mailto:.+@.+\..{2,4})", $slovo[$y]))
19 {
20 $odkaz = eregi_replace("^(mailto:(.+@.+\..{2,4}))",
21 "<a href=\"\\1\" onclick=\"return!window.open(this.href);\">\\2</a> ", $slovo[$y]);
22 }else
23 {
24 $odkaz = $slovo[$y] . " "; //jedna se o normalni slovo
25 }
26 $zprava .= $odkaz; //spojime vsechny slova opet dohromady
27 }
28 return $zprava;
29 }
30 ?>
A teď už ten výpis vzkazů :).
1 <?
2 echo "<div id='prispevky'>
3 <ol id='prispevek'>";
4
5 // pokud proměnná $stranka není definována, přiřadíme jí nulu
6 if(empty($stranka) OR !ereg("^[0-9]*$", $stranka)){
7 $stranka=0;
8 }
9
10 $stranka1 = $stranka+10;
11
12 $dotaz = MySQL_Query("SELECT datum,jmeno,email,vzkaz FROM guestbook ORDER BY id DESC LIMIT $stranka,10"); //načeteme data z databáze
13
14 while($zaznam = MySQL_Fetch_Array($dotaz)){
15
16
17 // odstraníme tagy a další blbosti
18 $vzkaz=htmlspecialchars($zaznam[vzkaz]);
19 $zaznam[jmeno]=htmlspecialchars($zaznam[jmeno]);
20 $zaznam[email]=htmlspecialchars($zaznam[email]);
21
22
23 $vzkaz = NL2BR($zaznam["vzkaz"]); //přidáme řádkování
24 $vzkaz = odkazy($vzkaz); //vytvoření odkazů
25
26 echo "<li>
27 <strong>";
28
29
30 // pokud je v kolonce "email" uložená internetová adresa, zobrazíme ji
31 if (ereg("^http:\/\/[[:alnum:]]+([-_\.]?[[:alnum:]])*\.[[:alpha:]]{2,4}(\/{1}[-_~&=\?\.a-z0-9]*)*$", $zaznam[email])){
32 echo "<a href='".$zaznam["email"]."' onclick=\"return!window.open(this.href);\">".$zaznam["jmeno"]."</a>";
33 }
34
35
36 // pokud je v kolonce "email" uložená emalová adresa, zobrazíme ji
37 elseif (ereg("^[_a-zA-Z0-9\.\-]+@[_a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4}$", $zaznam[email])){
38 echo "<a href='mailto:".$zaznam["email"]."'>".$zaznam["jmeno"]."</a>";
39 }
40
41 //pokud tam není ani jedno, zorazíme jen samotné jméno přispívajícího bez odkazu
42 else{
43
44 echo "".$zaznam["jmeno"]."";
45
46 }
47
48
49 echo " - ".$zaznam["datum"]."</strong><br />"; //vypíšeme datum vložení
50
51 //nahradíme v textu vložená čísla za smajlíky
52 $vzkaz = preg_replace('/\*(\d{1,3})\*/', '<img src="images/smajly/\\1.gif" alt="smajlík \\1" />', $vzkaz);
53
54
55 echo "".$vzkaz." //vypíšeme samotný vzkaz
56 <br /><br /></li>";
57 }
58
59
60 echo "</ol></div>";
61
62
63 // a tady už jsou výpočty, na které stránce jste, kolik jich dohromady je a tak dále.. Já se v matice moc neorientuji, takže ač jsem to dělal, už si nepamatuju, co co počítá :)
64 $vpred=$stranka1;
65 $zpet=$stranka-10;
66
67 $vzkazu = mysql_fetch_row(mysql_query("SELECT COUNT(id) FROM guestbook")); //spočítáme celkov počet vzkaů
68
69 $strana=$stranka1/10;
70 $stranek=ceil($vzkazu[0]/10);
71
72 if($strana==0 OR !ereg("^[0-9]*$", $strana)){
73 $strana=1;
74 }
75
76 //pokud jsme na stránce "0", vypíšeme stránku "1"
77 if($stranek==0){
78 $stranek=1;
79 }
80
81 $pred=$vzkazu[0]-$stranka1;
82
83 echo "<br /><br />";
84
85 if ($stranka != 0){
86 echo "<a href=\"kniha.php?stranka=".$zpet."\"><<</a>";
87 }
88
89 echo " Strana $strana / $stranek (celkem $vzkazu[0] příspěvků) ";
90
91 if ($pred > 0){
92 echo "<a href=\"kniha.php?stranka=".$vpred."\">>></a>";
93 }
94 ?>
Tak, a kniha je hotová.. ještě přidám svoje skromné CSS nastylování...
input {
border: 1px solid #222222;
font-size: 11px;
font-family: Verdana, sans-serif;
color: #333333;
background-color: #DDDDDD
}
input:hover,input:focus {
border: 1px solid #666666;
background-color: #ffffff
}
textarea {
font-size: 11px;
font-family: Verdana, sans-serif;
border: 1px solid #222222;
color: #333333;
background-color: #DDDDDD
}
textarea:hover,textarea:focus {
border: 1px solid #666666;
color: #333333;
background-color: #ffffff
}
form {
margin-top: 0px;
margin-bottom: 0px;
}
fieldset{
padding: 5px 15px 5px 8px;
margin: 10px 10px 5px 10px;
border: 1px solid #9F9F9F;
text-align: left;
font-size: 11px;
}
#smajlici {
display: block;
float: right;
padding: 0px 0px 0px 0px;
margin: 0px 0px 0px 0px;
text-align: center;
border: 0px;
width: 230px;
position: relative;
}
#prispevky ol{
color: #444444;
background: #FFE1B6;
border: 1px solid #444444;
padding: 10px 10px 10px 10px;
margin: 0px 0px 0px 10px;
font-size: 11px;
width: 532px;
}
#prispevky li{
color: #444444;
background: #FFE4BF;
border: 1px solid #CCCCCC;
padding: 10px 10px 0 10px;
list-style: none;
}
#prispevky li:hover {
border: 1px solid #666666;
}
Tak, a to je celé. Pokud se mi bude chtít, tak sem přidám i kompletní kód ke stažení pro neznalce :)