Olen käyttänyt sivujeni käyttäjä listassa sivutuksessa tätä https://www.ohjelmointiputka.net/koodivinkit/
Joten miten saisin sivutuksen tähän tyyliin: 1 | 2 | 3 | 4 ... 8 | 9
Onko käytössä oikea tietokanta vai tekstitiedostot? Listaus tyyliin
a | b | c | ... | ö
voisi olla parempi. Eli listataan käyttäjien ensimmäisen kirjaimen perusteella. Tietokannalla tuon toteuttaminen on helppoa, tekstitiedostoilla joutunee kikkailemaan enemmän.
MYSQL tietokanta on käytössä. Voisihan sen noinki tehdä.
Mutta silti pitäis saada toi sivutus juttu kuntoon.
Ensin haet yhdellä kyselyllä kaikki nimien alkukirjaimet ja tulostat linkit sen mukaan. Sitten kun joku alkukirjain on valittu, haet kannasta käyttäjät sen alkukirjaimen mukaan.
Ei mulla mitään ongelmia ton kirjain jutun kanssa ole, mutta ton sivutuksen kanssa on.
No laita tänne mitä olet saanut aikaan, niin katellaan. Mulla on tohon yksi valmis purkka, mutta en kyllä sitä suosiolla pistä esimerkiksi :)
Käytän siis Antin sivutus koodia
<?php $vps = 40; // luetaan osoitteen mukana tullut sivunumero if (isset($_GET['sivu'])) { $sivu = $_GET['sivu']; } $sivu = intval($sivu); $kysely = "SELECT * FROM galleria_users WHERE activation = '1' ORDER BY id LIMIT ".($sivu * $vps).", {$vps}"; //suoritetaan kysely $haku = mysql_query($kysely, $yhteys); $maara = mysql_result(mysql_query("SELECT COUNT(*) FROM galleria_users WHERE activation = '1'", $yhteys), 0); // luodaan sivunumerolista, jos sivuja on useampia if ($maara > $vps) { echo "<p><center>Sivu: "; for ($i = 0; $i < $maara / $vps; $i++) { // tulostetaan pystyviivat sivunumeroiden väliin if ($i <> 0) { echo " | "; } // jos tämä sivu näytetään, tulostetaan sivun numero lihavoituna if ($sivu == $i) { echo "<b>".($i + 1)."</b>"; // muussa tapauksessa luodaan linkki toiselle sivulle } else { echo "<a href=\"{$_SERVER['PHP_SELF']}?sivu={$i}\">".($i + 1)."</a>"; } } echo "</center></p>"; } ?>
Tossa on toi sivunumero lista. En ole vielä tehnyt aakkosellistä listausta käyttäjiin.
No tässä tämä "purkkani":
<?php /* * function sivuta( * $cp niinkuin current page, * $lp niinkuin last page * $url niinkuin sivutuslinkin alkuosa, jonka perään lisätään vain sivunumero * ) */ function sivuta($cp, $lp, $url='?p='){ $sivut = array(); //alusta muutama sivu for($i=1; $i<=5; $i++){ $sivut[$i] = true; } //valitun sivun ympäriltä sopivasti for($i=($cp-2); $i<=($cp+2); $i++){ $sivut[$i] = true; } //lopusta muutama sivu for($i=$lp; $i>=($lp-2); $i--){ $sivut[$i] = true; } $str = NULL; //käydään läpi 1...viimeinen sivu for($i=1; $i<=$lp; $i++){ //jos sivu on asetettu, niin pistetään linkki merkkijonoon talteen if(isset($sivut[$i])){ $str .= $i == $cp ? ' <b>'.$i.'</b> ' : ' <a href="'.$url.$i.'">'.$i.'</a> '; //$k-muuttuja kertoo meille, että merkkijonon viimeisin lisäys on sivutus-linkki $k = true; }else{ $str .= $k === true ? '...' : ''; //$k-muuttuja "pois päältä" => ei lisäillä pisteitä kuin maksimissaa kerran $k = false; }//if-else }//for return $str; }//function ?>
Eli soveltaisin tuohon systeemiisi sitä seuraavasti:
<?php $vps = 40; // luetaan osoitteen mukana tullut sivunumero if(isset($_GET['sivu'])) { $sivu = intval($_GET['sivu']); }else{ $sivu = 1; } $maara = mysql_result(mysql_query("SELECT COUNT(*) FROM galleria_users WHERE activation = '1'", $yhteys), 0); //selvyyden vuoksi nimetään vielä nuo muuttujat samanlailla kuin funktiossakin $cp = $sivu; //lasketaan viimeinen sivu $lp = ceil($maara/$vps); //ja selattavan sivun osoite $url = $_SERVER['PHP_SELF'].'?sivu='; //tarkistus, että osoiteriviltä tullut luku on välillä 1...viimeinen sivu if($cp < 1 || $cp > $lp) $cp=1; //sitten vain sivutellaan. Funktio palauttaa sivutuksen tarkoituksella merkkijonona... $sivutus = sivuta($cp, $lp, $url); //.. jotta saadaan yhdellä funktiokutsulla sivutus sivun yläreunaan.. echo $sivutus; //sivun sisältö $kysely = "SELECT * FROM galleria_users WHERE activation = '1' ORDER BY id LIMIT ".(($cp-1) * $vps).", {$vps}"; //suoritetaan kysely $haku = mysql_query($kysely, $yhteys); for($i=0; $i<100; $i++) echo rand(0,1) ? 'foo' : 'bar'; //.. ja sivun alareunaan echo $sivutus; ?>
Ei kyllä todennäköisesti heittämällä toimi, kun en yhtään testannu koodia ja sivutus-funktiotakaan en testannut pienten siistimisten jälkeen...
Edit: pakkohan tuo nyt oli vielä testata
http://cgi.evtek.fi/~k0101030/sivutusesimerkki.php
Kiitos sain tuon avulla toimiin.
EDIT. Ei lähde oikein toimiin haun kanssa.
Eli ei näytä kaikkia käyttäjiä. Määrä laskuri sanoo oikean lukeman muttei näy sen verran käyttäjiä.
Käyttäjä listalle jouduin muuttaa kohdan $lp = ceil($maara/$vps); täksi $lp = ceil($maara/$vps) -1;
Tässä haun koko koodi:
<?php include "functions.php"; echo "<div class=\"iso\">Tarkennettu haku</div><br /><br />"; if(!$_GET["search"] == "true"){ echo "<table>"; echo "<form action=\"\" method=\"GET\">"; echo "<tr><td>Käyttäjänimi:</td><td><input type=\"text\" name=\"user\" size=\"22\"></tr>"; echo "<tr><td>Oikea nimi:</td><td><input type=\"text\" name=\"realname\" size=\"22\"></tr>"; echo "<tr><td>Paikkakunta:</td><td><input type=\"text\" name=\"city\" size=\"22\"></tr>"; echo "<tr><td>Sukupuoli:</td>"; echo "<td><select name='sex'>"; echo "<option value=''></option>"; echo "<option value='1'>{$lg[176]}</option>"; echo "<option value='2'>{$lg[177]}</option>"; echo "</select></td></tr>"; echo "<input type=\"hidden\" name=\"search\" value=\"true\">"; echo "<tr><td>Etsi</td><td><input type=\"submit\" value=\"Etsi\"></td></tr>"; echo "</form>"; echo "</table>"; } else { $vps = 40; // luetaan osoitteen mukana tullut sivunumero if(isset($_GET['page'])) { $sivu = intval($_GET['page']); }else{ $sivu = 1; } $maara = mysql_result(mysql_query("SELECT COUNT(*) FROM galleria_users WHERE tunnus LIKE '{$_GET["user"]}%' AND oikeanimi LIKE '{$_GET["realname"]}%' AND kaupunki LIKE '{$_GET["city"]}%' AND sukupuoli LIKE '{$_GET["sex"]}%' AND activation = '1'", $yhteys), 0); //selvyyden vuoksi nimetään vielä nuo muuttujat samanlailla kuin funktiossakin $cp = $sivu; //lasketaan viimeinen sivu $lp = ceil($maara/$vps); //ja selattavan sivun osoite $url = "search.php?user=".$_GET["user"]."&realname=".$_GET["realname"]."&city=".$_GET["city"]."&sex=".$_GET["sex"]."&search=true&page="; //tarkistus, että osoiteriviltä tullut luku on välillä 1...viimeinen sivu if($cp < 1 || $cp > $lp) $cp=1; //sitten vain sivutellaan. Funktio palauttaa sivutuksen tarkoituksella merkkijonona... $sivutus = sivuta($cp, $lp, $url); echo "<center>Sivut: ".$sivutus."</center><br /><br />"; echo "<table align=\"center\">"; $kysely = "SELECT * FROM galleria_users WHERE tunnus LIKE '{$_GET["user"]}%' AND oikeanimi LIKE '{$_GET["realname"]}%' AND kaupunki LIKE '{$_GET["city"]}%' AND sukupuoli LIKE '{$_GET["sex"]}%' AND activation = '1' LIMIT ".(($cp-1) * $vps).", {$vps}"; //suoritetaan kysely $haku = mysql_query($kysely, $yhteys) or die("Virhe kyselyssä!"); for ($i = 0; $i < $vps; $i++) { // varmistetaan, että viimeisellä sivulle ei tule ylimääräistä if ($i + $sivu-1 * $vps < $maara) { $id = mysql_result($haku, $i, "id"); $tunnus = mysql_result($haku, $i, "tunnus"); $q = "SELECT kuva FROM galleria_oletukset WHERE tunnus = '".$tunnus."'"; $hakus = mysql_query($q,$yhteys); if($hakus && mysql_num_rows($hakus) == 1){ $oletus = mysql_fetch_assoc($hakus); } $kuva = explode(".", $oletus['kuva']); if($i%5==0){ echo "</tr><tr>"; } if(!mysql_num_rows($hakus) == 0){ echo "<td class=\"kuvkom_tausta\" width=\"140\" height=\"120\"><center><a href=\"user.php?user=".$tunnus."\" class=\"pariton\"><img border=\"0\" src=\"./user_pics/THUMB".$kuva[0].".jpg\"><br/>".$tunnus."</center></a></td>"; } else { echo "<td class=\"kuvkom_tausta\" width=\"140\" height=\"120\"><center><a href=\"user.php?user=".$tunnus."\" class=\"pariton\">".$tunnus."</a></center></td>"; } } } echo "</table>"; $maara = mysql_result(mysql_query("SELECT COUNT(*) FROM galleria_users WHERE tunnus LIKE '{$_GET["user"]}%' AND oikeanimi LIKE '{$_GET["realname"]}%' AND kaupunki LIKE '{$_GET["city"]}%' AND sukupuoli LIKE '{$_GET["sex"]}%' AND activation = '1'", $yhteys), 0); echo "<center>Löytyi ".$maara."</center>"; echo "<br /><br /><center>Sivut: ".$sivutus."</center>"; } ?>
Sain toimii.
Aihe on jo aika vanha, joten et voi enää vastata siihen.