Gå til innhold

php - meny, "submeny" og include.


Anbefalte innlegg

Heihei.

 

Først og fremst, beklager et litt kryptisk emnetittel.

 

Driver nå og leker på clvn.net/simpel, og har kommet til menysystemet. Jeg vil ha det sånn at det er en hovedmeny som ligger på høyre side av innholdet, og en submeny som ligger på venstre side av innholdet.

 

Dette har jeg klart, og når man nå trykker på knappen "blogg" på hovedmenyen så kommer submenyen frem.

 

Det jeg nå vil er at hvis noen trykker på "blogg" -> "Personlig blogg" så skal fortsatt submenyen stå fremme, mens det bare er hovedinnholdet på siden som blir skiftet ut!

 

Her er kodene som brukes:

 

index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>simplifisert</title>
<link rel="stylesheet" href="css/stil.css" type="text/css" />
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
</head>

<body>
<div id="main_content">
<h1><span id="hvit_h1">clvn</span><span id="orange_h1">net</span></h1>
<br />
<?php
       $mappe = 'inc/';
       $dir = opendir($mappe);
       $filer = array();
       while (($filename = readdir($dir)) !== false) {
           if (is_file($mappe.$filename)) {
               $filer[$filename] = $mappe.$filename;
           }
       }

       if (isset($_GET['side']) && isset($filer[$_GET['side']])) {
           include $filer[$_GET['side']];
       } else {
           include 'inc/hjem.php';
       }
?>
</div><!-- END main_content -->

<div id="sidebar_l"><ul>
<li><a class="meny_l" href="?side=hjem">Hjem</a></li>
<li><a class="meny_l" href="?side=blogg">Blogg</a></li>
<li><a class="meny_l" href="?side=filarkiv">Filarkiv</a></li>
<li><a class="meny_l" href="?side=bildealbum">Bildealbum</a></li>
<li><a class="meny_l" href="?side=portefolge">portefølje</a></li>
<li><a class="meny_l" href="?side=info">Info</a></li>
</ul></div><!-- sidebar_l -->


<?php include 'submenu.php'; ?>

<?php echo "$submenu" ?>

</body>
</html>

 

 

submenu.php

