Avatar billede davidchristensen Praktikant
03. juli 2003 - 15:50 Der er 15 kommentarer og
1 løsning

Noget med faneblade og skiftende CSS-classes i xsl

Hej der

Jeg vil lave en fanebladsmenu i xsl, som genererer en række <td>'er efter hinanden alt efter hvad der står i et xml-dokument.

Det kan jeg imidlertidig godt og det ser nogenlunnde sådan her ud:

<xsl:template match="menupunkt">
        <td onmouseover="bgColor='#EFEFEF'" onmouseout="bgColor='red'"><xsl:attribute name="nowrap"/>
            <a>
                   
                   
               
                <xsl:attribute name="href">
                    <xsl:value-of select="link"/>
                </xsl:attribute>
                <xsl:attribute name="target">
                    <xsl:value-of select="target"/>
                </xsl:attribute>
               
               
                <xsl:value-of select="tekst"/>
            </a>
        </td>
    </xsl:template>


Problemet er blot, at jeg gerne vil have lavet det sådan, at f.eks baggrundsfarven eller CSS-classen ændrer sig på det aktive fanblad (f.eks til hvidt imens de inaktive er grå). Jeg har prøvet at fedte med noget javascript og tænke rigtigt meget over hvad pokker jeg kan gøre, men jeg ku godt lige bruge lidt hjælp vist..

Nogen der har en god ide?

David
-
Avatar billede atoft Nybegynder
03. juli 2003 - 16:12 #1
Er det du vil at køre en ny transformering af din xml via xslt'en hvergang en bruger klikker på en fane eller vil du blot lave transformeringen en gang og så skal resten ske via javascript?
Avatar billede davidchristensen Praktikant
03. juli 2003 - 16:19 #2
æhm.. Jeg vil gerne lave den hver gang, helst.. Altså menuen skal ikke ligge i en frame..
Avatar billede davidchristensen Praktikant
03. juli 2003 - 16:28 #3
..for lige at gøre det lidt mere indviklet, så har jeg lavet det sådan, at der er en række xsl-skabeloner som allesammen har en variabel der så henter det samme xsl-stylesheet som så genererer menuen.. Så jeg ville blive mægtig glad hvis det kan holdes inde i selve menu-stylesheetet.. Iøvrigt kunne det os være godt helt at undgå javascript.. -Jeg læste nemlig om en tidlig version af xsl hvor der var enelleranden "<xsl:onActive>" eller i den stil man kunne bruge til netop sådannoget.. Men det vil ik lige du'.. :/
Avatar billede atoft Nybegynder
03. juli 2003 - 16:41 #4
hver enkelt <menupunkt> element i din xml skal have en id. Når du så klikker på et faneblad sætter du så denne med addParameter på din xsltProcessor. I dit xslt har du så en xsl:if som checker på om <menupunkt> elementets id er lig med den id du har sat med addParameter. Gør den det sætter du en ny baggrundsfarve mv.
Avatar billede davidchristensen Praktikant
03. juli 2003 - 16:53 #5
uha.. den fangede jeg ikke lige helt.. Hvordan sætter jeg addParameter i min xsl-processor? og hvordan kalder jeg så denne addParameter fra mit xsl-stylesheet? Der skal måske nogle flere point på bordet..? :)
Avatar billede atoft Nybegynder
03. juli 2003 - 17:03 #6
Hvormange points har du? :-)

Hvordan transformerer du idag er server eller clientside og det med msxml eller hvordan gør du idag.
Avatar billede davidchristensen Praktikant
03. juli 2003 - 19:33 #7
Det er pt clientsidet og med msmxl, ja.. Men det må gerne bygges så det relativt nemt kan laves til serversidet.. Og jeg har sikkert point nok ;) Jeg vil faktisk gerne give 200 point for det ialt, hvis det altså blir godt.. Så kan jeg måske bruge princippet omkring noget andet en dag :)
Avatar billede davidchristensen Praktikant
03. juli 2003 - 19:33 #8
msxml, mener jeg jo..
Avatar billede atoft Nybegynder
03. juli 2003 - 20:16 #9
Vil du poste dit nuværende xslt og xml her.
Avatar billede atoft Nybegynder
03. juli 2003 - 20:22 #10
Prøv at kigge lidt på nedenstående det kan give dig et hint om hvordan man laver en processor og sender en parameter til den.
det er javascript.


var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0");
var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
var xslProc;
xslDoc.async = false;
xslDoc.resolveExternals = false;
xslDoc.load("sample.xsl");
xslt.stylesheet = xslDoc;
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.4.0");
xmlDoc.async = false;
xmlDoc.resolveExternals = false;
xmlDoc.load("books.xml");
xslProc = xslt.createProcessor();
xslProc.input = xmlDoc;
xslProc.addParameter("param1", "Hello");
xslProc.transform();
alert(xslProc.output);

