🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.xml
Article #9988

Re: [XSLT] Dynamiczne szablony

#9988
From: Andrew Cohen
Date: Tue, 16 Sep 2008 00:42
52 lines
3903 bytes
Mariusz S. pisze:
> mhy, przerobić zawsze można, ale myślałem, że można rozwiązać ten 
> problem po stronie szablonu.
   No tak. Tak byłoby najlepiej. Wtedy samo php sprowadzałoby się do przetransformowania GET na XML i odpalenia czegoś w stylu:

xslt::transformacja('szablony/index.xsl', $xml);

> Tworzenie oddzielnych plików xsl dla każdej akcji w module moim zdaniem 
> mija się z sensem.
   A jednak cytujesz takie rzeczy, jak kontakt_dodaj.xsl i kontakt_lista.xsl, ponieważ chcesz pewne rzeczy trzymać osobno. Proponuję coś takiego (mogą być błędy, to tylko koncepcja):

kontakty_dodaj.xsl:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="modul.xsl" />
<xsl:template mode="abc" match="*">
	<!-- tutaj rzeczy z dodaj -->
</xsl:template>
<xsl:template match="system">
	<xsl:call-template name="strona" /> <!-- ewentualnie z with-param, jeśli trzeba -->
</xsl:template>
</xsl:stylesheet>

modul.xsl:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="head.xsl" />
<xsl:import href="body.xsl" />
<xsl:template name="strona">
    <html lang="pl">
      <head>
        <xsl:apply-templates select="." mode="Head"/>
      </head>
      <body>
        <xsl:apply-templates select="." mode="Body"/>
      </body>
    </html>
</xsl:template>
</xsl:stylesheet>

fragment body.xsl:
<!-- zamiast choose -->
<xsl:apply-templates select="." mode="abc"/>

   Jednak patrząc z szerszej perspektywy, to Twoje rozwiązanie jest lepsze. Masz na wejściu xml, w którym w zależności od pewnego elementu/atrybutu chcesz wykonać pewne template'y. xsl:choose właśnie do tego służy i to jest poprawne rozwiązanie. Być może chciałbyś zaimportować tylko taki akrusz, z którego rzeczywiście skorzystasz, a nie wszystkie (kontakty_dodaj.xsl, kontakty_lista.xsl). I to jest właśnie to coś, co ja bym rozwiązywał na poziomie PHP. Wybór arkuszu. Ten wybór zależy od parametrów z GET, które i tak przetwarzasz w PHP, więc wybór arkuszu niewiele tutaj miesza, a będzie optymalizacją dla silnika XSLT, który nie będzie musiał przetwarzać tylu plików. Ile to będzie kodu w PHP i co tracisz nie robiąc tego w XSLT?
   A jeśli z jakichś innych powodów bardzo zależy Ci na tym, żeby jednak pewne rzeczy zrobić w XSLT, a nie PHP, to szomiz podał najlepsze i najmocniejsze rozwiązanie:

"Transformacje, przed jej wykonaniem mozesz... stransformowac ;>"

   Będzie to wymagało podwójnej transformacji za każdym razem (przez to wolniejsze), ale będziesz miał swobodę, jakiej chcesz. Oczywiście do momentu, kiedy okaże się, że przydałoby się to 3 razy transformować:)

   Podsumowując wywód: XSLT to nie Lisp. Tutaj nie można wszystkiego.
Technical Details
Message-ID: <gamv6i$ahk$1@news.onet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail
References: <galask$skr$1@news.onet.pl> <galq2q$tpl$1@news.onet.pl> <galtep$9n0$1@news.onet.pl> <gam266$nar$1@news.onet.pl> <gam47c$tmc$1@news.onet.pl> <gam59a$60e$1@nemesis.news.neostrada.pl> <gam5ai$1n5$1@news.onet.pl> <gam6eo$4r0$1@news.onet.pl> <gam9jq$g3o$1@news.onet.pl> <gamaee$hpi$2@news.onet.pl> <gamm8f$q6m$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail
From: Andrew Cohen <cohen72@o2.pl>
Newsgroups: pl.comp.xml
Subject: Re: [XSLT] Dynamiczne szablony
Date: Tue, 16 Sep 2008 02:42:27 +0200
Organization: Onet.pl
Lines: 52
Message-ID: <gamv6i$ahk$1@news.onet.pl>
References: <galask$skr$1@news.onet.pl> <galq2q$tpl$1@news.onet.pl> <galtep$9n0$1@news.onet.pl> <gam266$nar$1@news.onet.pl> <gam47c$tmc$1@news.onet.pl> <gam59a$60e$1@nemesis.news.neostrada.pl> <gam5ai$1n5$1@news.onet.pl> <gam6eo$4r0$1@news.onet.pl> <gam9jq$g3o$1@news.onet.pl> <gamaee$hpi$2@news.onet.pl> <gamm8f$q6m$1@news.onet.pl>
NNTP-Posting-Host: jan200.net.autocom.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1221525522 10804 77.236.6.47 (16 Sep 2008 00:38:42 GMT)
X-Complaints-To: usenet@news.onet.pl
NNTP-Posting-Date: Tue, 16 Sep 2008 00:38:42 +0000 (UTC)
X-Sender: /NXnEdMO/pH8lMVpkvxASg==
In-Reply-To: <gamm8f$q6m$1@news.onet.pl>
User-Agent: Thunderbird 2.0.0.16 (X11/20080707)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit