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 テンプレートを編集する作業が必要だ」という思い込みで、ドキュメントを探す、という無駄な時間を過ごしてしまいました。
