Avatar billede newcoder Nybegynder
09. januar 2006 - 22:46 Der er 43 kommentarer og
1 løsning

Include indhold

Hej Eksperter,

jeg er temmelig ny til PHP og vil derfor være taknemmelig hvis nogen kunne hjælpe mig med mit spørgsmål.

Jeg har en html skabelon som skal gå igen på alle sider og skal derfor kun skifte selve indholdet, altså 'home' skal have en fil for sig selv, 'about' en fil osv...
- hvordan gør jeg det? noget med skabelon.php?side=home eller noget.. og så definere de forskellige sider et sted også?

eller hvad? hehe..
vh. thomas
Avatar billede bryrup Nybegynder
09. januar 2006 - 23:00 #1
ja og så der hvor du vil have indholdet til at stå, skriver du dette :

<?
include("".$side.".php");
?>
Avatar billede newcoder Nybegynder
09. januar 2006 - 23:14 #2
hm, det virker overhovedet ikke?

har lavet det således:

i default.php (skabelonen) er der et link i menuen:

<a href="default.php?side=about">about</a>

og længere nede i filen kalder jeg så indholdet som du skrev jeg skulle:

<?
include("".$side.".php");
?>

...
Avatar billede newcoder Nybegynder
09. januar 2006 - 23:15 #3
og har selvfølgelig lavet about.php :)
Avatar billede rednex Nybegynder
09. januar 2006 - 23:26 #4
Jeg kan ikke anbefale bryrup's løsning. Den giver brugerne adgang til at få køre en hvilken som helst php fil på serveren. Men lidt ekstra kode kan dog rette op på det :o)

<?php

// Vi laver lige et array som indeholder "tilladte" sider.
$sider = array('home' => 'index.php', 'about' => 'about.php', 'links' => 'links.php');

$side = isset($_GET['side']) ? $_GET['side'] : 'home';

if (array_key_exists($side, $sider))
$filnavn = $sider[$side];
else
$filnavn = $sider['home'];

// Her kommer så din template

// Her skal indholdet af den valgte side stå
include($filnavn);

// Resten af din template
?>
Avatar billede newcoder Nybegynder
09. januar 2006 - 23:55 #5
Altså <?php

// Vi laver lige et array som indeholder "tilladte" sider.
$sider = array('home' => 'index.php', 'about' => 'about.php', 'links' => 'links.php');

$side = isset($_GET['side']) ? $_GET['side'] : 'home';

if (array_key_exists($side, $sider))
$filnavn = $sider[$side];
else
$filnavn = $sider['home'];

// hele smøren med <html> <head> diverse billeder, tabeller mm.

include($filnavn);

//flere tabeller, billeder mm..

?>


?? for det virker nemlig ik helt.. undskyld at jeg spørger så meget, men jeg er ret newbie! hehe
Avatar billede rednex Nybegynder
10. januar 2006 - 00:08 #6
OK, en lettere modificeret udgave :o)

<?php

// Vi laver lige et array som indeholder "tilladte" sider.
$sider = array('home' => 'index.php', 'about' => 'about.php', 'links' => 'links.php');

$side = isset($_GET['side']) ? $_GET['side'] : 'home';

if (array_key_exists($side, $sider))
$filnavn = $sider[$side];
else
$filnavn = $sider['home'];
?>
<html>
<head>
<title>Min hjemmeside</title>
<head>
<body>
<?php include($filnavn); ?>
</body>
</head>
Avatar billede rednex Nybegynder
10. januar 2006 - 00:09 #7
og den skulle self. slutte med </html> :oP
Avatar billede newcoder Nybegynder
10. januar 2006 - 00:26 #8
Jeg får fejl, men jeg har en lille mistanke om at det er min server, da den printer kinesiske tegn og alt muligt.. hehe.. jeg ser på det i morgen - tusind tak for hjælpen!
Avatar billede rednex Nybegynder
10. januar 2006 - 00:29 #9
Jeg har testet det her, og der virker det fint - men det kan du selvfølgelig ikke bruge til så meget :o)

