Dreamweaverのテンプレートファイル(拡張子dwt)及びテンプレートで作った通常のインスタンスファイル(拡張子htmlなど)をMODxのテンプレートとして読み込みます。動作イメージはスニペット「IncludeFile」と似ていますが、当スニペットでは [*content*] などのリソース変数を書く必要がありません。Dreamweaverの「編集可能領域」をそのままリソース変数・テンプレート変数に変換しますので、編集可能領域名をあらかじめ「content」などにしておいてください。
編集可能領域名をMODxの変数に変換するので、編集可能領域内にダミーのデザインコードを書いておくことができます。デザイナーが「こんな感じで作ってみました」と作ったテンプレートをそのまま何も手を加えずに使えるので便利です。デザイナーはMODxのことを意識することなくサイト構築に参加できます。
ライブラリ名はチャンクに変換します。WayfinderやDittoなどで出力する部分をライブラリブロックとして作っておけば、デザイナーはメニューや新着情報一覧のブロックをダミーのイメージで作り込んで、そのままFTPでアップロードしてテンプレートとして適用させることができます。
ただしMODx担当者は、あらかじめこれらのブロックの出力をダミーのイメージのとおりに作り込んでおく必要はあります。いったん作ってしまえば、MODx担当者が出張などで留守にしていても、デザイナーは自分の判断でテンプレートのデザインに手を加えることができるため便利です。
Templatesディレクトリ(Dreamweaver既定)のdwtファイルを読み込む
コード: 全て選択
[[dwtinc? &file=`mysite.dwt`]]
コード: 全て選択
[[dwtinc? &file=`/assets/templates/mysite.html`]]
コード: 全て選択
[[dwtinc? &file=`mysite.dwt` &title=`[*pagetitle*]-[(site_name)]`]]
- 編集可能領域名をMODxの変数名と合わせる
- Wayfinderなど動的出力ブロックはライブラリ(チャンク)で
- dwtファイルを読み込む場合は画像やリンク記述は絶対パスで( /images/pict.jpg など)
IncludeFileだとDreamweaverでテンプレートデザインに手を入れるたびにMODx関連の記述を戻したり消したりするのが面倒だと思いますが、これを使えばDreamweaverで作ったファイルがそのまま使えるので便利だと思います。TYPO3などでは昔からできてたことですが、習得しやすいMODxでこういうことができるとよいなと思いました。
コード: 全て選択
<?php
/* Setting */
if(empty($title)) $title = '[*pagetitle*]|[(site_name)]';
/* Ready */
$search_dir = MODX_BASE_PATH . Templates . '/';
if(strpos($file, '/') === 0)
{
$file = MODX_BASE_PATH;
$file .= preg_replace('@^' . MODX_BASE_URL . '@', '', $file);
}
elseif(strpos($file, '/')===false)
{
$file = $search_dir . $file;
}
$tv_pattern = '<!-- [a-zA-Z]+?BeginEditable.+?name="(.+?)".+?[a-zA-Z]+?EndEditable[^>]+>';
$tv_pattern = '@' . $tv_pattern . '@ms';
$ck_pattern = '<!-- #BeginLibraryItem "/Library/(.+?)\.lbi".+?<!-- #EndLibraryItem[^>]+?>';
$ck_pattern = '@' . $ck_pattern . '@ms';
/* Main */
$tplfile = file_get_contents($file);
$tplfile = preg_replace($tv_pattern, "[*$1*]", $tplfile);
$tplfile = str_replace('[*doctitle*]', '<title>' . $title . '</title>', $tplfile);
$tplfile = preg_replace($ck_pattern, '{{' . "$1" . '}}', $tplfile);
return $tplfile;
?>