semplice linkbar in javascript e xml

Stato
Discussione chiusa ad ulteriori risposte.

cyd

Utente Silver
11 Giugno 2007
59
0
1
70
Ciao, ho dovuto creare una linkbar per un progettino che sto sviluppando,
l'ho scritta in js con un xml come sorgente per i link, niente di speciale, anzi ..ma magari a qualcuno alle prime puo servire un esempio di come usare l'XMLDOM per gestire gli xml con javascript:
ESEMPIO: [QUI]

codice js:
Codice:
function linkbar_new(){
document.write("\n<div style=\"background-color:#cccccc\" id=\"linkBar\">\n</div>\n\n");
var obj=document.getElementById('linkBar')
obj.innerHTML=linkbar_build();
}



function linkbar_build(){

var error="Error loading the xml file: "
var rxml=null;

try {
rxml=new ActiveXObject("Microsoft.XMLDOM");
}
catch(e){
try{
rxml=document.implementation.createDocument("","",null);
}catch(e) {
return '<center>[ '+error+e.message+' ]</center>'
}
}

try{
rxml.async=false;
rxml.load('linkbar.xml');
}
catch(e) {return '<center>[ '+error+e.message+' ]</center>'}

var x=rxml.documentElement;
var r="<table id=\"linkBarTable\" width=\"100%\">";


var counter=0;
for(var i=0;i<x.childNodes.length;i++) if(x.childNodes[i].nodeType==1) counter++;
var cell_width=100/counter;

for(var i=0;i<x.childNodes.length;i++) {
if(x.childNodes[i].nodeType==1){
r+="\n<td width=\""+cell_width+"%\" align=\"center\">\n";
r+="<a href=\""+x.childNodes[i].getElementsByTagName('url')[0].childNodes[0].nodeValue+"\">";
r+=x.childNodes[i].getElementsByTagName('name')[0].childNodes[0].nodeValue+"</a>\n</td>\n";
}
}

return r+"</table>\n";

}

il file xml deve avere la seguente struttura:
Codice:
<linkbar>

<link>
<name>NOME DEL LINK</name>
<url>URL DEL LINK</url>
</link>

</linkbar>

si include ovunque cosi:
Codice:
<script>
linkbar_new();
</script>

Commento e post originale: [QUI]

cia'
 
per qualche misterioso motivo firefox nn va, quindi ho dovuto verificare con ie7, e con quello funziona.......... evidentemente è un problema del browser..............

cmq bella la barra.......
 
@malex: si mi sa che è chrome, ho testato e ritorna lo stesso errore e in piu senza il codice dell'errore.... magari è una questione di sicurezza..anche se ne dubito... in ogni caso puoi caricare l'xml con una richiesta http in ajax, sempre non sia un problema di supporto del DOM xML... ci lavorero'!

gia che sono qui posto il corrispondente in php, cosi evitiamo il fattore browser:

PHP:
<?php

function linkbar_build($width=false){
$r='<div id="linkbar" style="background-image:url(cbar.png)">'; //inizializzo il risultato
//se non riesce a caricare linkbar.xml ritorna errore.
if(!$x=simplexml_load_file('linkbar.xml')) return $r."[ Error loading the XML file ]</div>";
$c=0;
//prelevo il numero di links
foreach($x->link as $ln) $c++;
//setto la lunghezza di ogni <td/>
$relat_w=$width?((string)($width/$c))."px":((string)(100/$c)).'%';
//inizializzo la tabella
$r.='<table width="'.($width?(string)$width.'px':'100%').'" >';
//aggiungo i links
foreach($x->link as $lnk) $r.='<td width="'.$relat_w.'" align="center"><a href="'.(string)$lnk->url[0].'">'.(string)$lnk->name.'</a></td>';
echo $r."</table></div>";
}

?>

la funzione riceve come parametro facoltativo un intero che corrsponde alla lunghezza della barra in pixel, in caso non li venga passato niente lavora in percentuali.
 
beh... l'immagine l'ho inserita con la stessa definizione che usi nei css: background-image:url(..)
è uguale scrivere le definizioni dentro l'attributo style o scriverle in un file css esterno
 
allora molto molto carino, però avrei una domanda(anche un pò niubba considerate le mie conoscenze praticamente nulle di js)
Qual'è l'utilità di richiamare un pagina esterna per una linkbar?
 
pagina esterna??
se intendi l'xml beh...sicuramente per una cosa cosi semplice se ne puo fare a meno, ma l'utilita sta nella possibilità di modificare il contenuto del controllo piu facilmente sia a mano che runtime a seconda delle scelte dell'utente...poi un file xml puo essere letto anche in altre parti della pagina e anche server side e puo essere dinamicamente modificato secondo le esigenze...è una questione di dinamicità, inoltre prendilo come un esempio su come interpretare l'xml con js
 
Si infatti, l'ho preso subito come esempio, e mi ci sto racapezzando con un pò di calma...
La mia non voleva essere una critica, ma solo una semplice richiesta di chiarimento :)
 
Innanzi tutto complimenti GreyFox , poi , ci tengo a dire che il link che hai segnalato e molto utile ti meriti veramente un +1 complimenti continua cosi =)
 
Stato
Discussione chiusa ad ulteriori risposte.