activiteiten uit xml bestand op homepage

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sander Zijnstra

Sander Zijnstra

28/10/2012 22:45:36
Quote Anchor link
Ik heb een kalender in een xml bestand. Nu zou ik graag de eerste 3 volgende activiteiten op mijn hoofdpagina willen laten zien. Dit moet dus elke dag veranderen naar de 3 volgende activiteiten. Weet iemand een script waarmee ik dit kan bereiken?

Het xml bestand is als volgt opgebouwd:

<month value="4">
<day value="14">
<label>Rommelmarkt Lemmer Museumweekend</label>
<description>Rommelmarkt Plaats: Lemmer; Riensingel 4 Tijd: 10.00-15.00</description>
</day>
</month>
etc...
Gewijzigd op 28/10/2012 22:46:06 door Sander Zijnstra
 
PHP hulp

PHP hulp

08/09/2024 05:27:02
 
Wouter J

Wouter J

28/10/2012 23:09:45
Quote Anchor link
Gebruik SimpleXml om het bestand uit te lezen. Maak een kleine functie die ze sorteert, bij voorkeur een algoritme om tijd te besparen, en een functie die dan de eerste 3 pakt.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

28/10/2012 23:31:03
Quote Anchor link
Het commentaar staat in de code. Wel zelf even uitbreiden en niet vergeten om note.xml om te noemen naar jouw eigen bestandsnaam. groeten


<!DOCTYPE html>
<html>
<body>
<div>
<!-- tussen de spans hieronder wordt de tekst uit het xml-bestand weergegeven. -->
<span id="month_span"><!-- month --></span><br>
<span id="label_span"><!-- label --></span><br>
</div>

<script>
// functie voor het ophalen van een xml-bestand.
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","note.xml",false);
xmlhttp.send();
// het xml-bestand wordt opgeslagen in xmlDoc.
xmlDoc=xmlhttp.responseXML;

// zet de "value" attribute van de <month> tag in het element met id "month_span"
// verander [0] naar [1] om de tweede <month> tag in te lezen enzovoorts
document.getElementById("month_span").innerHTML=
xmlDoc.getElementsByTagName("month")[0].getAttribute("value");

// zet de eerste <label> tag in het element met id "label_span"
// verander [0] naar [1] om de tweede <label> tag in te lezen enzovoorts
document.getElementById("label_span").innerHTML=
xmlDoc.getElementsByTagName("label")[0].childNodes[0].nodeValue;

</script>

</body>
</html>
 
Sander Zijnstra

Sander Zijnstra

28/10/2012 23:33:10
Quote Anchor link
Top ga hier morgen mee aan de slag, thnx
 
- Ariën  -
Beheerder

- Ariën -

28/10/2012 23:37:40
Quote Anchor link
Euhm... Frank, als je hem met AJAX binnenlaadt, vergeet niet dat dit alleen werkt als het op je eigen server staat. Tenzij er een orgin-header mee wordt gestuurd.

Ik denk dat het voor de TS geen probleem is, maar ik wou het toch even kwijt.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

28/10/2012 23:59:28
Quote Anchor link
Thanks Aar. Goede aanvulling. Even gegoogled.. moet een beveiliging zijn tegen ongewenste cross site requests?
Kan ik ergens in normale taal mijn kennis hierover uitbreiden?
 
Sander Zijnstra

Sander Zijnstra

30/10/2012 00:12:38
Quote Anchor link
Top precies wat ik zocht, alleen 1 probleem nog..

// verander [0] naar [1] om de tweede <month> tag in te lezen enzovoorts

is er een manier om dit automatisch elke dag 1 punt op te laten tellen?

<month> kan ik elke maand wel veranderen eventueel maar met dagen zou het toch wel prettig zijn.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

30/10/2012 06:26:41
Quote Anchor link
Waarom gebruik je daar XML voor, een databse werkt toch veel gemakkelijker?
 
Koen Vlaswinkel

Koen Vlaswinkel

30/10/2012 07:04:27
Quote Anchor link
@Ger een database is soms te veel, voor kleine scripts heb je niet per se een database nodig.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

30/10/2012 07:20:11
Quote Anchor link
Koen, het gaat niet om hoe groot het script is, maar om de informatie waarmee het moet werken. Databases zijn over het algemeen veel beter beheersbaar, onderzoekbaar enz.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

30/10/2012 08:37:15
Quote Anchor link
Sander Zijnstra op 30/10/2012 00:12:38:

is er een manier om dit automatisch elke dag 1 punt op te laten tellen?


Jazeker je bedoelt op 1 november dan alleen [1] en op 2 november [1] en [2] enzovoort?
Gewijzigd op 30/10/2012 08:38:43 door Frank Nietbelangrijk
 
Sander Zijnstra

Sander Zijnstra

30/10/2012 08:45:26
Quote Anchor link
Ja klopt dat bedoel ik. Maanden zou evt ook handig zijn, maar laten we in eerste instantie van dagen uitgaan. Ik realiseer me dat een database handiger is, maar gezoen mijn kennis daarover en de grootte van de kalender gaat er dan nog erg veel tijd inzitten.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

30/10/2012 19:26:02
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<!DOCTYPE html>
<html>
<body>
<div>

<script>
// functie voor het ophalen van een xml-bestand.
if (window.XMLHttpRequest) {    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
} else {                        // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","note.xml",false);
xmlhttp.send();
// het xml-bestand wordt opgeslagen in xmlDoc.
xmlDoc=xmlhttp.responseXML;

var datum = new Date(); //datum van vandaag
var dagen = datum.getDate();  // dag van de maand
var arr = xmlDoc.getElementsByTagName("day"); // sla alle elementen met een <day> tag op in een array

// deze functie probeert een string te pakken die tussen de tags staan zoals <label>rommelmarkt</label>
function getTagContent(element, tag) {
    var arr = element.getElementsByTagName(tag);
    if(arr.length)
        return arr[0].childNodes[0].nodeValue;
    return '-niet gevonden-';
}

// loop om alle dagen van deze maand door te lopen tot en met vandaag
for(var dag = 1; dag <= dagen ; dag++ ) {
    document.write('dag: ' + dag + '</br>'); // print de dag
    for(var j = 0; j < arr.length ; j++ ) {  // loop die door alle <day>-tag elementen loopt
        if(arr[j].getAttribute("value") == dag) { // als <day value="X"> gelijk is aan de dag die we zoeken
            document.write('label: ' + getTagContent(arr[j], 'label')+'</br>'); //print de label
            document.write('description: ' + getTagContent(arr[j], 'description')+'</br>'); // print de beschrijving
        }
    }
}
</script>
</div>
</body>
</html>


Goed hier loopt ie dan door de dagen. Begrijp goed dat getElementsByTagName('day') een array geeft met alle <day> elementen, meestal meer dan één dus.
Gewijzigd op 30/10/2012 19:29:46 door Frank Nietbelangrijk
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.