Standing on the Shoulder of Linus

Home / 2013 / 6月 / 03 / 古い CMS の常識に囚われてはいけないという反省

古い CMS の常識に囚われてはいけないという反省

CMS を使ってウェブサイトを構築すると、ページ毎に<title>タグや<meta>タグを変えることができます。これを可能にするために、今までは HTML ファイルに何らかの加工をしていました。

CMS により、<php echo $title;?> のように PHP を書く、{{title}} のように特殊文字で囲う、といった方法の違いはあります。しかし、方法の違いこそあれ、テンプレートファイルに何か目印を挿入する、という作業が必要になることが多かったです。確かに手間でしたが、それを当然だと思い込んでしまっていました。

ページを書くときに、タイトルや説明文を書くのは、ほとんどの CMS で行います。

header-seo

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

関連

Posted in cms | Tagged cms, テンプレート, マークアップ
← バンクーバーのうぇぶ屋セミナー at 名古屋大須に行ってきた Novius OS で Wysiwyg 投稿画面を分割する方法 →

アーカイブ

人気の投稿とページ

  • キンドル本を印刷する(PDFに変換する)方法
  • 名古屋駅から国際センターまでの道のり(徒歩)
  • AGPL ライセンス(GPLとは似ているが違いもある)
  • 6年使ったイーモバイル(Y!mobile)を解約手続。店頭でSIM返却
  • JP-Secure SiteGuard WP Pluginは不正ログイン防止に役立つか

プロフィール

水野史土:月70万PVホームページ制作会社のレスキューワーク株式会社で、PHPソフトウェアのサポートを行っている。concrete5コミュニティリーダー、Novius OSコアコード貢献者でもある。 詳しくは管理者詳細参照。
大好評WordPress書籍「WordPressユーザーのためのPHP入門 はじめから、ていねいに。」サポートページ

Copyright © 2015 Standing on the Shoulder of Linus.