<?php if($_GET['side'] == 'blogg') {
$submenu = "
<div id=\"sidebar_r\">
<ul>
<h3>Arkiv:</h3>
<li><a class=\"meny_r\" href=\"#\">Mai 2005</a></li>
<li><a class=\"meny_r\" href=\"#\">Juni 2005</a></li>

<h3>Kategorier:</h3>
<li><a class=\"meny_r\" href=\"?side=blogg_personlig_blogg\">Personlig blogg</a></li>
<li><a class=\"meny_r\" href=\"#\">Ferie 2005</a></li>
<li><a class=\"meny_r\" href=\"#\">Skoleblogg</a></li>

<h3>Andre Bloggere:</h3>
<li><a class=\"meny_r\" href=\"http://atomsopp.net\">Magnus Skaalsveen</a></li>
<li><a class=\"meny_r\" href=\"http://atomsopp.net\">Anders Skaalsveen</a></li>
<li><a class=\"meny_r\" href=\"#\">Ørjan Bo</a></li>
</ul>
</div>
"; }  

if($_GET['side'] == 'filarkiv') {
$submenu = "
<div id=\"sidebar_r\">
<ul>
<h3>Filarkiv:</h3>
<li><a class=\"meny_r\" href=\"#\">Bla i filarkivet</a></li>
<li><a class=\"meny_r\" href=\"#\">Last opp til filarkivet</a></li>
</ul>
</div>
"; }  

if($_GET['side'] == 'bildealbum') {
$submenu = "
<div id=\"sidebar_r\">
<ul>
<h3>Bildealbum:</h3>
<li><a class=\"meny_r\" href=\"http://ff-norge.net\">Bla i Albumene</a></li>
<li><a class=\"meny_r\" href=\"http://atomsopp.net\">5 siste bilder</a></li>
</ul>
</div>
"; }

if($_GET['side'] == 'info') {
$submenu = "
<div id=\"sidebar_r\">
<ul>
<h3>Info:</h3>
<li><a class=\"meny_r\" href=\"http://ff-norge.net\">Info om clvn.net</a></li>
<li><a class=\"meny_r\" href=\"http://atomsopp.net\">Info om meg</a></li>
</ul>
</div>
"; }
?>

 

Filene som skal inkluderes på hovedsiden ligger i en mappe som heter inc/ .

 

Så om noen kan forklare hvordan mans skal gjøre det for å få opp ting i hoveddelen på siden når man trykker på noe i submenyen, samt at submenyen står der til man trykker på noe annet i menyen til venstre, så vil jeg bli VELDIG glad :)

 

På forrhånd takk til alle!

Lenke til kommentar
Videoannonse
Annonse

Det er nok flere løsninger her, men her er en mulig:

 

I submenu, må du benytte en annen variabel enn den du bruker i hovedmenyen. Velg så hvilken side som skal inkluderes utifra variabel i submeny. Dersom ikke noe er valgt i submeny, viser du default siden, som er den som skal vises når linken i hovedmenyen trykkes på.

 

Ville kanskje latt hver submeny være en egen fil, slik at submenyen til f.eks blogg heter blogg.sub som inkluderes dersom blogg er valgt i hovedmenyen.

 

Si fra dersom forklaringen ble litt kryptisk, så kan jeg muligens knote ned litt enkel kode som forklarer bedre. ;)

 

/Kakkle

Lenke til kommentar

Her er bare et kjapt eksempel

 

<?
// Her kommer litt variabel innhenting først
if (isset($GET["h"])) {
$main = $_GET["h"];
if(isset($_GET["s"])) { //  varibel s er fra submenu
$includefile = $_GET["s"];
}
else  {
$includefile = $main;
}
}
else {
$include_file="hovedside.php";
}
?>
//Her er hovedmenyen
<div class='mainmenu'>
<li><a href='?h=blogg'>Blogg</a></li>
<li><a href='?h=side2'>Side2</a></li>
</div>
<div class='maincontent'>
// Her er hovedinnholdet
include ("$includefile.php");
</div>
<div class='submenu'>
<?
if(file_exists("$main.sub")) {
include "$main.sub";
}
?>

Her blir submeny vist etter hvilken link du har trykket i hovedmenyen, og er det samme ved trykk på submenu. Dersom det ikke er valgt noe fra hovedmenyen, vises hovedsiden (hovedside.php) og dersom det er valgt noe fra hovedmenyen, men ikke fra submenyen, vises filen med samme navn som hovedmenyen (F.eks. blogg.php)

 

Og her er et eksempel på submenu fil:

blogg.sub:

<div id=\"sidebar_r\">
<ul>
<h3>Kategorier:</h3>
<li><a class=\"meny_r\" href=\"?h=$main&s=blogg_personlig_blogg\">Personlig blogg</a></li>
<li><a class=\"meny_r\" href=\"?h=$main&s=ferie_2005\">Ferie 2005</a></li>
<li><a class=\"meny_r\" href=\"?h=$main&s=Skoleblogg\">Skoleblogg</a></li>
</ul>
</div>

Men den submenu tingen du har, funker egentlig like greit.

 

Koden er ikke tilpasset din side. Dette er ment som et forslag om hvordan du kan gjøre det. Koden er heller ikke testet, og det kan være småfeil innimellom. Anbefaler ikke copy paste her. Mangler nok sikkert noen {, }, /(, ) og ; rundt omkring. Bør i teorien funke.

 

Det som er litt viktig, er at du tar vare på hvilken link som er valgt i hovedmenyen, slik at koden heletiden vet hvilken submeny som skal vises.

 

Håper du ble litt klokere. Si fra dersom dette ikke fungerer i det hele tatt

 

EDIT: Fikset litt på submenyen, og tok kun med tre submeny punkter.

/Kakkle

Endret av kakkle
Lenke til kommentar

Tusen takk kakkle!

 

Jeg fikk til det med submenyen, og lagret hver del i en .sub fil.

 

Men jeg har problemer med selve hovedinnholdet på siden.

 

Når man går rett inn på siden, så fungerer hovedinnholdet (inc/hjem.php), men når man bruker linkene i hovedmenyen så får jeg feilmeldingen:

Warning: main() [function.main]: open_basedir restriction in effect. File(/portefolge) is not within the allowed path(s): (/home/web/wno63796:/var/tmp:/usr/local/lib/php) in /usr/home/web/wno63796/simpel/index.php on line 27

Warning: main(portefolge) [function.main]: failed to open stream: Operation not permitted in /usr/home/web/wno63796/simpel/index.php on line 27

Warning: main() [function.include]: Failed opening 'portefolge' for inclusion (include_path='.:') in /usr/home/web/wno63796/simpel/index.php on line 27

 

 

index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>simplifisert</title>
<link rel="stylesheet" href="css/stil.css" type="text/css" />
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
</head>

<body>
<div id="main_content">
<h1><span id="hvit_h1">clvn</span><span id="orange_h1">net</span></h1>
<br />
<p>
<?php
if (isset($_GET["h"])) {
$main = $_GET["h"];
if (isset($_GET["s"])) { //  varibel s er fra submenu
$submenu = $_GET["s"];
}
else  {
$includefile = "$main";
}
}
else {
$includefile="inc/hjem.php";
}
include ("$includefile");
?>
</p>
</div><!-- END main_content -->



<div id="sidebar_l">
<ul>
<li><a class="meny_l" href="?h=hjem">Hjem</a></li>
<li><a class="meny_l" href="?h=blogg">Blogg</a></li>
<li><a class="meny_l" href="?h=filarkiv">Filarkiv</a></li>
<li><a class="meny_l" href="?h=bildealbum">Bildealbum</a></li>
<li><a class="meny_l" href="?h=portefolge">portefølje</a></li>
<li><a class="meny_l" href="?h=info">Info</a></li>
</ul>
</div>

<?php /*echo "$submenu"*/ ?>

<?php
if(file_exists("inc/$main.sub")) {
include "inc/$main.sub";
}
?>

</body>
</html>

Får altså beskjed om at feilen ligger på linje 27, altså "include ("$includefile");"

 

Legger også med en .sub fil for ordens skyld:

<div id="sidebar_r">
<ul>
<h3>Filarkiv:</h3>
<li><a class="meny_r" href="#">Bla i filarkivet</a></li>
<li><a class="meny_r" href="#">Last opp til filarkivet</a></li>
</ul>
</div>

 

Så kommer spørsmålene: Hva er det som gjør at man får den feilmeldingen når man trykke på noe i hovedmenyen.

 

Og hva skal man skrive i <a href="?">link</a> i submenyen for at submenyen fortsatt skal være der, samtidig som den åpner en fil i hovedinnholdet?

 

-----

 

Vil takke deg igjen, kakkle, for at du skrev ned det eksempelet :)

Lenke til kommentar

Ligger alle include filene i folderen inc ?

Da må du isåfall endre $includefile til dette:

$includefile = "inc/$main.php"

Forutsatt at filene dine har en .php endelse. evt kan de bytte stil inc eller hva du måtte ha.

Du kan jo forsåvidt bake inn denne snutten i koden din, som du hadde fra før:

       $mappe = 'inc/';
      $dir = opendir($mappe);
      $filer = array();
      while (($filename = readdir($dir)) !== false) {
          if (is_file($mappe.$filename)) {
              $filer[$filename] = $mappe.$filename;
          }
      }

Da kan du fjerne filendelsen fra $includefile og bruke $files[$includefile]

 

I linkene i submenyen, må du skrive <a href="?h=$main&s=[side som submeny skal vise]">

 

EDIT: Se forøvrig i .sub eksempelet som jeg la med i forrige innlegg

 

EDIT2: Ser også at du setter den variabelen som kommer fra submenu til $submenu. Sett denne til $includefile = "inc/".$_GET["s"] foreksempel, eller bare $_GET["s"] dersom du velger å benytte array metoden din.

Endret av kakkle
Lenke til kommentar

Ok, klarte det til slutt med litt hjelp fra mange kanter :)

 

