Avatar billede Gantzel Juniormester
13. februar 2022 - 00:40 Der er 9 kommentarer og
1 løsning

Hent en bestemt menu

Det er lykkes mig at definere style.css, pagetitle og hvilket logo der skal vises, samlet i en fil. Jeg har brug for at vise en bestemt menu, afhængigt af hvilke sider der indlæses, men jeg får fejl og divider by zero ?!?

option.php
if(isset($_GET['om'])){ $style = "main"; $image = "rail"; $title = "Om gantzel"; };

index.php
<title><?php echo $title; ?></title>
<link rel="stylesheet" type="text/css" href="style/<?php echo $style; ?>.css">


Og nederst ville jeg så gerne inkludere en menu,

<?php include(menu/'$menu'); ?>
<?php include('menu/'$menu); ?>

Ingen af dem virker..
Avatar billede acore Ekspert
13. februar 2022 - 08:22 #1
Der er helt umuligt at hjælpe baseret på så lidt info.  Men hvis du får divide by zero, skal du kigge der, hvor du dividerer,  og undersøge hvorfor nævneren er nul.
Avatar billede Gantzel Juniormester
13. februar 2022 - 08:54 #2
Ok, det lød ellers fint da jeg skrev det :)

[code]
<!DOCTYPE html>
<html>
<head>
<title><?php echo $title; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="style/<?php echo $style; ?>.css">
</head>
<body>
<table width="800" align="center" border="0">
  <tr>
    <td align="center">
<?php
    echo'<strong>
        <a href="?">Forord</a>
          | <a href="?livet">Mit liv</a>
          | <a href="?om">Om</a>
    </strong>
    ';
?>
    </td>
  </tr>
  <tr>
    <td align="center"><img src="images/logo/<?php echo $image; ?>.jpg" width="800" height="250" alt="" title="" /></td>
  </tr>
  <tr>
    <td>
<?php   
// Startsiden
    if(empty($_SERVER['QUERY_STRING'])){ include("forsiden.php"); };

// Indholdet
    if(isset($_GET['om'])){             include("doc/om.php"); };
    if(isset($_GET['livet'])){             include("doc/livet.php"); };
?>

    </td>
  </tr>
  <tr>
    <td> --- forskellige undermenuer skal indlæses her --- </td>
  </tr>
  <tr>
    <td align="center"><hr />&copy; <?php echo date("Y"); ?> | v/ Gantzel</td>
  </tr>
</table>
</body>
[/code]

Jeg kan ikke få $menu til at virke, som jeg vil hente på samme måde som style og title. Skal jeg i stedet bruge if eller if else og {} ?? Og hvordan skal det skrives for at virke.

Options.php
[code]
<?php
if(!isset($_GET['forsiden'])){ $style = "main"; $menu = "main"; $image = "main"; $title = "Gantzel's hjørne"; };
if(isset($_GET['livet'])){ $style = "main"; $menu = "second"; $image = "main"; $title = "Mit liv"; };
if(isset($_GET['om'])){ $style = "main"; $menu = "third"; $image = "main"; $title = "Om"; };
?>
[/code]
Avatar billede Gantzel Juniormester
13. februar 2022 - 10:40 #3
Måske skulle jeg spørge på en anden måde. Hvordan skal det skrives hvis jeg vil indlæse en menu ud fra $menu options.php

<?php if $menu=='main'; include 'main.php';
else if $menu=='second'; include 'second.php';
else if !empty== ... do not include anything ; ?>

Jeg ved godt at dette kun har lidt rigtigt i sig, men det er vel den bedste funktion til det jeg gerne vil have?
Avatar billede bvirk Guru
13. februar 2022 - 13:58 #4
<?php include(menu/'$menu'); ?>
er næsten rigtigt, hvis du mener hvad jeg tror skal det skrives:

<?php include('menu/' . $menu); ?>

