Meinung zu Forumsnavigation

pnx

Mitglied
Hi beisammen,

zu meinem Forum hab ich ein Navigationsscript gebastelt, dass aus einer id die Forumsstruktur ermittelt und dann die notwendige Navigation ausgibt. Leider hab ich das Gefühl, dass die Sache etwas zu ausladend geworden ist. Vielleicht hat der ein oder andere ne Idee wie man manchen geschickter anstellen kann.

Die notwendigen Variablen werden ermittelt:
PHP:
$site = $_GET['site'];
$site_split = split("/", $site);
$i          = count($site_split)-1;
$file       = substr($site_split[$i], 0, -4);
$id   = $_GET['id'];
$fnav = doBSFNav($id,$file);

Dann die aufgerufene Hauptfunktion:
PHP:
function doBSFNav($id,$file)
    {
        //Filearrays definieren
        $thread   = array("thread","addpost");
        $foren    = array("foren","addthread");
        $forum_s  = array("forum_s");
        $forum    = array("forum");

        if(in_array($file, $thread))
            {
                $fnav = doThreadNav($id);

                //Daten in Navi Speichern
                $fnav_all[3]['name'] = $fnav['name'];
                $fnav_all[3]['id']   = $fnav['id'];
                $id                  = $fnav['sqlid'];

                $fnav = doForenNav($id);

                //Daten in Navi Speichern
                $fnav_all[2]['name'] = $fnav['name'];
                $fnav_all[2]['id']   = $fnav['id'];
                $id                  = $fnav['sqlid'];

                $fnav = doForum_sNav($id);

                //Daten in Navi Speichern
                $fnav_all[1]['name'] = $fnav['name'];
                $fnav_all[1]['id']   = $fnav['id'];
                $id                  = $fnav['sqlid'];

                $fnav = doForumNav();

                //Daten in Navi Speichern
                $fnav_all[0]['name'] = $fnav['name'];
                $fnav_all[0]['id']   = $id;
            }

        elseif(in_array($file, $foren))
            {
                $fnav = doForenNav($id);

                //Daten in Navi Speichern
                $fnav_all[2]['name'] = $fnav['name'];
                $fnav_all[2]['id']   = $fnav['id'];
                $id                  = $fnav['sqlid'];

                $fnav = doForum_sNav($id);

                //Daten in Navi Speichern
                $fnav_all[1]['name'] = $fnav['name'];
                $fnav_all[1]['id']   = $fnav['id'];
                $id                  = $fnav['sqlid'];

                $fnav = doForumNav();

                //Daten in Navi Speichern
                $fnav_all[0]['name'] = $fnav['name'];
                $fnav_all[0]['id']   = $id;
            }

        elseif(in_array($file, $forum_s))
            {
                $fnav = doForum_sNav($id);

                //Daten in Navi Speichern
                $fnav_all[1]['name'] = $fnav['name'];
                $fnav_all[1]['id']   = $fnav['id'];
                $id                  = $fnav['sqlid'];

                $fnav = doForumNav();

                //Daten in Navi Speichern
                $fnav_all[0]['name'] = $fnav['name'];
                $fnav_all[0]['id']   = $id;
             }

        elseif(in_array($file, $forum))
            {
                $fnav = doForumNav();

                //Daten in Navi Speichern
                $fnav_all[0]['name'] = $fnav['name'];
                $fnav_all[0]['id']   = "0";
            }

    return $fnav_all;
    }

Und hier noch die spezifischen Funktionen:
PHP:
function doThreadNav($id)
    {
        $tab_post  = "bs_forum_post";
        // Threadtitel
        $query  = "SELECT foren,titel FROM $tab_post
                  WHERE thread = '". $id ."' and isthread = '1'";
        $result = mysql_query($query);
        $thre_n = mysql_fetch_array($result);

        // Einspeichern der Navi
        $fnav['name']  = $thre_n['titel']; // Name der Nav
        $fnav['id']    = $id;              // ID der Nav
        $fnav['sqlid'] = $thre_n['foren']; // ID zum weiteren auslesen

        return $fnav;
    }

function doForenNav($id)
    {
        $tab_ffor  = "bs_forum_foren";
        // Forenname
        $query  = "SELECT name,kategorie FROM $tab_ffor
                              WHERE id = '". $id ."'";
        $result = mysql_query($query);
        $ffor_n = mysql_fetch_array($result);

        // Einspeichern der Navi
        $fnav['name']  = $ffor_n['name']; // Name der Nav
        $fnav['id']    = $id;              // ID der Nav
        $fnav['sqlid'] = $ffor_n['kategorie']; // ID zum weiteren auslesen

        return $fnav;
    }

