load.xml.php
PHP-code:
<?php
// indien lager dan php 5, dit uncommenten
// function file_get_contents($file) {
// $file = file($file);
// return !$file ? false : implode('', $file);
// }
class xml{
//variabelen
// om de output in te onthouden
var $out = "";
var $temp = array();
//om de huidige plaats te kennen
var $inside = false;
var $huidige_tag = "";
var $huidige_atr = "";
//ingegeven door de gebruiker
var $hoofdag = "";
var $layout = "";
var $vervang = "";
var $tags = "";
######
#deze functie parsed een bestand
######
function parse($bestand, $layout, $vervang, $tags, $hoofdtag){
//alle andere buiten bestand en layout in de class schrijven
$this->hoofdtag = $hoofdtag;
$this->layout = $layout;
$this->vervang = $vervang;
$this->tags = $tags;
//parser maken en hem in deze class laten werken
$xml_parser = xml_parser_create();
xml_set_object($xml_parser, &$this);
//functies om alles juist te laten weergeven
xml_set_element_handler($xml_parser, "begin", "einde");
xml_set_character_data_handler($xml_parser, "data");
//het bestand parsen:
$op = file_get_contents($bestand) or die("Het bestand kon niet gevonden worden");
$ret = xml_parse($xml_parser, $op) or die($this->fout($bestand, $xml_parser));
//alles legen
xml_parser_free($xml_parser);
return $this->out;
}
######
#deze functie geeft het begin van een element en de atributen weer
######
function begin($parser, $tag, $attributen){
if(strtolower($tag) == strtolower($this->hoofdtag)){
$this->inside = true;
//array aanmaken:
$this->maak_array();
} else {
$this->huidige_tag = strtolower($tag);
}
//zien of er attributen moeten toegevoeg worden:
reset($this->temp);
foreach($this->temp as $key => $waarde){
//veld_attr_attribuutwaarde
foreach($attributen as $key2 => $waarde2){
$poging = strtolower($tag)."_attr_".strtolower($key2);
if($key == $poging){
$this->temp[$poging] = $waarde2;
}
//de eerste word raar genoeg niet meegenomen dus resetten we het gewoon
if(!isset($eerste)){
reset($attributen);
$eerste = true;
}
}
reset($attributen);
}
reset($this->temp);
unset($eerste);
}
######
#deze functie verwerkt de data die tussen begin en eindtag staan
######
function data($parser, $data){
if($this->temp[$this->huidige_tag] == ""){
$this->temp[$this->huidige_tag] = $data;
}
}
######
#deze functie geeft het einde van een functie (soort van output gebeurt hier ook)
######
function einde($parser, $tag){
if(strtolower($tag) == strtolower($this->hoofdtag)){
$this->inside = false;
$this->layout();
}
$this->huidige_tag = "";
}
######
#geeft de errors weer
######
function fout($bestand, $xml_parser){
$out = 'lijn: '.xml_get_current_line_number($xml_parser).'<br>
string: '.xml_error_string($xml_parser).'<br>
code: '.xml_get_error_code($xml_parser).'<br>
bestand: '.$bestand.'<br>';
return $out;
}
########
#maakt de temporary array aan met als oproep de tagnaam
########
function maak_array(){
//leegmaken:
unset($this->temp);
$this->temp = array();
//vullen
$tags = $this->tags;
if(is_array($tags)){
foreach($tags as $nummer => $tagnaam){
$this->temp[$tagnaam] = "";
}
reset($tags);
}
}
#######
#plaats alles mooi in de layout
#######
function layout(){
$layout = $this->layout;
$temp = $this->temp;
foreach($this->tags as $nummer => $tagnaam){
if(count($this->vervang) == count($this->tags)){
$layout = str_replace($this->vervang[$nummer], $temp[$tagnaam], $layout);
} else {
die("U hebt niet evenveel vervangingen als tagnamen opgegeven!");
}
}
reset($this->tags);
//out neerschrijven
$this->out .= $layout;
}
}
en dit op je pagina zetten waar je m wilt hebben (vergeet de load.xml.php niet te includen)
PHP-code:
// xml script om menu in te laden.. $taal bepaald welke XML file..
$xml = new xml;
$layout = '<li><a href=::::||burl||::::>::::||bname||::::</a>%smenu::::||nummer||::::%</li>'; // menu op een rijtje zetten
$layout = ''.$layout.''; // even netjes in een ul zetten
$vervang = array("::::||nummer||::::","::::||bname||::::", "::::||burl||::::"); // variabelen omzetten
$tags = array("bname_attr_nummer", "bname", "burl"); // kijken welke vars nodig zijn
$parse = $xml->parse("inc/xml/menu_".$taal.".xml", $layout, $vervang, $tags, "item"); // importeren, vervangen en printen
en natuurlijk aanpassen naar je eigen wensen
het is niet mijn script, ik heb t ook ergens vandaan..
en k doe dus niet aan feedback of wijzigingen