xsl-list
[Top] [All Lists]

Re: controller stylsheet. performance, best practices question

2003-04-23 08:46:52
Dear Michael,

i am trying to understand what you mean and have search in google for an 
example from Novatchev, but have not succeed.

If you could explain it a litte further i would appreciate it very much. A time 
ago i do implement "dynamic templates" and failed.

I cannot figure out how the template xyzPage with mode="switch" is getting 
involved when i call

from template match="/" following in my switch.xml parameter p with xyz:

<xsl:apply-templates
select="document('switch.xml')/switch/*[name()=$p]">
  <xsl:with-param name="current-node" select="."/>
</xsl:apply-templates>

Then i am in node xyz in switch.xml

I do not see how template xyzPage with mode="switch" is applied then
?


Thanks for your patience,

Hans Braumüller 
-- + -- 
Mail Art Not War
http://crosses.net

 



An alternative you might consider is the Novatchev "dynamic templates"
method.

Change

<xsl:template name="xyz">

to

<xsl:template match="xyzPage" mode="switch">
  <xsl:param name="$current-node"/>

Create an element <xyz/> (e.g. in a document switch.xml)

Change

<xsl:choose>
  <xsl:when test="$p='xyz'">
    <xsl:call-template name="xyzPage"/>
  etc. etc.

to

<xsl:apply-templates
select="document('switch.xml')/switch/*[name()=$p]">
  <xsl:with-param name="current-node" select="."/>
</xsl:apply-templates>

For greater efficiency, use keys.

Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com  

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
Terence Kearns
Sent: 23 April 2003 07:46
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] controller stylsheet. performance, best 
practices question


In an application I'm building, I've found myself applying an MVC 
pattern to how I call templates. I have once stylesheet used 
by all my 
web-based server scripts (PHP scripts). This website then calls 
different templates based on the context of the script.
Here is the script, questions to follow:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
     version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

     <!-- import templates implementing dynamic content -->
     <xsl:import href="xsl-inc_finder.xsl" />
     <xsl:import href="xsl-inc_subjects.xsl" />
     <xsl:import href="xsl-inc_requirements.xsl" />
     <xsl:import href="xsl-inc_listing.xsl" />
     <xsl:import href="xsl-inc_login.xsl" />

     <!-- set context used by the controller -->
     <xsl:param name="op" select="'<?php echo @$_GET["op"]; ?>'" />

     <!-- BEGIN MAIN PAGE TEMPLATE-->
     <xsl:template match="/">
             <!-- blah blah blah. masses of literal content 
goes here -->
<!-- CALLS TO THE MAIN CONTENT BEGIN HERE -->
                 <xsl:choose>
                     <xsl:when test="$op = 'finder'">
                         <xsl:call-template name="finderPage" />
                     </xsl:when>
                     <xsl:when test="$op = 'subjects'">
                         <xsl:call-template name="subjectsPage" />
                     </xsl:when>
                     <xsl:when test="$op = 'login'">
                         <xsl:call-template name="loginPage" />
                     </xsl:when>
                 </xsl:choose>
<!-- CALLS TO THE MAIN CONTENT END HERE -->
             <!-- blah blah blah. masses of literal content 
goes here -->
     </xsl:template>
     <!-- END MAIN PAGE TEMPLATE-->

</xsl:stylesheet>



Functionally, this appoach seems to work well for me. My 
questions is: Is taking this sort of approach prone to big 
performance problems? I can see that in many cases, most of 
the templates imported at the top 
of the style sheet will not even be used. They can't be 
included on the 
fly because they need to be top-level (can't be nested inside IF or 
CHOOSE).*

Any other observations about the merits of this approach appreciated.

cheers.

* I could probably use PHP code to include it on the fly, but 
I want to 
avoid doing so because I've made a rule for myself not to use 
server-side code embedded in the stylesheet. I've done so in 
the param 
of this example for purposes of clarity, normally I would 
send them to 
the processor directly from the PHP function call.


-- 
Terence Kearns: Web Developer
University of Canberra: +61 2 6201 5516



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list