こんにちは。
リニューアルで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内に記述しようかとも思ったのですが
案外すごく簡単にできてしまうものなのかも・・と
質問させていただきました。
アドバイスよろしくお願いいたします。
xslファイル内に php includeを記述するには
Re: xslファイル内に php includeを記述するには
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形式である必要があります。
例えば、
ではダメで、
のように書く必要があります。
XMLである為には、
(1) 先頭にxml宣言(<?xml versition〜の部分)があること。
(2) 単一のルート要素が存在すること。
が必要です。
(1)はすぐ分かると思いますが、(2)は、最初の例だと「ルート要素」がpと
ulの二つ存在している為、XMLとしては不正になってしまいます。この為、
ダミーとしてdivで全体を囲って正式なXMLとしています。
ファイルの文字コードはxslファイルに合わせてUTF-8にしておいた方が
無難かと思います。
このように多少面倒なことも多いのですが、もし必要でしたらご活用下さい。
ご不明点は再度ご質問頂ければと思います。
ちなみにxsl:includeは、xslの記述を部品化する場合に便利です。
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の記述を部品化する場合に便利です。
ありがとうございます
早速の回答ありがとうございます!
やはり私がわかっていないだけで、ちゃんと方法はあるのですね。
includeばかり考えていましたが、document関数で実現できるのですね!
本当に助かります。
読み込まれる側のhtmlについてアドバイスありがとうございます。
CMS化しないファイルでも呼びだすファイルなので
xmlにしてしまって大丈夫かなと思ったのですが
作業自体は簡単なのでこれで試してみたいと思います。
迅速かつ丁寧な回答、本当にありがとうございました
やはり私がわかっていないだけで、ちゃんと方法はあるのですね。
includeばかり考えていましたが、document関数で実現できるのですね!
本当に助かります。
読み込まれる側のhtmlについてアドバイスありがとうございます。
CMS化しないファイルでも呼びだすファイルなので
xmlにしてしまって大丈夫かなと思ったのですが
作業自体は簡単なのでこれで試してみたいと思います。
↑こちらも便利そうなので、メニュー部分を部品化する方法も勉強のため試してみようと思います!ちなみにxsl:includeは、xslの記述を部品化する場合に便利です。
迅速かつ丁寧な回答、本当にありがとうございました