WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   PHP include i html fil med {inkludera här} (https://www.wn.se/forum/showthread.php?t=38149)

Leon 2009-07-26 21:47

Nu har ja googlat i nästan 2 timmar och läst på 20-30 olika tutorials.

Men det finns inte en enda som verkar beskriva hur man gör för att inkludera en fil i html med php stöd.
Finns bara hur man inkluderar antingen i toppen eller i slutet, eller bara just det typ.

Till ex såhär:
index.php - ska alltså innehålla nått som gör detta:
$Där {INCLUDE HERE} i template filen är då ska denna fil 'meny.html' inkluderas


index_template.html
bla bla bla
bla bla bla
{INCLUDE HERE}
bla bla bla


Såhär ser EN BIT av min index.php fil ut just nu:
Kod:

<?php

switch ($_GET['f']) {
        default:
 *include "indextemplate.html";
        break;
}

?>

Och i indextemplate.html vill ja kunna skriva {INCLUDE HERE} Så ska allt inkluderas från en annan fil JUST DÄR och ingen annan stans.
Frågan är bara vad ja ska skriva i php filen för att den ska fixa det.

mr_lundis 2009-07-26 23:36

Det finns flera möjliga alternativ. Du kan använda PHP's Output Buffer för att fånga upp det (genererade) innehållet från filerna du inkluderar. Därefter får du söka igenom innehållet du buffrat upp och göra en search/replace för att sedan inkludera nästa fil - och börja om från början. Jag skulle antagligen implementera detta som en rekursiv funktion...

En annan lösning skulle vara att öppna upp filen för läsning och gå igenom den rad för rad istället för hela filen på en gång. Alternativ 2 innebär att PHP-kod i filen inte kommer att exekveras.

Magnus_A 2009-07-27 08:12

Vet inte riktig vad du far efter men php:s include() kommando inkluderar en fil på stället.
Sen att få php-kommandon att tolkas i en fil som slutar på .html kräver väl att du ställer in mime-typen så att även .html-filer går genom php-tolken. Annars är det enklare att byta ändelse på den fil du inkluderar.
Men det kanske inte var det du tänkte uppnå?

Syke 2009-07-27 08:26

Hmm .. du får kanske göra en egen includefunktion som tar en html-fil som argument, och den fil som den ska inkludera som andra argument. Sen parsar du igenom första argumentet och letar upp {include here} och sen ersätter det med <?php include(andra argumentet); ?> ... eller något sånt? Iofs kanske det inte går så bra att skriva i den, men jag tror att en egen funktion är vägen att gå..

emilv 2009-07-27 10:35

$fh = fopen('indextemplate.html', 'r');
while(!feof($fh)) {
$line = fgets($fh);
if(strpos($line, '{INCLUDE HERE}') !== false) {
$include = file_get_contents('includefile');
$line = str_replace('{INCLUDE HERE}', $include, $line);
}
echo $line;
}
fclose($fh);

eller kortare (men något ineffektivare):

$file = file_get_contents('indextemplate');
$include = file_get_contents('includefile');
$file = str_replace('{INCLUDE HERE}', $include, $file);
echo $file;

Leon 2009-07-27 13:19

Citat:

Originally posted by emilv@Jul 27 2009, 10:35
$fh = fopen('indextemplate.html', 'r');
while(!feof($fh)) {
* *$line = fgets($fh);
* *if(strpos($line, '{INCLUDE HERE}') !== false) {
* * * *$include = file_get_contents('includefile');
* * * *$line = str_replace('{INCLUDE HERE}', $include, $line);
* *}
* *echo $line;
}
fclose($fh);

eller kortare (men något ineffektivare):

$file = file_get_contents('indextemplate');
$include = file_get_contents('includefile');
$file = str_replace('{INCLUDE HERE}', $include, $file);
echo $file;

Det här låter som det är något att gå vidare på iaf.
Men istället för att man måste skriva om det är "just den filen" då man kanske använder många såna här:
Kod:

switch ($_GET['f']) {
case "1":
 include "file.html";
break;

Går det inte att "ta bort"
$file = file_get_contents('indextemplate');
den delen av koden på nått sätt och göra så det funkar på alla tänkabara template filer?

Leon 2009-07-27 13:27

Citat:

Originally posted by Magnus_A@Jul 27 2009, 08:12
Vet inte riktig vad du far efter men php:s include() kommando inkluderar en fil på stället.
Sen att få php-kommandon att tolkas i en fil som slutar på .html kräver väl att du ställer in mime-typen så att även .html-filer går genom php-tolken. Annars är det enklare att byta ändelse på den fil du inkluderar.
Men det kanske inte var det du tänkte uppnå?

Ja bryr mig inte om vilken filändelse det är på filen, bara det funkar.

Leon 2009-07-27 13:39

Istället för att lägga koden utanför "case 1" "case 2" osv
Så skrev ja om koden inann för VARJE "case" och då funkar det riktigt bra.
Precis som ja vill.

Så istället för:
Kod:

<?php

switch ($_GET['f']) {
default:
 include "indextemplate.html";
break;
}

?>

Så blir varje såhär istället (lite mer jobb, men det blir exakt som ja vill):
Kod:


switch ($_GET['f']) {
        case "1":
 $file = file_get_contents('indextemplatefile.html');
 $include = file_get_contents('included.html');
 $file = str_replace('{INCLUDED}', $include, $file);
 echo $file;
        break;

Hällst skulle ja vilja skriva nån kod utanför så ja slapp skriva om den i alla case, men det får vara som det är nu då det funkar precis som ja vill (^_^)

Tack ska du ha för den kodsnutten :D

emilv 2009-07-27 14:35

Du kan sätta en variabel vid varje case, och köra min kod efteråt (där du använder variabeln för att bestämma vilken fil som ska inkluderas). Det är extremt grundläggande kunskaper.

mr_lundis 2009-07-27 14:40

Inte överväg att faktiskt använda en redan existerande template-motor istället för att skriva din egna?

Lista med 19 st mer eller mindre bra templete-motorer:
http://www.webresourcesdepot.com/19-promis...mplate-engines/


Alla tider är GMT +2. Klockan är nu 23:41.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson