Avatar billede jonat Nybegynder
26. april 2006 - 13:59 Der er 20 kommentarer og
1 løsning

Include uden SSI eller php el asp?

Hej

Jeg har fået min IT C opgave i Information teknologi.

Jeg kan programmere i flere forskellige sprog og har arbejdet en del med hjemmesider.

Nu har jeg bare det problem at jeg gerne vil lave en menu som ligger i en fil, og som bare hentes ind på siderne.

Jeg har overvejet SSI, men det kan jeg ikke, da det skal kunne afvikles lokalt fra skolens computere.

Så er der en måde i RENT html hvor at man kan lave en include?

På forhånd tak.

// Jonat.
Avatar billede jonat Nybegynder
26. april 2006 - 14:01 #1
Der er muligheden med frames, men da det som regelt ikke er særligt SEO venligt, så vil jeg helst undgå det...

// Jonat.
Avatar billede Slater Ekspert
26. april 2006 - 14:09 #2
Du kan også lave en javascript fil, som mange bannerbyt-firmaer gør.
Det er bare grimt og besværligt, da du er nødt til at skrive document.write(""); omkring hver linje.
Dog den eneste mulighed, så vidt jeg ved, bortset fra frames, hvis det skal fungere lokalt. I så fald skriver du bare <script type="text/javascript" src="menu.js" /> hvor du vil have den.
Avatar billede olebole Juniormester
26. april 2006 - 15:26 #3
<ole>

document.write på hver linje er rigtig dårlig kode - hvilket i øvrigt er kendetegnende for de fleste medie-bureauer og bannerbyt-firmaer.

Du kan sagtens lave en god menu, der inkluderes med JS - men i SEO-sammenhænge er det langt værre end (i)frames. Serverscripting er eneste realistiske/fornuftige løsning  :)

/mvh
</bole>
Avatar billede Slater Ekspert
26. april 2006 - 21:03 #4
Jeg sagde ikke det var god kode, men nu er server-side jo sjovt nok ikke en mulighed, da siden skal kunne afleveres lokalt, så det er stadig, så vidt jeg ved, den bedste metode af dem til rådighed.
Avatar billede milandt Nybegynder
26. april 2006 - 23:15 #5
IIS'en (webserver på windows platformen) er vist sat sådan op at du kan bruge SSI i *.shtml filer. I princippet kan man sætte sin webserver på så du kan bruge SSI på hvilen som helst type filer, men det er ikke sikkert det er en mulighed hvis du har dit site hosted på en delt server.

Prøv at lave en .shtml fil, og bruge server side include sådan her:
<!--#include virtual="/include.html" -->
Avatar billede milandt Nybegynder
26. april 2006 - 23:16 #6
..og jeg læste så ikke hele dit spørgsmål :) beklager.
Avatar billede erikjacobsen Ekspert
26. april 2006 - 23:20 #7
Du laver bare dine sider med SSI: <!--#include.....-->, tester på en server der understøtter det. Når alting virker og du skal aflevere produktet, lader du et lille program (skrevet i hvad som helst, C, C#, Perl, Pascal, Java, YouNameIt), løbe dine HTML-sider igennem, finde <!--#include...-->, og indsætte indholdet af den inkluderede fil. Kan tænkes sådan et program allerede findes. Du kan stadig rette i de oprindelige filer, køre programmet igen, og have opdaterede sider.
Avatar billede mclemens Nybegynder
26. april 2006 - 23:55 #8
Jeg hælder til .js løsningen, som viperine nævner... Det er jo ikke din skyld, at du ikke kan bruge din viden til at udføre opgaven professionelt...

Jeg vil anbefale at du bruger jsdom metoder istedet for document.write og innerHTML til at oprette din menu i html dokumentet :)

- eller gør som erik siger ... og lægger menuen ind på alle sider
... det fylder mere - men det er jo stadig ikke din skyld.


Stræber mulighed: Vedlæg en udgave i php eller asp med den korrekte udgave der er seo optimal... Og så den anden udgave med en af de ovenstående løsninger (frame/js/tung html) =)
Avatar billede mclemens Nybegynder
27. april 2006 - 00:13 #9
Edit en php included eller asp included menu så det virker som en side (outputtes sammen med den anden html) er jo det samme slutresultat som det forslag erik kommer med (så at kalde det for tung html i forhold til php/asp included menu er jo forkert - undskyld erik) ... nåh, det er for sent på aftenen :D
Avatar billede olebole Juniormester
27. april 2006 - 01:16 #10
Min anke vedr. document.write på hver linje gik nu egentlig på noget andet. I de fleste sprog er det, så vidt jeg ved (måske Erik kender undtagelser), fra hurtigere til dramatisk hurtigere at samle én streng og udskrive ét sted - i forhold til at udskrive linje for linje.
I JS går det således op til flere hundrede gange hurtigere at stoppe strenge i et array, som tilsidst join'es i en document.write:

var a = [];
a[0] = "<a href=\"side_1.html\">Side 1</a>";
a[1] = "<a href=\"side_2.html\">Side 2</a>";
a[2] = "<a href=\"side_3.html\">Side 3</a>";
a[3] = "<a href=\"side_4.html\">Side 4</a>";
document.write(a.join(""));

Jeg er ikke sikker, men jeg mindes et eller andet om, at ARRAY.push("string") kom en lille anelse langsommere ud af en test, jeg engang lavede. Derfor den valgte metode ... men det er absolut småting - hvis jeg overhovedet husker korrekt  =)