File Name: Sample.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html"/>
  <xsl:param name="param1"/>
  <xsl:template match="/">
      The parameter value was: <xsl:value-of select="$param1"/>
  </xsl:template>
</xsl:stylesheet>
Avatar billede davidchristensen Praktikant
03. juli 2003 - 20:44 #11
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="module_navigation.xsl"?>

<navigationsmodul>
   
    <menupunkt id="000001">
        <tekst>Forside</tekst>
        <link>pages/page_frontpage.xml</link>
        <target>iframe_1</target>
    </menupunkt>
    <menupunkt id="000002">
        <tekst>Produkter</tekst>
        <link>http://www.dlcd.dk</link>
        <target>iframe_1</target>
        <undermenupunkter>
            <undermenupunkt>
                <tekst>Undermenuen virker ikke endnu!</tekst>
                <link>../pages/index_page_allpages.xml</link>
                <target>iframe_1</target>
            </undermenupunkt>
        </undermenupunkter>
    </menupunkt>
    <menupunkt id="000003">
        <tekst>Index alle sider</tekst>
        <link>pages/page_index_allpages.xml</link>
        <target>iframe_1</target>
    </menupunkt>
    <menupunkt id="000004">
        <tekst>Browser</tekst>
        <link>modules/VR2Lbrowser/VR2Lbrowser_frameset.htm</link>
        <target>iframe_1</target>
    </menupunkt>
    <menupunkt id="000005">
        <tekst>Admin</tekst>
        <link>admin/VR2Ladmin_frameset.htm</link>
        <target>iframe_1</target>
    </menupunkt>
</navigationsmodul>

OG

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   
    <xsl:include href="modules/module_navigation.xsl" />
    <xsl:output method="html"/>
   
    <xsl:template match="/">
        <html>
           
           
    <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
         
                        <!-- Navmodul-->
       
                        <table width="100%" height="100%" border="0" bgcolor="#FGFGFG" cellpadding="0" cellspacing="0">

    <table height="32" border="1" align="right">
                                        <tr>
                                            <xsl:apply-templates select="$navigationsmodul/menupunkt" />
                                        </tr>
                                                                        </table>
        Her kommer det individuelle afsnit for hver sideskabelon..
    </body>
    </html>
    </xsl:template>
                           
</xsl:stylesheet>
   
OG

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>

    <xsl:variable name="navigationsmodul" select="document('module_navigation.xml')/navigationsmodul"/>
   
   


    <xsl:template match="menupunkt">
        <td onmouseover="bgColor='#EFEFEF'" onmouseout="bgColor='red'"><xsl:attribute name="nowrap"/>
            <a>
                   
                   
               
                <xsl:attribute name="href">
                    <xsl:value-of select="link"/>
                </xsl:attribute>
                <xsl:attribute name="target">
                    <xsl:value-of select="target"/>
                </xsl:attribute>
               
               
                <xsl:value-of select="tekst"/>
            </a>
        </td>
    </xsl:template>

</xsl:stylesheet>


Hvis du gider at kalde variablen for "$Active" eller deromkring vil jeg blive glad :)
Avatar billede davidchristensen Praktikant
03. juli 2003 - 20:48 #12
Hov, der mangler lige en tabel slut-tag.. Stylesheetet i midten skal se sådan ud:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   
    <xsl:include href="modules/module_navigation.xsl" />
    <xsl:output method="html"/>
   
    <xsl:template match="/">
        <html>
           
           
    <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
         
    <!-- Navmodul-->
       
    <table width="100%" height="100%" border="0" bgcolor="#FGFGFG" cellpadding="0" cellspacing="0">

        <table height="32" border="1" align="right">
              <tr>
                  <xsl:apply-templates select="$navigationsmodul/menupunkt" />
              </tr>
        </table>
    </table>
        Her kommer det individuelle afsnit for hver sideskabelon..
    </body>
  </html>
  </xsl:template>
                           
</xsl:stylesheet>
Avatar billede davidchristensen Praktikant
19. januar 2004 - 09:55 #13
Smid et svar atoft, s'il vous plaiz
Avatar billede davidchristensen Praktikant
30. juni 2005 - 21:23 #14
smid svar, sí´l vouz plaiz :)
Avatar billede atoft Nybegynder
01. juli 2005 - 08:29 #15
ok
Avatar billede davidchristensen Praktikant
01. juli 2005 - 12:06 #16
og tak :)
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