Hej Alle,
Jeg er ved at lave et mindre CMS som jeg vil benytte som backend til at lave hjemmesider med.
Alt indhold kommer fra databasen.
I databasen har jeg to tabeller:
1)"SUBJECTS" (Den skal fungere som en global horisontal navigation, og vises fint pt.)
2)"(PAGES)" (Den skal vises som en sub.navigation i venstre side, og lige nu vises alle pages(Undersider))
Mit problem er:
Lige nu, har jeg trukket ALLE SUBJECTS ud, fra databasen. Hvilket er meningen.
MEN også ALLE PAGES, dvs. mine undersider - De vises også ALLE sammen. Jeg vil gerne lave det sådan at når jeg klikker på et SUBJECT, så vises KUN de relevante undersider, i min venstre "under-menu".
For at kunne binde de to tabeller sammen, har jeg i databasen oprettet en række i tabellen "PAGES", som hedder "SUBJECTID". Det er en integer, og den refererer til det unikke ID hver enkelt række i tabellen "SUBJECTS" har.
Som jeg ser det, vil det også være nødvendigt at ændre i den første kode jeg viser jer her nedenfor. Samt mine database forespørgsler vil jeg tro.
Her kommer min kode. Som det første har jeg en lille kode der bestemmer om enten et subject, eller en page er blevet valgt/klikket.
- if (isset($_GET['sid'])) {
- $subjectid = ($_GET['sid']);
- $pageid = NULL;
- $subjectid = preg_replace("[^0-9]", "", $_GET['sid']); // filter everything but numbers for security
- } elseif (isset($_GET['pid'])){
- $subjectid = NULL;
- $pageid = ($_GET['pid']);
- $pageid = preg_replace("[^0-9]", "", $_GET['pid']); // filter everything but numbers for security
- } else {
- $subjectid = NULL;
- $pageid = NULL;
- }
Herefter opbygger jeg navigationen, vedr. "SUBJECTS" - Altså hovedsiderne.
- // Query the body section for the proper subject------------------------------------------
- $sqlCommand = "SELECT subjecttitle, subjectbody FROM subjects WHERE id='$subjectid' LIMIT 1";
- $query = mysqli_query($myConnection, $sqlCommand) or die (mysqli_error());
- while ($row = mysqli_fetch_array($query)) {
- $subjecttitle = $row['subjecttitle'];
- $subjectbody = $row["subjectbody"];
- }
- mysqli_free_result($query);
- //-------------------------------------------------------------------------------------
- //-------------------------------------------------------------
-
-
- // Build SUBJECT navigation and gather SUBJECT data here--------------------------------
- $sqlCommand = "SELECT id, linklabel, pos FROM subjects WHERE showing='1' ORDER BY pos ASC";
- $query = mysqli_query($myConnection, $sqlCommand) or die (mysqli_error());
-
- $SubjectMenuDisplay = '';
- while ($row = mysqli_fetch_array($query)) {
- $sid = $row["id"];
- $linklabel = $row["linklabel"];
- $position = $row['pos'];
-
- $SubjectMenuDisplay .= '<li><a href="index.php?sid=' . $sid . '">' . $linklabel . '' . $position . '</a></li>';
-
- }
- mysqli_free_result($query);
Herefter opretter jeg navigationen for mine undersider, altså "PAGES", på præcis den samme måde:
- // Query the body section for the proper page------------------------------------------
- $sqlCommand = "SELECT pagetitle, pagebody FROM pages WHERE id='$pageid' LIMIT 1";
- $query = mysqli_query($myConnection, $sqlCommand) or die (mysqli_error());
- while ($row = mysqli_fetch_array($query)) {
- $pagetitle = $row['pagetitle'];
- $pagebody = $row["pagebody"];
- }
- mysqli_free_result($query);
- //----------------------------------------------------------------------
-
- //[b]Jeg vil tro at der her skal laves an anderledes query?[/b]
-
- // Build PAGE navigation relevant to subject--------------------------------
- $sqlCommand = "SELECT id, linklabel, pos FROM pages WHERE showing='1' ORDER BY pos ASC";
- $query = mysqli_query($myConnection, $sqlCommand) or die (mysqli_error());
-
- $PageMenuDisplay = '';
- while ($row = mysqli_fetch_array($query)) {
- $pid = $row["id"];
- $linklabel = $row["linklabel"];
- $position = $row['pos'];
-
- $PageMenuDisplay .= '<li><a href="index.php?pid=' . $pid . '">' . $linklabel . '' . $position . '</a></li>';
-
- }
- mysqli_free_result($query);
På denne måde, har jeg lavet navigationens, som virker fint, til både "SUBJECTS" samt "PAGES".
Bortset fra at alle undersider vises..
Nede i HTML koden på selve siden, der echo'er jeg navigationen ud på denne måde, hvilket naturligvis resulterer i, at ALLE "PAGES/UNDERSIDER", vises, og ikke kun de relevante for hvert "SUBJECT".
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title><?php if (isset($_GET['pid'])){
- echo $pagetitle;
- } elseif (isset($_GET['sid'])){
- echo $subjecttitle;
- } else echo $SubjectIndexTitle;
- ?></title>
- <link href="styles/style.css" rel="stylesheet" type="text/css" media="all" />
- </head>
- <body>
- <div id="wrapper2">
- <div id="wrapper">
- <div id="header"><div align="right"><a href="administrator/login/login-form.php">Admin</a></div></div>
-
- <div id="top_nav">
- <ul>
- <?php echo $SubjectMenuDisplay; ?>
- </ul>
- </div>
-
- <div id="left">
- <ul>
- <?php
- echo $PageMenuDisplay;
- ?>
- </ul>
- </div>
-
- <div id="right">
- <?php
- if (isset($_GET['pid'])){
- echo $pagebody;
- } elseif (isset($_GET['sid'])){
- echo $subjectbody;
- } else echo $SubjectIndexBody;
- ?>
- </div>
-
- <div id="footer"><address><?php echo $footer; ?></address></div>
- </div>
- </div>
-
- </body>
- </html>
I min LEFT DIV: Skal der ikke på en eller anden måde ændres noget i variablen: $PageMenuDisplay?
Den kan I som skrevet se, inde i opbygningen af navigationen til "PAGES", se hvad den indeholder, ifht min query til databasen, hvor jeg IKKE helt er klar over hvordan jeg skal forspørge, for kun at få vis de relevante undersider, ifht hvilket subject der er klikket.
Jeg har måske gentaget mig selv et par gange, men det er for at tydeligere hvad det drejer sig, om så det er til at gå til.
Det er næsten det sidste jeg mangler for at få det til at fungere, så det kribler i fingrene for at komme i gang, og over denne stopklods.. :-)
Jeg ser frem til at høre fra nogen af jer, der måtte have erfaring med dette.
Mvh,
Jan Klemmensen