På den anden side - hvis det stadig skal være en JS-løsning, hvilket jeg stadig ikke selv ville vælge - er det ganske rigtigt endnu bedre at bruge DOM.
Da vi alligevel om nogle år skal til at skrive XHTML, kan vi ligeså godt begynde at tilstræbe, vores scripts stadig er brugbare til den tid.
Det giver i hvertfald langt mere mening, end at gå ud af sit gode skind for at få sine dokumenter til at validere mod XHTML idag ... blot for at finde ud af, at alle ens scripts får bruseren til at gå ned med et hult drøn og en XML-fejl, når standarden hedder 2.0 og den er understøttet af browserne  ;o)

jonat >> Lav en fil, du kalder menu.js
I den skriver du (uden script-tags eller noget):

var d=document;
var aMenuLinks = [
    ["page_1.html", "Side Et"],
    ["page_2.html", "Side To"],
    ["page_3.html", "Side Tre"],
    ["page_4.html", "Side Fire"]
];
function buildMenu() {
    var oPar, oLnk, oTxt;
    oPar = d.getElementById("menu");
    for (var i=0; i<aMenuLinks.length; i++) {
        oLnk = d.createElement("a");
        oLnk.setAttribute("className", "menuLink");
        oLnk.setAttribute("href", aMenuLinks[i][0]);
        oTxt = d.createTextNode(aMenuLinks[i][1]);
        oLnk.appendChild(oTxt);
        oPar.appendChild(oLnk);
    }
}

Så kan du importere denne menu i dine HTML-filer med:

<div id="menu">
<script type="text/JavaScript" src="menu.js"></script>
</div>

Du kan evt. teste med dette style-sheet:

<style type="text/css">
#menu {
    width: 200px;
    font: bold 14px verdana, sans-serif;
    border: 2px solid #999999;
}
#menu a, #menu a:visited {
    width: 188px;
    height: 20px;
    padding: 2px 0 0 10px;
    display: block;
    text-decoration: none;
    color: #ffffff;
    background: #999999;
    border: 1px solid #cccccc;
}
#menu a:hover {
    padding: 1px 1px 1px 9px;
    text-decoration: none;
    color: #666666;
    background: #ededed;
    border-color: #ffffff #333333 #333333 #ffffff;
}
</style>
Avatar billede olebole Juniormester
27. april 2006 - 01:19 #11
- og så skal funktionen naturligvis kaldes  :D

var d=document;
var aMenuLinks = [
    ["page_1.html", "Side Et"],
    ["page_2.html", "Side To"],
    ["page_3.html", "Side Tre"],
    ["page_4.html", "Side Fire"]
];
function buildMenu() {
    var oPar, oLnk, oTxt;
    oPar = d.getElementById("menu");
    for (var i=0; i<aMenuLinks.length; i++) {
        oLnk = d.createElement("a");
        oLnk.setAttribute("className", "menuLink");
        oLnk.setAttribute("href", aMenuLinks[i][0]);
        oTxt = d.createTextNode(aMenuLinks[i][1]);
        oLnk.appendChild(oTxt);
        oPar.appendChild(oLnk);
    }
}
buildMenu();
Avatar billede olebole Juniormester
27. april 2006 - 01:21 #12
Denne linje er faktisk overflødigt med et style-sheet, som det viste:
    oLnk.setAttribute("className", "menuLink");
Avatar billede mclemens Nybegynder
27. april 2006 - 01:59 #13
... lige en vigtig justering:

buildMenu();
->
window.onload=function(){buildMenu();}
(så DOM er klar når scriptet går igang)
Avatar billede mclemens Nybegynder
27. april 2006 - 02:09 #14
Fjols mclemens... (ignorer ovenstående)
Jeg havde sat scriptet ind i head :D
- Lækkert nok olebole :)
Avatar billede olebole Juniormester
27. april 2006 - 02:36 #15
- tak. Desværre er id-attributten ikke valid på et script-element. Ellers kunne man kunnet skrive:

<script type="text/JavaScript" src="menu.js" id="menu"></script>

- i stedet for:

<div id="menu">
<script type="text/JavaScript" src="menu.js"></script>
</div>

- og så oprettet div'et 'oPar' med DOM - brugt ELEMENT.replaceChild og dermed udskiftet script-elementet med menu-div'et. Det havde været en anelse mere 'sexy' ... men ak  =)
Avatar billede olebole Juniormester
27. april 2006 - 02:42 #16
- tilgengæld ville den dybere programmatiske logik nok blive mindre transparent, hvis man skifter scriptkode ud med kode, der repræsenterer et element ... men 'oppe' på element-niveau ville det se okay ud  ;o)
Avatar billede mclemens Nybegynder
29. juli 2006 - 11:48 #17
.lukketid?
Avatar billede jonat Nybegynder
29. juli 2006 - 22:19 #18
Ja...

Jeg endte med at lave et program som kunne lægge top og bund ind i alle dokumenter...

Og fik 11 for opgaven...

Så det er OK :)...

Alle der gerne vil have point, smider bare svar..

// Jonat.
Avatar billede mclemens Nybegynder
29. juli 2006 - 22:31 #19
Tillykke med karakteren :o)
Ingen point til mig, jeg gav minimal
eller stort set intet bidrag til tråden :o)
Avatar billede erikjacobsen Ekspert
29. juli 2006 - 22:42 #20
Ingen point til mig, tak. Flot klaret - mon ikke det med top og bund kun var en lille del af opgaven...
Avatar billede olebole Juniormester
07. august 2006 - 13:28 #21
Jamen, så fejer jeg da gerne op  ;o)
- har ikke været så aktiv herinde på det seneste, så jeg undskylder den sløve respons
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