This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Streamline xslt
- From: "Robert Koberg" <rob at koberg dot com>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Wed, 25 Sep 2002 11:08:14 -0700
- Subject: RE: [xsl] Streamline xslt
- Reply-to: xsl-list at lists dot mulberrytech dot com
Hi,
Why not use xsl:include?
I like to keep all of my xsl:includes, variables and params in a global
definitions XSL. This is included in each primary/main XSLT. An example of a 2
column layout:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--
basic_2col.xsl - A basic 2 column layout
===========
This is a primary stylesheet. Each primary stylesheet includes
global_definitions.xsl,
which in turn includes the common XSL pages. Much of the layout can be affected
just
by changing the /css/project.css. When a page is requested/generated, a source
XML
(always /WEB-INF/styling/site.xml) is transformed against a primary XSL -->
<!-- *********** GLOBAL DEFINITIONS ************ -->
<!-- global_definitions.xsl includes the common XSL templates, gathers
parameters sent in
from the server and sets up common global variables. -->
<xsl:include href="global_definitions.xsl"/>
<xsl:variable name="root_relative" select="'false'"/>
<!-- match the document root to start setting up the HTML page structure -->
<xsl:template match="/">
<html>
<!-- *********** HTML HEAD ************ -->
<!-- call to head.xsl to set up the HTML HEAD -->
<xsl:call-template name="head"/>
<body onload="{$body_onload_call}">
<!-- *********** BANNER (top of the page) ************ -->
<!-- call to banner.xsl to set up the top part of the page -->
<xsl:call-template name="banner"/>
<!-- *********** START MAIN LEFT COLUMN ************ -->
<!-- ======================================= -->
<div id="leftcol">
<!-- ======== NAVIGATION? ======== -->
<!-- if the /WEB-INF/styling/site.xml has it's /config/@nav_col set
to... -->
<xsl:if test="$nav_col='narrow_left' or $nav_col='tabs_narrow_left'">
<xsl:call-template name="nav"/>
</xsl:if>
<!-- ======== LEFT COLUMN CONTENT ======== -->
<!-- applying templates on the folder's center column content and then
the
page's center column content. The match happens in find_xml.xsl.
Normally,
find_xml.xsl does not need to be altered. After the XML file is
found it proceeds
to the article.xsl template which you might want to alter.-->
<div class="floater">
<xsl:apply-templates
select="$folder_nodeset/col[@type='narrow_left']" mode="main_content"/>
<xsl:apply-templates select="$page_nodeset/col[@type='narrow_left']"
mode="main_content"/>
</div>
<br clear="all"/>
</div>
<!-- ======================================= -->
<!-- *********** END MAIN RIGHT COLUMN ************ -->
<!-- *********** START MAIN CENTER COLUMN ************ -->
<!-- ======================================= -->
<div id="centercol2left">
<!-- ======== SNAIL TRAIL ? ======== -->
<!-- Does the current page's folder properties indicate there should
be a snailtrail? -->
<xsl:if test="$folder_nodeset/@snailtrail='true'">
<xsl:call-template name="snailtrail"/>
</xsl:if>
<!-- ======== PAGER TOP ? ======== -->
<!-- Does the current page's folder properties indicate there should
be
a pager (i.e ' prev 1 2 3 n next ') above the content? -->
<xsl:if test="$folder_nodeset/@pager='true'">
<br clear="all"/>
<xsl:call-template name="pager"/>
</xsl:if>
<!-- ======== PRINT FRIENDLY ======== -->
<!-- Does the current page's properties indicate there should be a
print friendly link
showing on the page? -->
<xsl:if test="$page_nodeset/@print_friendly='true'">
<br clear="all"/>
<xsl:call-template name="pf_link"/>
</xsl:if>
<!-- ======== NAVIGATION? ======== -->
<!-- if the /WEB-INF/styling/site.xml has it's /config/@nav_col set
to... -->
<xsl:if test="$nav_col='wide_center'">
<xsl:call-template name="nav"/>
</xsl:if>
<!-- ======== CENTER COLUMN CONTENT TABLE OF CONTENTS? ======== -->
<!-- Does the current page's properties indicate there should be a
table of contents? -->
<xsl:if test="$page_nodeset/@toc='true'">
<xsl:call-template name="toc"/>
</xsl:if>
<!-- ======== CENTER COLUMN CONTENT ======== -->
<!-- applying templates on the folder's center column content and then
the page's center column content. The match happens in
find_xml.xsl.
Normally, find_xml.xsl does not need to be altered. After the XML
file is
found it proceeds to templates which you might want to alter -->
<xsl:apply-templates select="$folder_nodeset/col[@type='wide_center']"
mode="main_content"/>
<xsl:apply-templates select="$page_nodeset/col[@type='wide_center']"
mode="main_content"/>
<!-- ======== FOLDER INDEXER ======== -->
<!-- Does the current page's folder properties indicate there should
be a
pager (i.e ' prev 1 2 3 n next ') below the content? [same as
above] -->
<xsl:if test="$folder_nodeset/@index='true'">
<xsl:call-template name="indexer"/>
</xsl:if>
<!-- ======== PAGER BOTTOM ? ======== -->
<!-- Does the current page's folder properties indicate there should
be a
pager (i.e ' prev 1 2 3 n next ') below the content? [same as
above] -->
<xsl:if test="$folder_nodeset/@pager='true'">
<br clear="all"/>
<xsl:call-template name="pager"/>
</xsl:if>
<!-- ======== CENTER COLUMN CONTENT METADATA? ======== -->
<!-- Does the current page's properties indicate there should be a
metadata
showing on the page? -->
<xsl:if test="$page_nodeset/@metadata='true'">
<xsl:call-template name="metadata"/>
</xsl:if>
<br clear="all"/>
</div>
<!-- ======================================= -->
<!-- *********** END MAIN CENTER COLUMN ************ -->
<br clear="all"/>
<xsl:call-template name="footer"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
> -----Original Message-----
> From: owner-xsl-list@lists.mulberrytech.com
> [mailto:owner-xsl-list@lists.mulberrytech.com]On Behalf Of Geoff
> Sent: Wednesday, September 25, 2002 10:26 AM
> To: xsl-list@lists.mulberrytech.com
> Subject: [xsl] Streamline xslt
>
>
> I love using XSLT because I can expose my web pages as xml and use xslt
> to transform the xml into html or something else like wml. The
> presentation is cleanly separated from content.
>
> The problem I see is if I need to change the presentation. I'm sure
> someday at some point someone will say let's give the Website a new
> look. Each "page" has a php script that either points to an xml file or
> creates xml on the fly, then points to an xsl file and passes this to
> the Sablotron processor. To change the site design I have to update each
> xsl file in the site.The html is the same for each xsl stylesheet except
> the part where the xsl code lives.So ideally I would divide the file
> into header.inc, the xsl part and footer.inc.
>
> The first thought I had was use includes. Php includes won't work
> because the first thing the Sablotron processor sees is <?php //php code
> ?>. I assume the same problem occurs with Apache includes.
> XSL includes must be well formed xml documents so that wouldn't work
> either.
>
> Any suggestions?
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list