function doForum_sNav($id)
    {
        $tab_fkat  = "bs_forum_kategorie";
        // Forum_s
        $query  = "SELECT name FROM $tab_fkat WHERE id = '". $id ."'";
        $result = mysql_query($query);
        $fkat_n = mysql_fetch_array($result);

        // Einspeichern der Navi
        $fnav['name']  = $fkat_n['name']; // Name der Nav
        $fnav['id']    = $id;              // ID der Nav
        $fnav['sqlid'] = "1"; // ID zum weiteren auslesen
        return $fnav;
    }

function doForumNav()
    {
        // Einspeichern der Navi
        $fnav['name']  = "Forumstartseite"; // Name der Nav

        return $fnav;
    }

pnx
 
Hier mal eine Komplette Gästebuchlösung wie man Sie auch an einem Forum anwenden könnte. Ist ein Komlettscript, jedoch kann man auch die Seitenfunktion dann auch in der Logik besser verstehen.

PHP:
// ###### Einstellungen und Optionen des Gaestebuchs ####
$result=mysql_query("SELECT * FROM gbook_optionen LIMIT 1");
while($gbook=mysql_fetch_array($result))
{
$gboffen=$gbook[online]; // ermittelt ob GB offen ist
$gbmaxeintrage=$gbook[maxeintrage]; // legt fest wieviel Eintraege maximal rein duerfen, loescht ggf nach zeit von hinten = betdeute ohne Limit
$bgmaxproseite=$gbook[eintrproseiteite]; // legt fest wieviele Eintrage pro Seite ausgegeben werden sollen
$gbprufen=$gbook[pruf]; // legt fest ob GB Eintrage erst gepruft werden muessen bevor sie veroeffentlich werden koennen
}



// ####### Ist Modul Gaestebuch online #####
if ($gboffen == 0) { header("Location: index.php?get=gbook/offline.php") or EXIT; EXIT;}




// #### Gibt es mehr Eintrage als hoechstens zulaessig werden diese geloescht ######
// #### zaehlen der Eintrage und ggf loeschen! ######
// #### Wenn maximal eintrage nicht gleich null ist loeschen ######
$result=mysql_query("SELECT COUNT(*) FROM gbook");
while($gbeintr=mysql_fetch_array($result))
{
$gbeintranz=$gbeintr[0];
}
if($gbmaxeintrage != 0 && $gbmaxeintrage < $gbeintranz) {
$gbwegmuss = $gbeintranz - $gbmaxeintrage;
$result=mysql_query("SELECT * FROM gbook ORDER BY zeit ASC");
{
for($i=0;$i<$gbwegmuss && ($row=mysql_fetch_array($result));$i++){
unset($theid);
$theid=$row[id];
{ mysql_query("DELETE FROM gbook WHERE id='$theid' LIMIT 1"); }
}
}
}



// ### Pruefen ob ungeprufte GB Eintraege ausgegeben werden duerfen und Bdieunug fue MYSQL schrein #####
if ($gbprufen == 1) { $bedinung = "WHERE gepruft='1'"; }


// #### Seitenausgabe errechnen und Link fuer Seitenwahl in Variable $seitenausgabe stecken #######
if (!isset($seite)) { $seite=1; }
$max_pro_seite=$bgmaxproseite;
$aa=mysql_query("SELECT COUNT(*) FROM gbook $bedinung ");
while($ab=mysql_fetch_array($aa))
{
$eintrage=$ab[0];
}
$last_seite=ceil($eintrage/$max_pro_seite);
$next_seite=$seite+1;
if ($next_seite > $last_seite) { unset($next_seite); } 
if (($seite * $max_pro_seite) - ($max_pro_seite - 1) >= $eintrage) { $seite = $last_seite; }
$seiten_start=($max_pro_seite*$seite)-($max_pro_seite);
$seiten_ende=($max_pro_seite*$seite)-1;
$seitenausgabe .="<b>Seite:</b> ";
for($i=0; $i<$last_seite; $i++)
{
if ($seite == ($i+1)) { $seitenausgabe .="(".($i+1).") "; }
else { $seitenausgabe .="<a class='header' href='index.php?get=gbook/index.php&seite=".($i+1)."'>".($i+1)."</a> "; }
}





// #### ANFANG auslesen der Daten replacen und Ausgabe der Daten nach $bedinung und ausgabe des Templates#####
$showcomments = "10000000";
$countfiles = "0";
$result = mysql_query("SELECT * FROM gbook $bedinung ORDER BY zeit DESC"); 
{ 
for($i=0; $i<$showcomments && ($row = mysql_fetch_array($result)); $i++) 
{
if ($countfiles >= $seiten_start && $countfiles <= $seiten_ende) { // ###Nur wenn zur Seite gehoert!
unset($datum,$text);
$datum=$row[zeit];
include("includes/datum.inc.php");
$gb_outname=$row[name];
$gb_outemail="<a href='mailto:$row[email]' target='_blank'><img src='images/mail.gif' height='14' width='14' border='0' alt='Email schreiben'></a>";
$gb_outhp="<a href='$row[homepage]' target='_blank'><img src='images/home.gif' height='14' width='14' border='0' alt='zur Homepage'></a>";
$text=$row[beitrag];
include("includes/replace.inc.php");
$gb_outbeitrag=$text;
unset($text);
$text=$row[kommentar];
include("includes/replace.inc.php");
$komentar=$text;

// Template
$ausgabe =gettemplate("gbook/beitrag.html");
include("includes/templatecall.inc.php");
$seiteninhalt .=$ausgabe;

}
$countfiles++;
}
}