Du må sove godt :o)
Avatar billede newcoder Nybegynder
10. januar 2006 - 00:38 #10
Ok, det er sikkert noget med den kode jeg har i midten så..

tak og i lige måde =)
Avatar billede newcoder Nybegynder
10. januar 2006 - 16:48 #11
Hm.. Siden begynder at opføre sig mærkeligt når jeg sætter <?php include($filnavn); ?> ind. Alt andet kode er inde, men når jeg så prøver at hente en fil så loader siden ikke.. har du nogen idé om hvad problemet kan være?

vh. thomas
Avatar billede newcoder Nybegynder
10. januar 2006 - 16:49 #12
Avatar billede newcoder Nybegynder
10. januar 2006 - 16:49 #13
det uden <?php include($filnavn); ?> ...
Avatar billede newcoder Nybegynder
10. januar 2006 - 17:00 #14
yessir! så virker det.. hehe..
jeg har lige et enkelt spørgsmål mere, hvis det er ok...

hvis du kigger på siden så kan du se at menupunktet 'home' er aktivt. hvordan skrifter jeg billedet (baggrunden) ud, sammen med indholdet?
Avatar billede rednex Nybegynder
10. januar 2006 - 17:03 #15
Prøv at smide

error_reporting(E_ALL);
ini_set('display_errors', '1');

ind lige under <?php

Får du så nogen fejlmeddelelser? Du kan også prøve at udskifte include() med require().
Avatar billede rednex Nybegynder
10. januar 2006 - 17:18 #16
En lettere modificeret udgave som selv laver menuen og sætter det rigtige menupunkt til class="active":

<?php

// Vi laver lige et array som indeholder "tilladte" sider.
$sider = array('home' => 'index.php', 'about' => 'about.php', 'links' => 'links.php');

$side = isset($_GET['side']) ? $_GET['side'] : 'home';

if (!array_key_exists($side, $sider))
    $side = $sider['home'];
?>
<!-- starten af din html / din menu starter her -->
<ul id="nav">
<?php
// Her udskriver vi lige din menu
foreach ($sider as $navn => $dummy)
{
    $active = ($navn == $side) ? ' class="active"' : '';
    echo '    <li id="' . $navn . '"><a href="test.php?side=' . $navn . '"' . $active . '>' . $navn . "</a></li>\n";
}
?>
</ul>
<!-- HTML mellem menu og indhold -->
<?php
if (file_exists($sider[$side])) {
    require($sider[$side]);
} else {
    echo "Siden findes ikke";
}
?>
</body>
</html>
Avatar billede rednex Nybegynder
10. januar 2006 - 17:20 #17
Hov, der var vist lige en smutter. Ret "$side = $sider['home'];" til

$side = 'home';
Avatar billede newcoder Nybegynder
10. januar 2006 - 17:39 #18
Årh hvor du sej! Det virker!
hehe

Point og mange tusind tak til dig!

Vh. Thomas
Avatar billede rednex Nybegynder
10. januar 2006 - 18:02 #19
Jeps, jeg er sej som en gammel skosål ;o) Held og lykke med resten af projektet :o)
Avatar billede newcoder Nybegynder
10. januar 2006 - 18:42 #20
takker ! :)
Avatar billede JOHN_DOE Nybegynder
10. januar 2006 - 19:15 #21
hvorfor ikke bare skrive

<?
if(@!include("$side.php")) {
echo "Siden findes ikke!";
}
?>
Avatar billede newcoder Nybegynder
10. januar 2006 - 23:30 #22
Hey igen,
hvad gør jeg hvis jeg gerne vil kalde en fil fra en undermappe?
Altså istedet for 'galleri.php' ligger den her 'galleri/galleri.php'.
Jeg har prøvet at ændre til 'galleri' => 'galleri/galleri.php' men det gør åbenbart ingen forskel..

