Dreamweaverのテンプレート 〜 2:ネストしたテンプレート 〜
Dreamweaver(以下DW)では、テンプレートを基にさらにテンプレートを作る、といったネスト構造を持たせることが可能です。「基本テンプレート → ヘッダフッタを入れたテンプレート → 各ページ」のような作りにしておくと融通が利きそうですね。
今回は、テンプレートをネストした場合に、実際のHTMLがどうなるかを見てみましょう。
なお、エントリのパーマリンクからお越しの皆様へ。現在、はてダではスーパーPRE記法の中にHTMLコメントを入れると何故か表示されない不具合があるようです。日付のページからだとちゃんと表示されるので、ソース内のHTMLコメントが表示されない場合は2008/09/21のページへどうぞ。
■土台のテンプレート(親テンプレート)
まず、前回まとめたこのテンプレートを土台にします。ファイル名は仮にTemplates/base.dwtとします。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- TemplateBeginEditable name="dochead" --> <title></title> <!-- TemplateEndEditable --> <link rel="stylesheet" href="../css/base.css" type="text/css" media="all"> </head> <body> <!-- TemplateBeginEditable name="body" --> <!-- TemplateEndEditable --> </body> </html>
head要素内の編集可能領域名を「head」から「dochead」に変更しています。DW8では編集可能領域名に「head」を使うと怪しい挙動、というかどう見てもバグだろという挙動をするので変更しました。これについては、また別エントリで。
■ネストしたテンプレート(子テンプレート)
親テンプレートから新たにドキュメントを開いて、それをまたテンプレートとして保存します。ファイル名は何でもいいんですが、ひとまずTemplates/page.dwtとします。
単純にbase.dwtを開いて、テンプレート保存した場合、page.dwtは以下のようになります。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/base.dwt" codeOutsideHTMLIsLocked="false" --> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- InstanceBeginEditable name="dochead" --> <title></title> <!-- InstanceEndEditable --> <link rel="stylesheet" href="../css/base.css" type="text/css" media="all"> </head> <body> <!-- InstanceBeginEditable name="body" --><!-- InstanceEndEditable --> </body> <!-- InstanceEnd --></html>
内容的には、ただのテンプレートを適用した普通のページと何一つ変わりません。
親テンプレートで設定した編集可能領域がフリーダムすぎるので、もう少しテンプレートを固めます。編集可能領域をネストする場合は、InstanceBeginEditable 〜 InstanceEndEditable の中に TemplateBeginEditable 〜 TemplateEndEditable で領域を確保します。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/base.dwt" codeOutsideHTMLIsLocked="false" --> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- InstanceBeginEditable name="dochead" --> <title></title> <!-- InstanceEndEditable --> <link rel="stylesheet" href="../css/base.css" type="text/css" media="all"> </head> <body> <!-- InstanceBeginEditable name="body" --> <div id="header"> <!-- TemplateBeginEditable name="header" --> <!-- TemplateEndEditable --> </div> <div id="content"> <!-- TemplateBeginEditable name="content" --> <!-- TemplateEndEditable --> </div> <div id="footer"> <!-- TemplateBeginEditable name="footer" --> <!-- TemplateEndEditable --> </div> <!-- InstanceEndEditable --> </body> <!-- InstanceEnd --></html>
こんな感じに、bodyの下にheader, content, footerという3つのブロックを作って、それぞれ編集可能領域を作成しました。これで保存。
■ページ作成
今度は、こうして作ったTemplate/page.dwtから実際のページを作成します。
読み込まれたテンプレートをそのままindex.htmlとして保存すると、以下のようになりました。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/page.dwt" codeOutsideHTMLIsLocked="false" --> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- InstanceBeginEditable name="dochead" --> <title></title> <!-- InstanceEndEditable --> <link rel="stylesheet" href="css/base.css" type="text/css" media="all"> </head> <body> <div id="header"> <!-- InstanceBeginEditable name="header" --> <!-- InstanceEndEditable --> </div> <div id="content"> <!-- InstanceBeginEditable name="content" --> <!-- InstanceEndEditable --> </div> <div id="footer"> <!-- InstanceBeginEditable name="footer" --> <!-- InstanceEndEditable --> </div> </body> <!-- InstanceEnd --></html>
base.dwtとpage.dwtどちらの編集可能領域も同じように InstanceBeginEditable 〜 InstanceEndEditable に展開されました。
このページ上ではbase.dwtの編集可能領域なのか、page.dwtのそれなのかは分からないですね。そもそも、base.dwtの存在自体が見えない。
親テンプレートでは、body要素内全てを編集可能領域としていましたが、その情報は欠落しています。編集可能領域をネストした場合、下の階層の情報のみが引き継がれるようです。
■まとめ
- 親テンプレートの編集可能領域は、子テンプレート→ページにそのまま引き継がれる
- 親テンプレートの編集可能領域内に、子テンプレートでさらに編集可能領域を作ると、子テンプレートで設定した編集可能領域だけが編集可能になる
- ページには直接の親となるテンプレートの情報のみが記録され、ネスト情報は記録されない