xslファイル内に php includeを記述するには

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
ifeel
パワーユーザー
記事: 32
登録日時: 2006年9月28日(木) 19:40

xslファイル内に php includeを記述するには

投稿記事 by ifeel » 2007年7月11日(水) 15:12

こんにちは。

リニューアルでCMS化する作業をしているのですが
行き詰まってしまったので質問させていただきに参りました。

基本的には全てHTMLで書かれているページで
メニュー部分のみ
<?php include("../include/submenu.html"); ?>
と呼びだしているページを、CMS化しようとしていたのですが

これをそのままxslファイルに記述しても
エラーは出ないものの、submenu.htmlを表示していない状態でした。

xslファイルにphpが書いてあるからいけないのだろうと思うのですが

<div>
カテゴリー名(CMS化したいとところ)
<?php include("../include/submenu.html"); ?>

文章(CMS化したいとところ)
</div>

と言う感じのつくりなので、php部分だけ外に出すことができません。

一応xmlのサイトを見て
<xsl:include href="../../../../include/submenu.html" />
と言う風にも書いてみたのですが、エラーが出てしまいました。

あきらめてメニュー部分をxsl内に記述しようかとも思ったのですが
案外すごく簡単にできてしまうものなのかも・・と
質問させていただきました。
アドバイスよろしくお願いいたします。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: xslファイル内に php includeを記述するには

投稿記事 by webmaster » 2007年7月11日(水) 16:34

 xslファイル内に他のhtmlファイルを読み込む場合には、document関数と
xsl:value-of命令を使うのが手っ取り早いかもしれません。

 <xsl:value-of select="xxx" /> と書くと、xxx項目の内容をXMLデータの
まま、出力結果として出力します。

 しかし今回は他のファイルの内容を出力したいので、document関数と組み合わせて
次のように記述します。

 <xsl:value-of select="document('submenu.html' )" />

 こう書くと、submenu.html の中のXMLデータをそのままそこへ出力します。

 ここで、submenu.htmlへの相対パスは、そのxslファイルが置かれているフォルダ
を中心に書いて下さい。同一フォルダに置くのが最も手っ取り早いと思いますが、
今回はそういうわけにもいかないと思いますので、相対パスで記述して下さい。

 もう一つ注意点があります。
 submenu.html の中身は、正式なXML形式である必要があります。

 例えば、

コード: 全て選択

    <p>これはメニュー項目サンプルです。</p>
    <ul>
    	<li>メニュー1</li>
    	<li>メニュー2</li>
    	<li>メニュー3</li>
    	<li>メニュー4</li>
    </ul>
 ではダメで、

コード: 全て選択

<?xml version="1.0" encoding="UTF-8"?>
<div>
    <p>これはメニュー項目サンプルです。</p>
    <ul>
    	<li>メニュー1</li>
    	<li>メニュー2</li>
    	<li>メニュー3</li>
    	<li>メニュー4</li>
    </ul>
</div>
 のように書く必要があります。

 XMLである為には、

(1) 先頭にxml宣言(<?xml versition〜の部分)があること。
(2) 単一のルート要素が存在すること。

 が必要です。
 (1)はすぐ分かると思いますが、(2)は、最初の例だと「ルート要素」がpと
ulの二つ存在している為、XMLとしては不正になってしまいます。この為、
ダミーとしてdivで全体を囲って正式なXMLとしています。

 ファイルの文字コードはxslファイルに合わせてUTF-8にしておいた方が
無難かと思います。

 このように多少面倒なことも多いのですが、もし必要でしたらご活用下さい。
 ご不明点は再度ご質問頂ければと思います。

 ちなみにxsl:includeは、xslの記述を部品化する場合に便利です。

ifeel
パワーユーザー
記事: 32
登録日時: 2006年9月28日(木) 19:40

ありがとうございます

投稿記事 by ifeel » 2007年7月11日(水) 16:55

早速の回答ありがとうございます!

やはり私がわかっていないだけで、ちゃんと方法はあるのですね。
includeばかり考えていましたが、document関数で実現できるのですね!
本当に助かります。

読み込まれる側のhtmlについてアドバイスありがとうございます。

CMS化しないファイルでも呼びだすファイルなので
xmlにしてしまって大丈夫かなと思ったのですが
作業自体は簡単なのでこれで試してみたいと思います。
ちなみにxsl:includeは、xslの記述を部品化する場合に便利です。
↑こちらも便利そうなので、メニュー部分を部品化する方法も勉強のため試してみようと思います!


迅速かつ丁寧な回答、本当にありがとうございました

返信