Avatar billede carstensuurland Nybegynder
17. maj 2008 - 15:13 Der er 9 kommentarer og
1 løsning

Hvordan gør DotNetNuke dét?

I DotNetNuke (et OpenSource CMS) kan man uploade nye aspx filer til systemet, hvorefter man kan anvende disse som skabeloner til nye sider.

Er der nogen der har en idé om hvordan man fortolker en ellers ukendt ny aspx fil, i sådan en løsning?

Jeg vil selv gerne eksperimentere med at lave et CMS og syntes det er en fed feature, at man selv kan oprette nye skabeloner. Jeg kan fint gøre det med en html side, men vil jo hellere have en aspx som giver flere muligheder.

Så: Hvordan fletter man f.eks en eksisterende masterpage sammen med en ny og ukendt aspx? Og hvordan kan jeg sikre mig, at evt. eksisterende URL'er kommer til at bruge den nye aspx istedet?
Avatar billede thomas_yde Nybegynder
18. maj 2008 - 12:22 #1
Du kan skifte masterpage i runtime.
Så kan du hente din masterpage filnavn ud fra en database og gøre brug af dette:

protected void Page_Load(object sender, EventArgs e)
    {
        Page.MasterPageFile = "";Control
    }

Jeg ved ikke om det er sådan de gør i DotNetNuke, men det er da en mulighed :)
Avatar billede thomas_yde Nybegynder
18. maj 2008 - 12:24 #2
ups...det skal selfølgelig være:
Page.MasterPageFile = "";

...ved ikke hvordan det "Control" kom med.
Avatar billede carstensuurland Nybegynder
18. maj 2008 - 12:34 #3
Ja jeg ved at man kan skifte MasterPage. Det i sig selv er ikke noget problem. Men spørgsmålet er, hvordan jeg kan skifte selve aspx filen ud - på runtime... Ikke MasterPagen.
Avatar billede mcnovy Nybegynder
18. maj 2008 - 15:57 #4
thomas yde:
Hvis man vil vælge masterpage i runtime skal til ske i pre_init()
og ikke page_load..

carstensuurlund:
ved ikke om jeg mistforstår dig..
men er det deres sider som forumet, osv (altså deres moduler..? )

for så er det ikke aspx sider, men ascx, dvs usercontrols...
det meste af dnn er bygget op i webparts, og i det benytter man sig af usercontrols..
Avatar billede mcnovy Nybegynder
18. maj 2008 - 16:00 #5
og hvis du blot vil kunne tilføje en aspx side som skal flettes sammen med en MasterPage,
så skal du jo bare lave en content page.
dvs, så det her kommer til at stå øverst
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Din Side" %>

og så skal MasterPage.master naturligvis rettes til det filnavn du bruger..
Avatar billede thomas_yde Nybegynder
19. maj 2008 - 19:53 #6
mcnovy: tak for korrektionen, det var nu bare mig der var lidt doven og ville bringe et forslag. Men ja du har helt ret. :)
Avatar billede mcnovy Nybegynder
19. maj 2008 - 20:09 #7
thomas_yde:
håber ikke jeg lød negativ,
det vare bare så der ikke er nogen som prøver med page_load..

og til de interesserede som der måtte være, så kan jeg lige tilføje at pre_init() ikke kan benyttes i en masterpage fil, men skal bruges i content_pages (som er meget meget kode) eller i en global.asax
Avatar billede carstensuurland Nybegynder
19. maj 2008 - 22:12 #8
Tak for kommentarerne. Jeg er helt med på hvad I siger - det er heller ikke det spørgsmålet går på...

Forestil Jer (som det er tilfældet i DotNetNuke), at jeg opretter et stykke tekst som vises via default.aspx. Default.aspx sidens udseende af valgt mellem en række skabeloner som ALLE er aspx sider (ikke ascx).

I DotNetNuke får min tekst f.eks URL'en www....dk/default.aspx?ID=1

Hvis jeg nu gerne vil ændre layoutet på default.aspx, kan jeg vælge mellem en af de andre aspx filer der er lagt på løsningen - de kunne f.eks hedde Green.aspx, Blut.aspx eller noget helt andet.

Vælger jeg f.eks Green.aspx som skabelon til min tekst, vil jeg stadig kunne få fat i min tekst via den tidligere default.aspx?ID=1 - og ikke green.aspx?ID=1

Spørgsmålet er derfor : Hvordan kan jeg angive, at default.aspx nu indeholder nogle andre felter + noget nyt html - og at disse iøvrigt ligger i green.aspx? Er det via en server.execute eller hvad?
Avatar billede sherlock Nybegynder
19. maj 2008 - 23:33 #9
Hvis du downloader DNN starter-projektet og eksperimenterer med at lave DNN-moduler, får du en god forståelse af opbygningen. Det bruger dynamisk load af usercontrols og asp.net's just-in-time compilering. DNN kan også bruge pre-compilerede controls (PA'er). Modulerne kobles på siderne vha. en standard for navngivning af de forskellige PANE's på en side i et skin. Tilknytningerne gemmes i databasen, sammen med modulets særlige data, som f.eks HTML'en i et Test/HTML-modul.

Derudover er der også en teknik, som de kalder SkinObjects, som dynamisk erstatter Tokens i markup'en på en side, med usercontrols. Sådan er menuen, logoet og "Register/Login"-kontrollen bl.a. sat på.

Der er en del mere i det, men altsammen gør brug af dynamisk loadede controls.
Avatar billede carstensuurland Nybegynder
25. juni 2008 - 23:10 #10
Lukket
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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