Paging - del 2

Publicerat: 2013-11-18 16:31:27 | Kategori: PHP & SQL


För drygt ett halvår sedan gjorde jag ett inlägg om paging och först nu så har jag äntligen optimerat koden för att fungera bättre och vara mer anpassat för en blogg. Det stora problemet med den gamla koden var faktiskt att den endast var tillämpad för inläggen på förstasidan. Går man in på en specifik kategori med fler än 10 inlägg så finns det en länk till nästa sida längst ner, men om man trycker på länken kommer man till sida två från förstasidan. Detta är relativt enkelt att fixa med ett "if"-kommando och "$_Get()" enligt nedan.

if (isset($_GET['kategori'])) {
echo "kategori=$_GET[kategori]&";
} else if (isset($_GET['arkiv'])) {
echo "arkiv=$_GET[arkiv]&";                            
} else if (isset($_GET['search'])) {
echo "search&";
}

Däremot så kommer detta ännu ge resultaten i sidor som ett, två, tre och så vidare. Jag vill påstå att detta ser ut som rent 90-tal om det nu inte skulle handla om ett forum. Tittar man på valfri blogg på nätet så är det mycket vanligare med en länk till äldre och nyare inlägg. Detta gör det enklare för besökaren även om det kanske inte ger lika mycket valfrihet.

För att få fram antalet sidor använder jag i princip samma kod som i tidigare inlägg, men vissa små korrigeringar har gjorts för att endast räkna publicerade inlägg.

$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
if (!isset($_GET['id'])) {   
  $pages = implode(mysqli_fetch_assoc(mysqli_query($GLOBALS["___mysqli_ston"], "SELECT COUNT(id) FROM posts WHERE $publicerat $sql_statement")));
}
$pages = ceil($pages / 10);
$querystring = "";
  foreach ($_GET as $key => $value) {
    if ($key != "page") $querystring .= "$key=$value&";
 }

De i röd text får bytas ut mot egen kod, tabeller och rader.

För att ta fram inläggen så är det i princip även här ungefär samma kod, men den har optimerats betydligt sedan förra inlägget.

$sql = "SELECT * FROM posts WHERE $publicerat $sql_statement ORDER BY datum DESC LIMIT " . (($page - 1) * 10) . ", 10";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $sql);

while ($row = mysqli_fetch_assoc($result)) { 

Text,,,

}

Det har skett ofantligt mycket där sidlänkarna visas däremot. Kort och gott så fick jag ändra på hela koden, men på något otroligt vis fick jag det att fungera. Det är inte som att det gick att googla efter andra som delat med sig av liknande kod för det verkar inte alls finnas!

Nedan följer en helt oförändrad kod från min blogg för hur koden för äldre och nyare inlägg visas och länkas.

                  if (($_GET['page'] > 1)) {
                        echo "<a class='div_post_2' href='index.php?";
                        
                            if (isset($_GET['kategori'])) {
                            echo "kategori=$_GET[kategori]&";
                            } else if (isset($_GET['arkiv'])) {
                            echo "arkiv=$_GET[arkiv]&";
                            } else if (isset($_GET['search'])) {
                            echo "search&";
                            }
                        
                        echo "page=";
                            if (isset($_GET['page'])) {
                                echo $_GET['page'] - 1;
                                }
                        echo "'>Nyare inl&auml;gg &raquo;&raquo;</a>";
                    }
        
          if (!($_GET['page'] >= $pages)) {
                        echo "<a class='div_post_1' href='index.php?";
                        
                        if (isset($_GET['kategori'])) {
                            echo "kategori=$_GET[kategori]&";
                            } else if (isset($_GET['arkiv'])) {
                            echo "arkiv=$_GET[arkiv]&";                            
                            } else if (isset($_GET['search'])) {
                            echo "search&";
                            }
                        
                        echo "page=";
                            if (!isset($_GET['page'])) {
                                echo 2;
                            } else {
                                echo $_GET['page'] + 1;
                                }
                        echo "'>&laquo;&laquo; &auml;ldre inl&auml;gg</a>";
                    }

Det blev en hel del text för något väldigt litet! Koden går säkert att optimera något, men det var nog tidskrävande för mig att skriva en helt ny kod som fungerar. cheeky


comments powered by Disqus