Avatar billede termie Nybegynder
23. januar 2003 - 10:09 Der er 5 kommentarer og
1 løsning

Tips til Zience CMS dynamisk menu

Hej eksperter

Jeg har brug for råd eller tip til at finde en kilde til løsning af nedenstående problem.

Jeg er ved at udvikle et CMS site med brug af Zience 1.0 (Freeware CMS der har været omtalt i dette panel, og som er udviklet i ASP.)
Mit site skal fungere med en webdel, en lukket del der kræver log in (ekstranet) og en administrationsdel.

Hvis man ellers indtaster den rigtige URL, skal alle kunne se webdelenen, med f.eks 7 overmenupunkter (Zience 1.0 menu'en) og dertil et vist antal submenuer til overmenupunkterne.

Det skal nu være muligt at logge ind på ekstranettet, der overordnet har de samme overmenupunkter, men her skal være flere punkter i submenuerne (Punkter ud over dem der er i forvejen).

Hvordan er det lige at man får en differentieret undermenustrukturer som denne??
Jeg er kørt fast i at se en løsning inden for ovenstående rammer. Så jeg bliver glad hvis en af jer kan henvise til en løsning på problemet. Alternativt hører jeg gerne om andre systemer der kan håndtere ovenstående.

Her selvfølgelig søgt på Nettet.

Og løsninger som flere menustrukturer tror jeg heller ikke dur, da det selvfølgelig skal være let for brugeren at opdatere og rette i menuen.

/termie
Avatar billede hnteknik Novice
23. januar 2003 - 15:39 #1
Jeg har mit eget CMS med en 5 niveaus adgangskontrol både til menuer og sider, hvor menudelen er baseret på javascript fra DHTMLCENTAL.COM dog med egen asp opdatering af menuer.

Ded er dog ikke noget jeg slipper løs på nettet, da jeg har brug mange timer på det.

Henrik

Et tip: menuen skal genereres fra en DB, hvor det enkelte menupunkt har sit adgangsniveau. Kun de menupunkter, som er lig med eller under niveauet læses ind i arrayen, der føder menuen på skærmen.
Avatar billede termie Nybegynder
26. januar 2003 - 13:07 #2
Tak hnteknik

Det bliver sikkert min løsning at lave det hele fra bunden, det som jeg fiskede efter var om nogen havde haft et lignende problem ift. Zience CMS.

Ift. menuen fra DHTMLcentral, er det ikke et problem at man skal implementere ASP i en .js fil??

/termie
Avatar billede hnteknik Novice
27. januar 2003 - 21:22 #3
Nix grav lidt i hans exempler. Der er et, som læser det fra en database og skriver det til en fast .js.

Jeg har raffineret det lidt og skriver det ind fra en asp. Jeg holder så menu(erne) i en række application variabler for at lette indlæsningen. Du kan arbejde lidt med denne snippet:

<script>
... sædvanlig dhtml stuff
..
... her kommer the tricky part
<%
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ASP CODE START - READING ITEMS FROM THE DATABASE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
function readItemsFromDatabase(){
  //The path to your database:
  //var db ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("menu.mdb")
    var db = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" + Request.ServerVariables("APPL_PHYSICAL_PATH") + "../db/menu.mdb;User Id =Admin;Password=;";
  //var db ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("menu.mdb")
  var q = "SELECT menuID,mName,mLink,parent from tblMenu WHERE userlevel<=" + Session('userlevel') + " ORDER BY parent,menuID ASC"
 
  var rs=Server.CreateObject("ADODB.Recordset")
  rs.CacheSize = 25;         // Cache data fetching
  rs.CursorType = 3
  rs.LockType = 3
 
  //Opening database --- --
  rs.Open(q,db)
 
  //Now using getRows because that's so sexy :}
  if(!rs.EOF){
    var rsarr = rs.GetRows();
    rsarr = rsarr.toArray();
    var cols= rs.Fields.Count //Setting how much to add to row each for
  }else var rsarr=new Array()
 
  //Closing database, we don't need it anymore - we have the info in the array
  rs.close()
  rs = null
 
  var menuID,mName,mLink,parent
 

  for(row=0;row<rsarr.length;row+=cols){ //Looping rows
    //Setting variables
    menuID = "m" + rsarr[row]
    mName = rsarr[row+1]
    mLink = String(rsarr[row+2])
    if(mLink=="null") mLink=""
    parent = rsarr[row+3]
    if(parent!=0) parent = "m" + parent
    else parent=""
    //Making menu item
    Application ( 'menu'+ Session('userlevel') ) += "oM.makeMenu('"+menuID+"','"+parent+"','"+mName+"','"+mLink+"')\n";
    //Response.Write("oM.makeMenu('"+menuID+"','"+parent+"','"+mName+"','"+mLink+"')\n");
  }
}
//Calling function
if ((Application ( 'menu'+ Session('userlevel'))=="") ||(typeof(Application ( 'menu'+ Session('userlevel') ))=="undefined"))
    {
    Application ( 'menu'+ Session('userlevel') )="";
    readItemsFromDatabase();
   
        Session('hvorfra') = "Læst fra databasen";
    }else{                                                                       
        Session('hvorfra') = "Læst fra Appl variablen";
    }
Response.Write(Application ( 'menu'+ Session('userlevel') ) );
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ASP CODE END - READING ITEMS FROM THE DATABASE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
%>
.....
...
oM.construct()       
</script>

'' jeg har så lavet en tilsvarende som ved klik popper en editor op til at rette menupunkter etc. og opdatere application variablerne
Avatar billede hnteknik Novice
02. februar 2003 - 21:55 #4
>termie

kan du ikke lukke sagen, jeg tror ikke, at der sker mere
Henrik
Avatar billede termie Nybegynder
02. februar 2003 - 23:04 #5
Det har du nok ret i, jeg har gang i noget hvor jeg delvist bruger din ide så du får pointene.

Tak for tips!
/termie
Avatar billede hnteknik Novice
03. februar 2003 - 16:34 #6
Takker - Held og lykke med det. Det er ikke så svært, når man først kommer i gang med at tænke over det.

Det var ikke så meget for point, men jeg var bare lige ved at rydde op i hængepartier her på siden. Henrik
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
Kurser inden for grundlæggende programmering

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