Copyright(コピーライト)の年度表記を自動で更新するスニペットを作る

部品の使い方や応用ノウハウ
アバター
yama
管理人
記事: 2873
登録日時: 2009年7月29日(水) 02:50

Copyright(コピーライト)の年度表記を自動で更新するスニペットを作る

投稿記事by yama » 2010年5月08日(土) 22:09

Copyright(コピーライト)の年度(年号?)表記を毎年自動的に更新したい。こういう処理はCMSが得意とするところです。

コード: 全て選択

Copyright <?php echo date('Y'); ?> MODx CMS JAPAN All rights reserved.
たとえばWordPressやJoomlaだと、テンプレート中に直接このように記述します。簡単です。MODxはテンプレート中にphp文を書くことができないので、スニペットを利用する必要があります。どこでそんなスニペットが配布されているのか探すのも大変なので、作ってみます。

コード: 全て選択

<?php
return date('Y');
?>
スニペット新規作成画面を開き、上記のように書いて「今年」などの名前をつけてスニペットを新規作成します。phpのdate関数を用いています。

コード: 全て選択

Copyright [[今年]] MODx CMS JAPAN All rights reserved.
テンプレート中のフッタあたりに上記のように記述し、更新します。以上です。

テンプレート中にphp文を直接記述できるWordPress等と比べるとステップがひとつ増えますが、動的処理をこのような形で必ずカプセル化することにより、サイト全体でのプログラムの管理がしやすくなります。

MODxの場合、キャッシュの制御についてはプログラム側で配慮する必要がないというメリットもあります。年明けの瞬間に必ず更新したい場合は

コード: 全て選択

Copyright [!今年!] MODx CMS JAPAN All rights reserved.
このように書きます。そこまでタイトに考える必要がなく、少しでも静的出力にこだわりたい場合は、年が明けた最初の出勤日にサイト全体のキャッシュをクリアすれば、最初に示した書き方のままでワンクリックで更新完了です。どちらでもよいのですが、プログラマーではなくデザイン担当者の好みだけで決められるのがメリットと言えます。

少し脱線しましたが、スニペットの作り方の基本について説明すると、
  • スニペット名は日本語や半角スペースなどを含んでいても大丈夫
  • 必ず「<?php」と「?>」で囲む必要があるが、もし書き忘れても保存時にシステムが自動的に補完してくれる
  • 出力させたい値は必ず「return」で返す。returnでどういう値を返すかが、そのスニペットの仕事になる
ということが言えます。
※echoやprintもいちおう使えますがreturn推奨です

MODxでは多数の拡張機能が配布されていますが、簡単なものなら自作をおすすめします。phpの基本を理解すれば、多数の拡張機能の中から目的のスニペットを探し回るより、自作するほうがずっと近道です。

また、MODxはphpとの親和性が高いCMSでもあるので、そういう意味でもスニペットの自作に慣れることをおすすめします。phpの基礎スキルだけで、多彩なコンテンツコントロールが可能です。
アバター
kurosquare
メンバー
メンバー
記事: 6
登録日時: 2009年8月15日(土) 23:03

Re: Copyright(コピーライト)の年度表記を自動で更新するスニペットを作る

投稿記事by kurosquare » 2010年5月08日(土) 23:16

テンプレート中にphp文を直接記述できるWordPress等と比べるとステップがひとつ増えますが、動的処理をこのような形で必ずカプセル化することにより、サイト全体でのプログラムの管理がしやすくなります。

本当に仰るとおりで、小手先だけで出力を弄れてしまうと、必然的にスパゲッティコードになってしまいます。
普段からphp文を直接記述できるCMSばかり使っていると、ついついカプセル化が面倒になってしまうのですが、MODxにはそういった心配は少ないですね。
アバター
yama
管理人
記事: 2873
登録日時: 2009年7月29日(水) 02:50

Re: Copyright(コピーライト)の年度表記を自動で更新するスニペットを作る

投稿記事by yama » 2010年5月09日(日) 00:03

テンプレートにphpを直接記述できるタイプのCMSでも、投稿記事中にはphpを書けないケースは多いと思います。MODxのスニペットはテンプレート・リソース・チャンクのいずれからも呼び出せますし、呼び出し方も全く同じで分かりやすい。いったんスニペットを作ってしまえば、さまざまな場面で使えるので再利用性が高いです。デザイン担当者・記事担当者に違和感を感じさせないような名前でパーツ化できるのも良い点だと思います。

runSnippetメソッドを用いればスニペットやプラグイン・モジュールの中から他のスニペットを呼び出すこともできますね。自由度が高いうえにシンプルです。しかも入れ子で組み合わせて呼び出すこともできるという・・スニペットの中どころかスニペットコールの中で他のスニペットを実行することもできるので、アイデア次第でなんでもできる感じがします。リンクタグの中でもスニペットコールを書くことができますね。

この自由度の高さは、開発中のRevoではさらに強化・拡張されるようです。