Hvis det er interresant for dere så ser index.php fila sånn ut:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>simplifisert</title>
<link rel="stylesheet" href="css/stil.css" type="text/css" />
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
</head>

<body>
<div id="main_content">
<h1><span id="hvit_h1">clvn</span><span id="orange_h1">net</span></h1>
<br />

<?php
$mappe = 'inc/';
$dir = opendir($mappe);
$filer = array();
while (($filename = readdir($dir)) !== false) {
if (is_file($mappe.$filename)) {
 $filer[$filename] = $mappe.$filename;
}
}


if (isset($_GET["h"])) {
$main = $_GET["h"];
if (isset($_GET["s"])) { //  varibel s er fra submenu
$submenu = $_GET["s"];
 }
 else  {
 $includefile = "inc/$main.inc";
 }
}
else {
$includefile="inc/hjem.inc";
}


$linksubmenu="inc/$submenu.inc";
if(file_exists("inc/$submenu.inc")) {
include "inc/$submenu.inc";
}

if(isset($includefile)) { include "$includefile"; }

?>
</div>



<div id="sidebar_l">
<ul>
<li><a class="meny_l" href="?h=hjem">Hjem</a></li>
<li><a class="meny_l" href="?h=blogg">Blogg</a></li>
<li><a class="meny_l" href="?h=filarkiv">Filarkiv</a></li>
<li><a class="meny_l" href="?h=bildealbum">Bildealbum</a></li>
<li><a class="meny_l" href="?h=portefolge">portefølje</a></li>
<li><a class="meny_l" href="?h=info">Info</a></li>
</ul>
</div>

