Hej alle,
Jeg har skrevet om dette for et par dage siden, men det lykkedes desværre ikke at løse problemet med de ellers super gode forslag der kom :-)
Jeg er i gang med at lave et mindre cms.
Da det er helt nyt med php og mysql for mit vedkommende har det taget uendeligt lang tid at komme hertil hvor jeg er nu = tæt på målstregen :-)
Jeg formåede fint at lave et cms, hvor der blot var en tabel involveret som navigation.
Nu er jeg ved at udvide dette, til at indeholde to tabeller (dvs. relationer i databasen), hvor den ene tabel fungerer som parent i en global horisontal menu, og den anden tabel fungerer som child i en vertikal menu.
Når en parent er klikket på, viser de relevante children sig, helt fint.
Men når jeg klikker på et child link, så forsvinder resten af child navigationen, hvilket ikke er intentionen, men logisk ifht min kode, som jeg simpelthen sidder fast med ifht at få tilpasset til ovenstående.
Min database ser ud som følger:
Dette er for den globale menu = parents i navigationen = subjects i mine queries- id (primary key)
- subjecttitle (sidens titel)
- linklabel (navn på link i navigationen)
- subjectbody (sidens indhold)
- pos (sidens position ifht hinanden)
- showing
- keywords
- description
- lastmodified
Dette er for den lokale menu = children i navigationen = pages i mine queries!- id (primary key)
- subjectid [b](der hvor jeg laver relationen mellem de 2 tabeller)[/b][u][/u]
- subjecttitle (sidens titel)
- linklabel (navn på link i navigationen)
- subjectbody (sidens indhold)
- pos (sidens position ifht hinanden)
- showing
- keywords
- description
- lastmodified
Som det er nu, så vises parent navigationen, det skal den også, hele tiden.
Når jeg klikker på en parent, så vises de rigtige children. Men de forsvinder efter at en af dem er klikket = kernen af mit navigations problem!
Det skyldes logisk nok nedenstående kode, hvor jeg forsøger at fastslå om enten en parent eller en child er aktiv:- 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 = '1';
- $pageid = NULL;
- }
Måden hvor jeg har lavet min parent navigation, ser således ud:- // Query the body section for the title and body text for subjects------------------------------------------
- $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);
-
- // Setting data for default values for index page/landing page
- $sqlIndexCommand = "SELECT * FROM subjects WHERE id='1'";
- $query = mysqli_query($myConnection, $sqlIndexCommand) or die (mysqli_error());
-
- while ($row = mysqli_fetch_array($query)) {
- $IndexLinklabel = $row["linklabel"];
- $IndexPosition = $row['pos'];
- $Indexid = $row["id"];
- $SubjectIndexTitle = $row['subjecttitle'];
- $SubjectIndexBody = $row["subjectbody"];
-
-
- $SubjectIndexMenuDisplay .= '<li><a href="index.php?sid=' . $Indexid . '">' . $IndexLinklabel . '' . $IndexPosition . '</a></li>';
- }
- //******************SUBJECT DATA ENDS HERE**************************
Måden hvor jeg har lavet min children navigation, ser således ud:- // 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"];
- $subejctid = $row["subject"];
- }
- mysqli_free_result($query);
- //----------------------------------------------------------------
-
- // Build PAGE navigation relevant to subject-----------------------
- $sqlCommand = "SELECT * FROM pages WHERE subjectid='" . $subjectid . "' AND 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);
-
- //******************PAGES AND MODULE DATA ENDS HERE***********
- ?>
Alt dette kører i toppen af min side.
Derefter har jeg min html, hvor jeg echo'er variablerne ud på denne måde:
- <!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 [b]// HER SKAL DER OGSÅ ÆNDRES NOGET, IKKE[/b]?
- if (isset($_GET['sid'])){
- 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>
- <?php mysqli_close($myConnection); ?>
- </body>
- </html>
Det er klart at navigationen forsvinder efter en page er set, da en page kun kan vises hvis et subject er set, ifht min kode helt i toppen.
Jeg kan simpelthen ikke gennemskue hvordan det skal gøres og har brugt en uge på at finde logikken i det nu, samt rodet rundt på google i flere dage.
Så dette er et mindre nødråb :-/
Er sikker på at det er relativt lidt der skal ændres, but how?
Mvh, Jan