- har du nogen idé om hvad jeg snakker om? hehe
Avatar billede newcoder Nybegynder
10. januar 2006 - 23:33 #23
eller jeg kan også spørge sådan her:

jeg prøver at integrere et galleri-system der hedder Plogger.

Det fungerer åbenbart når jeg åbner normalt:

http://www.froghead.dk/test/galleri/galleri.php

men ikke gennem skabelonen:

http://www.froghead.dk/test/index.php?side=galleri

hvorfor?
Avatar billede rednex Nybegynder
10. januar 2006 - 23:45 #24
Der er flere grunde, men jeg er for træt til at gennemgå dem nu.

Hvis du vil indsætte et "komplet" eller skal vi kalde det selvstændigt dokument (som galleriet jo er), så skal du bruge en IFRAME i stedet.
Avatar billede newcoder Nybegynder
11. januar 2006 - 18:40 #25
jeg prøver med en iframe!

- har du iøvrigt nogen idé om hvorfor alle æ-ø-å bliver til mærkelig tegn på alle siderne?? (ikke index.php, men about.php, fun.php osv.) det er ikke min css og heller ikke noget mærkelig kode i filerne... det er temmelig underligt!
Avatar billede rednex Nybegynder
11. januar 2006 - 19:01 #26
Jeg kan se at du har pillet med serveren, så jeg kan ikke se hvad du mener. Hvis æøå bliver til &aelig; &oslash; og &aring; så er den god nok. Det er såkaldte HTML entities som bruges til at vise tegn som ikke er standard på alle sprog.

Ellers kan det skyldes at du har angivet en forkert character encoding.
Avatar billede newcoder Nybegynder
11. januar 2006 - 19:07 #27
nej det bliver til kinesiske tegn bl.a...

det er nok det du nævner sidst.. hehe
Avatar billede newcoder Nybegynder
11. januar 2006 - 19:09 #28
Avatar billede newcoder Nybegynder
11. januar 2006 - 19:10 #29
character encoding.. er det ANSI, Unicode UTF osv.?
Avatar billede rednex Nybegynder
11. januar 2006 - 19:17 #30
Tak, nu kan jeg se det :o)

Jeg kan se at du har et meta tag som angiver at character encoding er utf-8. Det skal du lige ændre til iso-8859-1. Derudover er jeg ret sikker på at HTML 4.01 ikke har xmlns og xml:lang atributter.
Avatar billede newcoder Nybegynder
11. januar 2006 - 19:20 #31
hm, det gør ingen forskel..
Avatar billede rednex Nybegynder
11. januar 2006 - 19:26 #32
Ok, det ser ud til at du har gemt index.php i utf-8 og about.php i iso-8859-1. De to filer skal være i samme format, ellers går der ged i det. Og du skal jo så angive det format du vælger.

Og husk forresten at du ikke skal have <html>, <head> og <body> tags i de filer du inkluderer. Det bliver jo klippet ind midt i den side som inkluderer den (index.php). Højre-klik på siden og vælg 'Vis kilde' hvis du vil se den resulterende HTML.

Jeg kan iøvrigt anbefale W3C's HTML Validator, som kan hjælpe dig med at lave gyldig HTML. http://validator.w3.org
Avatar billede newcoder Nybegynder
11. januar 2006 - 19:30 #33
Han gjorde det igen... Reddede en forvirret newbie - TAK! :)
Avatar billede rednex Nybegynder
11. januar 2006 - 19:31 #34
np :o)
Avatar billede newcoder Nybegynder
13. januar 2006 - 10:29 #35
Ja så er jeg desværre tilbage igen med et spørgsmål mere, hehe.. Jeg er villig til at smide 30 point mere efter dig (Rednex) fordi du har været så behjælpelig :)

