CMS を使ってウェブサイトを構築すると、ページ毎に<title>
タグや<meta>
タグを変えることができます。これを可能にするために、今までは HTML ファイルに何らかの加工をしていました。
CMS により、<php echo $title;?>
のように PHP を書く、{{title}}
のように特殊文字で囲う、といった方法の違いはあります。しかし、方法の違いこそあれ、テンプレートファイルに何か目印を挿入する、という作業が必要になることが多かったです。確かに手間でしたが、それを当然だと思い込んでしまっていました。
ページを書くときに、タイトルや説明文を書くのは、ほとんどの CMS で行います。
では HTML 出力はどうでしょうか。出力は、<head>
タグの中に<title>
タグや<meta>
タグで記述する、というのは HTML で決まっているわけで、CMS 独自の部分はありません。であれば、テンプレートでわざわざ指定しなくてもよいですね。
Novius OS では、Controller_Front
クラスで、ヘッダーを解析して必要なら追加/置き換えする作業を行ってくれます。
protected function _handleHead() { $replaces = array( '_base_href' => array( 'pattern' => '<base [^>]*/?>', 'replace' => '<base href="replace" />', ), '_title' => array( 'pattern' => '<title>[^<]*</title>', 'replace' => '<title>replace</title>', ), '_meta_description' => array( 'pattern' => '<meta [^>]*name="?description[^>]*"? */?>', 'replace' => '<meta name="description" content="replace">', ), '_meta_keywords' => array( 'pattern' => '<meta [^>]*name="?keywords[^>]*"? */?>', 'replace' => '<meta name="keywords" content="replace">', ), '_meta_robots' => array( 'pattern' => '<meta [^>]*name="?robots[^>]*"? */?>', 'replace' => '<meta name="robots" content="replace">', ), ); $content = $this->_content; $replace_fct = function($pattern, $replace) use (&$content) { $content_old = $content; $content = preg_replace( '`'.$pattern.'`iUu', $replace, $content, -1, $count ); // if $content content none utf8 characters, preg_replace return empty string if (empty($content) && !empty($content_old)) { $content = preg_replace( '`'.$pattern.'`iU', $replace, $content_old, -1, $count ); } return $count; }; 以下略
このため、テンプレートで、<meta name="description" content="ここにCMS独自のマークアップ" />
という作業は不要です。ただし description, keywords, robots 以外の <meta> タグを作りたい場合は旧来の CMS のような作業が発生します。
「CMS は、HTML テンプレートを編集する作業が必要だ」という思い込みで、ドキュメントを探す、という無駄な時間を過ごしてしまいました。