// ### Kopf des Gbooks ####
$ausgabe =gettemplate("gbook/gbookkopf.html");
include("includes/templatecall.inc.php");
$seiteninhalt ="$ausgabe".$seiteninhalt;

// ### Das GB Formular zum Eintragen, hinten anfuegen ###
if (!isset($gb_entrhp)) { $gb_entrhp="http://"; }
include("includes/bbcodes.php");
include("includes/smilies.php");
// Template
$ausgabe =gettemplate("gbook/gbformular.html");
include("includes/templatecall.inc.php");
$seiteninhalt .="$ausgabe";


// #### Seitenkopf an den Anfang der Seite####
$seiteninhalt ="
<table cellspacing='0' cellpadding='0' width='570' border='0' bgcolor='#F7F7F7'>
<tr> 
<td bgcolor='#DEDEDE' height='1'></td>
</tr>
<tr> 
<td height=20><FONT size=1 class=size1v color=#3B3B3B><b><a class='header'><img src=images/gbook.gif border=0 height=16 width=14>Gästebuch</a></b></FONT></td>
</tr>
<tr> 
<td bgcolor='#DEDEDE' height='1'></td>
</tr>
</table>
$seiteninhalt
";
?>

PS Damit wollte ich kllar machen, dass es eben immer gut ist, sobald die Seitenfunktion immer auf das Script abgestimmt ist.

PPS das resultat hier http://www.2ts2.net/index.php?get=gbook/index.php

PPSS. Die Navigation von dir ist auch gut! Mach etwas mehr daraus. Du siehst tausend Wege führen nach Rom. Finde eben den richtigen!

Hier mal eine Forumnavigation -> http://www.2ts2.net/index.php?get=forum/showpost.php&thisthread_id=361 Das gleiche Prinzip
 
Zuletzt bearbeitet von einem Moderator:
Nachdem ich die db meines Forums nochmal durchgearbeitet hatte, kam mir doch noch eine Idee wie ich auch meine Navigation besser hinbekommen kann, und zwar ganz simple über "switch". Im Vergleich zu vorher nur noch fast 1/3 des Codes ;-)

PHP:
<?php
// Vars
$sqlid = $id;
$n = "";
//Filearrays definieren
$thread   = array("thread","addpost");
$forum    = array("forum","addthread");
$foren    = array("foren");
$board    = array("board");
        
switch($file)
  {
  case(in_array($file, $thread)):
    $n = "3";
    $qry = "SELECT threadid,threadforumid,threadtopic FROM ". $tab_threa ."
           WHERE threadid = '". $sqlid ."'";
    $res = mysql_query($qry);
    $thread = mysql_fetch_array($res);

    $bsfnav[$n]['name'] = $thread['threadtopic'];
    $bsfnav[$n]['id']   = $thread['threadid'];
    $bsfnav[$n]['file'] = $thread['thread'];
    $sqlid              = $thread['threadforumid'];

    $n = $n-1;
  case(in_array($file, $forum) || ($n == "2")):
    $n = "2";
    $qry = "SELECT forumid,forumboardid,forumname FROM ". $tab_foren ."
           WHERE forumid = '". $sqlid ."'";
    $res = mysql_query($qry);
    $forum = mysql_fetch_array($res);

    $bsfnav[$n]['name'] = $forum['forumname'];
    $bsfnav[$n]['id']   = $forum['forumid'];
    $bsfnav[$n]['file'] = $forum['forum'];
    $sqlid              = $forum['forumboardid'];

    $n = $n-1;
  case(in_array($file, $foren) || ($n == "1")):
    $n = "1";
    $qry = "SELECT boardid,boardname FROM ". $tab_board ."
           WHERE boardid = '". $sqlid ."'";
    $res = mysql_query($qry);
    $foren = mysql_fetch_array($res);

    $bsfnav[$n]['name'] = $foren['boardname'];
    $bsfnav[$n]['id']   = $foren['boardid'];
    $bsfnav[$n]['file'] = "foren";

    $n = $n-1;
  case(in_array($file, $board) || $n == "0"):
    $n = "0";
    $bsfnav[$n]['name'] = "Forum Startseite";
    $bsfnav[$n]['file'] = "board";
  }

$smarty->assign('bsfnav', $bsfnav);
$template[] = "boardnav.tpl";
?>

Mal schauen, vielleicht bekomm ich das noch weiter gekürzt :p
 
Zurück