CMSのポテンシャルを引き出す─MODxで作る商用サイト

第12回 MODxのLexicon機能

この記事を読むのに必要な時間:およそ 4.5 分

以上の操作を行ったあと,再び管理画面を覗いてみると,語彙トピックを確認することができます。

図3 カスタム語彙トピックが表示されている様子

図3 カスタム語彙トピックが表示されている様子

これらの翻訳データは,/var/www/html/core/components/helloworld/lexicon以下のファイルから取得されたものですが,例のごとくブラウザからデータを更新することで,内容を上書きすることができます。前回の復習になりますが,⁠こんにちは。」という内容を「はろー。」に書き換えてみましょう。

では,続いてHelloWorldスニペットの作成です。スニペットをLexiconに対応させるためには

  • getServiceメソッドによりイニシャライズ
  • ネームスペース(helloworld)とトピック(daily)をロード
  • 翻訳メッセージのためのキー(helloworld.hello)をロード

という簡単な手順が必要になります。

HelloWorldスニペットの内容

<?php
// Lexicon機能を使用するための準備
$modx->getService('lexicon','modLexicon');

// helloworldネームスペースのdailyトピックを参照
$modx->lexicon->load('helloworld:daily');

// helloworld.helloというキーに対応した翻訳情報をロード
$modx->lexicon('helloworld.hello');

// mynameパラメータをプレースホルダに格納
$modx->setPlaceholder('myname', $myname);

// チャンクをロード。チャンク名はスニペット側のパラメータで指定可能。
return $modx->getChunk($chkname);

次に,スニペットから呼び出されるhelloworldチャンクを定義します。

helloworldチャンクの内容

[[%helloworld.goodmorning? &namespace=`helloworld` &topic=`daily`]]
[[%helloworld.hello? &namespace=`helloworld` &topic=`daily`]]
[[%helloworld.goodnight? &namespace=`helloworld` &topic=`daily`]]
[[+myname]]

最後に,リソースに定義するスニペットの内容です。

リソース中でのスニペットの記述

[[!HelloWorld? &chkname=`helloworld` &myname=`John`]]

以上により,スニペットの表示は次のようになります。

図4 言語設定が日本語になっている場合

図4 言語設定が日本語になっている場合

図5 言語設定が英語になっている場合

図5 言語設定が英語になっている場合

少し駆け足でしたが,比較的簡単にスニペットを多言語化させることが理解できたかと思います。

最後に

いろいろな解説を後回しにすることで有名な本連載ですが,MODx Revolutionから使用可能になったLexicon機能については,今回でやっとすべてを解説することができました。

読者のみなさんが多言語対応のスニペットを作成される機会は少ないかもしれませんが,MODxや関連スニペットのドキュメントを見ていくと,後々必ず%から始まるLexicon用の書式を目にするはずです。その際に「なんだこれは!?」と戸惑わないよう,Lexiconの基本を押さえておきましょう。

著者プロフィール

中満英生(なかみつひでお)

大学時代に出会ったSolarisがきっかけでUNIXの世界へ。その後ホスティングプロバイダ,データセンターで実務経験を積む傍ら,雑誌記事の執筆や技術セミナーの講師を務める。サーバ設定の他,セキュリティに関する著作や技術者エッセイも執筆経験あり。