webForumDet fria alternativet

Visa/Dölj funktion till trädmeny

ASP

0 svar · 265 visningar · startad av Nino82

Medlem sedan juli 20035 inlägg
Frågan#1

Hej

Jag har en trädmeny som jag har tänkt använda till en produktkatalog. Menyn hämtar information från en Access databas och skriver ut den som en ul lista. Allt ser bra ut och den fungerar kanon bortsätt från mitt problem, som är att hela trädet visas. Jag skulle alltså vilja att trädet från början är kollapsad och när man klickar på en kategori så visas alla underkategorier.

Jag har hittat ett JavaScript som gör detta, men problemet med de scriptet är att kategorier som har underkategorier inte har en vanlig länk, vilket ställer till det då jag hämtar produkter med länken list.asp?catid= så om det finns produkter under den kategorin kommer de inte att visas. Ett annat problem med detta script är att när man skickas vidare till sidan list.asp så är trädet kollapsad igen.

Det är inget krav att använda detta JavaScript, eller JavaScript överhuvudtaget för den delen, utan de går lika bra med asp och Request.Querystring eller liknande, typ som Macce´s meny: http://www.webforum.nu/showthread.php?t=76224

Någon som har ett förslag på hur jag skulle kunna göra?

Min kod ser ut enligt följande:

'Öppnar databasen
Call dbOpen(Connect)

intSpace = 0

Sub PrintTree(intParent)
	strSQL = "Select * From t_categories Where parentID="& intParent &" And active=True Order By sorting asc"
	Set objCategories = Connect.Execute(strSQL)
		
		Response.Write(Space(intSpace * 2) & "<ul>" & vbCrLf)
		intSpace = intSpace + 1
		
		Do Until objCategories.EOF
			strSQL = "Select parentID From t_categories Where parentID = "& objCategories(0)
			Set objNode = Connect.Execute(strSQL)
				
				If Not objNode.EOF Then
					Response.Write(Space(intSpace * 2) & "<li><a href=""list.asp?catid="& objCategories(0) &""" title="""& objCategories(2) &""">"& objCategories(2) &"</a>" & vbCrLf)
					intSpace = intSpace + 1
					PrintTree objNode(0)
				Else
					Response.Write(Space(intSpace * 2) & "<li><a href=""list.asp?catid="& objCategories(0) &""" title="""& objCategories(2) &""">" & objCategories(2) & "</a></li>" & vbCrLf)
				End If
				
			objNode.Close : Set objNode = Nothing
			objCategories.MoveNext
		Loop
		
	objCategories.Close : Set objCategories = Nothing
	intSpace = intSpace - 1
	
	If intSpace = 0 Then
		Response.Write("</ul>" & vbCrLf)
	Else
		Response.Write(Space(intSpace * 2) & "</ul>" & vbCrLf & Space((intSpace - 1) * 2) & "</li>" & vbCrLf)
		intSpace = intSpace - 1
	End If
	
End Sub

PrintTree 0

Call dbClose(Connect)

och JavaScriptet ser ut så här:

var parentLinkIsOpener=1; // whether to use parent link/text as opener, overriding its own link

if(window.attachEvent)window.attachEvent('onload',cm);
else if(window.addEventListener)window.addEventListener('load',cm,false);

function cm(){
 cmId=0;
 if(!document.getElementsByTagName)return; // reject non-compliant browsers
 a=document.getElementById('sub-nav').getElementsByTagName('UL');
 for(i=0;a[i];i++){
  if(a[i].getElementsByTagName('UL')){
   // a[i] is an object which has a collapsible list in it
   b=a[i].childNodes;
   for(j=0;b[j];j++){
    if(b[j].nodeName=='LI'){
     d=b[j].getElementsByTagName('ul');
     if(d.length){
      c=document.createElement('a');
      c.setAttribute('href','javascript:cmSwitch("cm'+(cmId)+'")');
      c.setAttribute('id','cm'+(cmId)+'A');
      if(parentLinkIsOpener){
       // we've chosen to use the parent link as the opener
       var e=b[j].innerHTML;
	   e=e.replace(/(\n|\r)/g,'');
       e=e.replace(/(<ul|<UL).*/,'');
       e=e.replace(/<[^>]*>/g,'');
       c.innerHTML=e;
       b[j].replaceChild(c,b[j].childNodes[0]);
      }else{
       // create a new [+] link as the opener
       c.style.display='inline';
       c.innerHTML='[+]';
       b[j].insertBefore(c,b[j].firstChild);
      }
      d[0].setAttribute('id','cm'+(cmId++));
      d[0].style.display='none';
     }
    }
   }
  }
 }
}

function cmSwitch(id){
 a=document.getElementById(id);
 a.style.display=(a.style.display=='block')?'none':'block';
 if(parentLinkIsOpener)return;
 a=document.getElementById(id+'A');
 a.innerHTML=(a.innerHTML=='[+]')?'[-]':'[+]';
}
260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)