Det er sammentrækning af strengen 'menu/' og indholdet i variablen $menu - altså filen med navnet i variablen $menu beliggende i mappen menu som er en mappe i den mappe hvor filen det står i ligger.

'if' er det man kalder sprogets kontrol strukturer.

https://www.php.net/manual/en/language.control-structures.php

Det er vigtigt at kunne se fejlmeddelser og lære at forstå dem. En php installation kan være i 'produktion mode' - alså som et kørende website hvor mange fejl er undertrykt da brugere ikke værdsætter dem ;). For at kunne udvikler skal det være i 'developer mode' - ellers arbejder man i blinde - første skridt efter 'hello world' er at skrive fejl og identificere dem.
- havde lige løst til denne udbasionering - sorry hvis ikke relevant

nb.
<?php echo $image; ?> kan skives lidt lettere:
<?= $image ?>
Avatar billede Gantzel Juniormester
13. februar 2022 - 16:15 #5
Har jeg forstået det korrekt at jeg kan kalde menuen med denne sætning

<?php include('menu/' . $menu); ?>

Så hvis der ikke er en menu, så henviser jeg blot til en blank fil, eller bruger man så else og if else (måske omvendt)

Ikke unødvendig viden du kommer med, det giver meget god mening sådan som du forklarer det, og jeg kan heldigvis læse det igen til det hænger fast :)
Avatar billede bvirk Guru
13. februar 2022 - 17:38 #6
Jeg beskriver blot syntaksen for sammensætning af strengudtryk som parameter til include.

$menu = 'livet.php';
include('menu/' . $menu);

så kunne menu/livet.php indeholde links til livet-barndom.php, livet-ungdom.php osv - noget som linkede til andre php filer i tillæg til de 3 forside, livet og om - og disse skulle så også betinget inkludes så deres indhold blev vist

Håber det er til at forstå
Avatar billede Gantzel Juniormester
13. februar 2022 - 18:05 #7
Det giver rigtig god mening, og det virker helt perfekt.
options.php har efterhånden mange funktioner, startede med page_title og style.

Tak for hjælpen :)
Avatar billede bvirk Guru
13. februar 2022 - 19:18 #8
selv tak - det var lidt. Lige en ting til inspiration - håber ikke det forvirrer og det er måske det samme du gør.

Tre filer - ren html med indhold som inden body element
forside.php, om.php og livet.php

og så denne index.php

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"></head>
<body>
<?php
$page = ($_GET['page'] ?? "forside") .".php";
if (file_exists($page))
    include ($page);
?><ul><?php
foreach (["om","livet","forside"] as $p)
    echo "<li><a href='index.php?page=$p'>$p</a></li>\n";
?></ul>
</body></html>
Avatar billede Gantzel Juniormester
23. februar 2022 - 11:36 #9
Det er præcis det jeg bruger, eller noget der ligner.

if(empty($_SERVER['QUERY_STRING'])){ include("forsiden.php"); };
// Indholdet
if(isset($_GET['om'])){ include("doc/om.php"); };
if(isset($_GET['livet'])){ include("doc/livet.php"); };

Tænker det er nogenlunde det samme som du foreslår.
:)
Avatar billede bvirk Guru
23. februar 2022 - 21:35 #10
Ja det er rigtigt nok - lidt det samme. Hvis der havde mange filer ligesom forside.php, om.php osv kunne man se disse referet i index.php.
Det er ikke unormalt - har set sådanne oplistninger i rigtige frameworks.
Men - en lille iagtagelse i skrivende stund - det er faktisk redundant - de er jo oplistet i fil systemet. Når man skriver sidder man og manuelt synkroniserer med filnavne.

Hvis f.eks forside.php, livet.php og om.php lå i mappen pages så kunne de relvante linier i #8 svar erstatted med

foreach ( scandir(__DIR__."/pages") as $p) {
    $baselnk = preg_replace('/\.[^\.]+$/','',$p);
    echo "<li><a href='index.php?page=$baselnk'>$baselnk</a></li>\n";

Der er flere veje til målet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester