PHPTAL テンプレートを使用するようにサイトを移行中です。今のところ、既存のページはそのままにして、テンプレートを使用してすべての新しいページを作成しています。
古いページでは標準のヘッダーとフッターが使用されます。典型的なページでは、次のようにコンテンツが生成されます。
printHeader();
//print page content
printFooter();
PHPTAL の新しいページは同じ標準のヘッダー/フッターを使用するので、それらをマクロに移動します。新しいページと古いページのヘッダーとフッターの両方に同じソース HTML を使用したいと考えています。これを実現するには、printHeader() および printFooter() 関数を編集して、テンプレートを使用してヘッダーおよびフッター マクロを出力します。
printHeader() {
$source = '<metal:use-macro="macros.xhtml/header" />';
$header = new PHPTAL()
$header->setSource($source);
echo $header->execute();
}
私が抱えている問題は、ヘッダーに開始<html>
と<body>
タグが含まれており、それらがフッターで閉じられていることです。マクロが有効な xml ではないため、PHPTAL が例外をスローしています。
Not all elements were closed before end of the document. Missing: </tal:block></tal:block></tal:block></body></html></tal:block>
これを回避する最も簡単な方法は何ですか? 構造体を使用してこれらのタグを文字列として含める回避策を見つけましたが、ずさんなようです:
<tal:block metal:define-macro="header">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<tal:block tal:content="structure string:<html>" />
<head>
head content
</head>
<tal:block tal:content="structure string:<body>" />
header content
これを行うためのよりクリーンな方法はありますか?<html>
andの欠落している終了タグを無視できるようにするある種の tal 属性<body>
でしょうか?