Problemet er at gerne vil tilføje to menupunkter (kontakt og links) et andet sted på siden... (se http://www.froghead.dk/test/index.php) men det kan jeg ikke medmindre jeg tilføjer dem sådan her: 'kontakt' => 'kontakt.php', 'links' => 'links/links.php'.. og gør jeg det, kommer de jo også i den anden menu..

er der løsning på dette?

Alt virker ellers som det skal og jeg er RIGTIG glad for den løsning du har givet mig!

vh. thomas
Avatar billede rednex Nybegynder
13. januar 2006 - 10:38 #36
Hvis disse links også skal tildeles class="active" når du har klikket på dem, så er du nødt til at lave et array mere ligesom det der bliver brugt til hovedmenuen.
Koden skal være magen til det som laver hovedmenuen, bortset fra at det selvfølgelig skal bruge det nye array.
Avatar billede newcoder Nybegynder
13. januar 2006 - 10:53 #37
de behøver ik have class="active" de skal bare kunne klikkes på :)

det er de to oppe i højre hjørne...
Hvis jeg skal lave et nyt array, hva gør jeg?

undskyld alle de spørgsmål, men jeg er en desperat newbie der er tæt på hans mål.. haha
Avatar billede rednex Nybegynder
13. januar 2006 - 11:04 #38
Ahh ja, nu kan jeg se problemet. Jeg tror det smarteste er at rette lidt så vi kan lave links som ikke automatisk kommer med i hovedmenuen. Ret foreach loopet så det ser sådan ud:

foreach ($sider as $navn => $dummy)
{
    if ($side{0} !== '_')
    {
        $active = ($navn == $side) ? ' class="active"' : '';
        echo '    <li id="' . $navn . '"><a href="test.php?side=' . $navn . '"' . $active . '>' . $navn . "</a></li>\n";
    }
}

Derefter retter du i arrayet med links og ændrer hhv links og kontakt:

'_kontakt' => 'kontakt.php', '_links' => 'links.php'

Sidst men ikke mindst insætter du denne linie før if(file_exists...):
$side = preg_replace('/^_(.*)/', "\\1", $side);
Avatar billede newcoder Nybegynder
13. januar 2006 - 11:23 #39
Hm... det kom til at se sådan ud:

http://www.froghead.dk/test/index3.php
Avatar billede rednex Nybegynder
13. januar 2006 - 11:27 #40
doh. ret

if ($side{0} !== '_')

til

if ($navn{0} != '_')

Husk også at rette dine links oppe til højre, så de peger på index.php?side=_kontakt og _links
Avatar billede newcoder Nybegynder
13. januar 2006 - 17:14 #41
Så virker det! Genialt du..
Hvordan kaster jeg 30 ekstra point efter dig?

Blir folk sure hvis jeg opretter en tråd for at give point hvis jeg henviser til denne tråd?

Igen: tusind tak!!

vh. Thomas
Avatar billede newcoder Nybegynder
13. januar 2006 - 17:19 #42
eller bortset fra den ikk finder siden..
Avatar billede newcoder Nybegynder
13. januar 2006 - 18:36 #43
og hvordan laver jeg undersider? altså hvis jeg skal fra index.php?side=fun til f.eks. spil.php - også med _filnavn.php?
Avatar billede rednex Nybegynder
13. januar 2006 - 20:57 #44
Det er min fejl. Jeg har haft lidt travlt med at rydde op så jeg kunne få plads til min nye (enorme) skrivebord som kom idag :oD

Slet denne linie igen (det var en tanketorsk). Så skulle den gerne kunne finde den side du henviser til.
$side = preg_replace('/^_(.*)/', "\\1", $side);

Hvis du vil lave et link til spil.php (ikke index.php?side=spil), så laver du den bare på den gammeldags facon (<a href="spil.php">spil</a>). Hvis du vil henvise til en side vha. index.php?side=test og ikke vil have at den skal dukke op i menuen, så indsætter du , '_test' => 'test.php' i arrayet. Linket skal så hedde <a href="index.php?side=_test">Test</a>.

Du kan sagtens oprette en ny tråd med titlen "Point til Rednex" og smide point der. Bare du husker at referere til dette spm.
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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