Article View: pl.comp.xml
Article #9988Re: [XSLT] Dynamiczne szablony
From: Andrew Cohen
Date: Tue, 16 Sep 2008 00:42
Date: Tue, 16 Sep 2008 00:42
52 lines
3903 bytes
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-mailReferences:
<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