<?php
if(file_exists("inc/$main.sub")) {
include "inc/$main.sub";
}
?>

</body>
</html>

 

Tusen takk for hjelpa kakkle.

Lenke til kommentar

Ok, nytt "problem".

 

Vil ha "blogg" til å åpnes når man går inn på clvn.net/simpel. Fikk til dette med å bare skifte ut:

$includefile="inc/hjem.inc"; med

$includefile="inc/blogg.inc";

 

Men da åpnes ikke submenyen til blogg. Prøvde å få til dette med en if(), men fikk det ikke til.

 

Hva skal jeg lese på for å finne det ut?

Lenke til kommentar

Du må sette $main til blogg også...

Kanskje like greit å sjekke om $_GET["h"] er satt eller ikke. Er den satt, sett $main til den verdien, hvis ikke, sett den til blogg.

 

Prøv dette:

if(isset($_GET["h"])) {
$main = $_GET["h"];
}
else {
$main = "blogg";
}
if(isset($_GET["s"])) {
$includefile = "inc/".$_GET["s"].".inc";
}
else {
$includefile = "inc/$main.php";
}

istedetfor:

if (isset($_GET["h"])) {
$main = $_GET["h"];
if (isset($_GET["s"])) { //  varibel s er fra submenu
$submenu = $_GET["s"];
}
else  {
$includefile = "inc/$main.inc";
}
}
else {
$includefile="inc/hjem.inc";
}

 

Ikke testet i det hele tatt... Du kan forsåvidt fjerne variablen $submenu, tror jeg.

Lenke til kommentar

Tusen * tusen takk :D

 

måtte bytte ut en linje av koden ($includefile = "inc/$main.php"; med $includefile = "inc/$main.inc";), men ellers var alt riktig :D

 

Utrolig bra. Setter veldig pris på hjelpen du gir meg!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...