concrete5 Japan Advent Calendar 2014の23日目です。前日は、#concrete5 のギモン募集しますでした。本日は、「concrete5のブロックのdb.xmlから、雛形を自動生成する」スクリプトを作ったので紹介します。
このスクリプトは、オリジナルブロックを作るときに役立ちます。concrete5.7 のブロック作り方サンプルの作業の一部を自動化するツールです。
よく使うフォーマットの入力出力データがある場合などに、オリジナルブロックを作っておくと、ホームページの更新担当者がスムーズに処理できるので良いでしょう。弊社では、お客様の要望を元に、concrete5にオリジナルブロックを追加して提供しています。
更新担当者の負担を減らす→ウェブサイトが更新されやすくなる→顧客満足度向上
という流れを作っています。
※技術的にはちょっと難しい内容になります。「ブロックとは何か」みたいな内容は今回は省略します。
スクリプト動作の仕組み
動作の仕組みは、
- db.xmlを記述する
- db.xmlの記述を解析し、解析結果を、controller.php, edit.php, view.php の雛形に反映させる
になっています。
db.xmlを記述する
db.xmlに関しては、ご自分で作っていただく必要があります。db.xmlの構文は、古い記事ですが、Creating and Working with db.xml Filesに記載されています。
concrete5のブロックのdb.xmlから、雛形を自動生成するページでは、サンプルのdb.xmlを入力済みにしていますので、このサンプルを書き換えていく、という方法でもかまいません。
xml形式として適切でない場合には、雛形が作成されません。動作しないな、と思ったら、xmlのタグの整合性などを確認するようにおねがいします。
db.xmlの記述を解析し、解析結果を、controller.php, edit.php, view.php の雛形に反映させる
「xmlデータを解析して、変換する」処理を行っています。この処理にはxslt(Extensible Stylesheet Language Transformations)を用いています。変換ルールはxsl形式で記述します。(ファイルはstatic/xsl/controller.xsl等です。)
xsltで処理する元データはxml形式のみですが、変換ルール適用した出力データは、xmlだけでなく、様々な形式が可能です。もちろん、xslを適切に記述すれば、の話ですが。アマゾンなどのアフィリエイトで、API検索するとxmlが返ってくるような場合に、xsltを使うとHTML変換がしやすかったので、個人的には良く使っている手法です。
PHPでxslt処理する方法もありますが、今回はバックエンドの処理無しで、JavaScriptだけで処理する方法を行っています。jQueryでxslt変換するライブラリを使用しています。ダウンロードはhttps://github.com/shimohi/SimpleJSXsltから可能です。
エスケープ処理
xslがデフォルトでエスケープ処理を行うので、この処理を信頼しています。xslの処理にバグが無ければクロスサイトスクリプティングが発生しないのですが、万全を期するのであれば、ローカルにHTMLとJavaScriptを置いて、インターネット環境と切り離してご利用ください。
明日は、しかたこうきさんの、concrete5は、日本の中小企業にとって◯◯◯◯級のウェポンになるかもしれない、という話です。お楽しみに。