簡単なスニペットを作ってみよう - 定番「Hello world」と日付の表示
最終更新日:2011年4月3日 shortlink:http://modx.jp/?id=327
今月より簡易なブログを始めます。まずはスニペットの作り方の紹介から。本家開発サイトなどを通じてさまざまなスニペットが配布されていますが、せっかくなので自作に挑戦してみましょう。MODXは機能を簡単に自作できるCMSです。
プログラミング入門としては定番の「Hello world」
たとえば、「Hello world」を表示するためのスニペットは次のように書きます。
return 'Hello world';
スニペット名を「ハロー・ワールド」などとして保存し、投稿画面の本文などに [[ハロー・ワールド]] と記述してページを表示してみてください。「Hello world」と表示されているはずです。
以下、解説です。MODXのスニペットの作り方というよりは、PHPの文法に関する説明です。
「return」というのは、値を返すという意味。返す先は、呼び出し元である [[ハロー・ワールド]] を記述する場所です。echoやprintも使えますが、returnを使うことに慣れてみてください。目的が分かりやすいパーツを作ることができるようになります。
「return 'Hello world'; 」は、「Hello world」をリターン(返す)するだけのプログラム。php文の行末には「 ; 」(セミコロン)を忘れずに。「 ' 」(シングルクォート)にもちゃんと役割がありますので、必ず書いてください。
今日の日付を出力してみよう
さらにワンステップ進めます。決まりきった文字列を出力するだけならチャンクで十分。せっかくスニペットを使うなら動的出力を。アクセスした日時やページによって、出力内容がさまざまに変わる仕組みを作ることができます。
return date('Y年m月d日');
こう書くと、アクセスした時点の日時を返します。
ここではPHPのdate関数を使っています。「関数」といっても数字の一種ではありません。「機能」であると理解するとよいでしょう。date関数は日付を出力する機能です。date関数以外にはstrftime関数というものもあり、それぞれ目的が少し違うため使い分けられます。
MODXの場合、キャッシュが基本的に有効です。いったん生成された値はその時点で固定されるので、数日後にアクセスしても、最初にアクセスされた日の日付のままです。これを防ぐために、[[スニペット名]]ではなく[!スニペット名!]と記述してください。こうすると、常に動的に処理して出力します。明日アクセスすれば、明日の日付を返してくれます。
phpの基本については「離れPHP島」や、とほほさんの「PHP入門」を読むとだいたい理解できると思います。手元に書籍を置いておきたいなら、たにぐちまことさんの「よくわかるPHPの教科書」やクジラ飛行机さんの「すっきりわかった! PHP」などがオススメ。MODXでPHPを習得するなら、理屈から入らずに柔らかく学んでいくとよいです。
今すぐ使える実用テクニック
応用テクニックを紹介します。といっても、さっき書いたのとほとんど同じです。多くのサイトで、今すぐ使えます。
return date('Y');
これだけの内容のスニペットを作って、
(c)[!スニペット名!] サイト名
テンプレートのフッタに上記のように記述します。
いわゆるコピーライト表記が、簡単に年次自動更新対応で記述できます。少しMODXの使い方を知ってる人ならDATETIMEスニペットを使っている人も多いと思いますが、このくらいなら配布スニペットを探して使い方を調べるより、自作するほうが簡単かもしれません。
スニペットという形で機能拡張を作ることのメリットは下記のとおり。
- CMS独自の冗長な手続きを経ることなく、簡単に機能を作成できる
- ファイルをFTPなどでアップロードする手間がない。管理画面で簡単に作成・修正できる
- コード本体はデータベースに格納されるため、アップデートの際などに誤って上書きしてしまうことがない
- データベースに格納されるため、文字化けが発生しにくい
- データベースに格納されるため、外部から機能単体で直接アクセスされてしまうことがなく、セキュア
- キャッシュの有効無効を簡単に選ぶことができるので、負荷の高いスニペットでも平気
- 作った機能を、分かりやすい名前で管理できる(全角半角・スペース交じりなどOK)
- パーツ感覚でどこからでも簡単に呼び出せる。テンプレートから呼んでもいいし、記事から呼んでもいい
「簡単にPHPを練習できる環境が欲しい」と考えている人にも、MODXは恰好の練習台になります。