XoopsLiveValidator

※ 17:22 に(3-1) を追記しました。
※ 10/31 11:15 コードの書き方をちょっと変えました。

最近のフォームは javascript でチェックすることが多く、確かに個人的に使っていてもその方が快適。送信ボタンを押して、読み込み中表示がぐるぐる回って、その結果「どっか足りません」とか言われると「あーもう!」と、ちらっと思ってしまいます。


なので、自分の作るモジュールにも javascript を使ってその場でチェック、とかやりたいのですが、フォームチェックのライブラリは幾つかあって目移りする上、時間がたつと前はどれを使っていたかどうやって使っていたか、を忘れてしまったりします(^ ^;。また、チェックのルールを書くのが面倒!だったりします。

そんな情けない事情もあって、大々的に導入していなかったのですが、LiveValidation というライブラリがなかなかよさそうだなあ、と目をつけました。

LiveValidation

さらに、このライブラリを php から制御できる php クラスも作られていて、これだっ!と思いました。

LiveValidationPHP


一方で、XOOPS(Cubson)でも ActionForm に FieldProperties を設定して、サーバ側でフィールド値の妥当性をチェックする仕組みがすでにあります。

そこで、サーバ側、クライアント側両方でチェックルールを記述するのは面倒なので、XOOPS の FieldProperties のチェックルールを元に javascript のチェックルールを生成するようなクラスを作ってみました。

XoopsLiveValidator ダウンロード

(仮置き場)


注1:ActionForm に FieldProperties を使ってチェックをしていないと、使ってもあまり良いことはありません(普通に LiveValidationPHP を使えばいい)。

注2:まだ作りかけの試作品なので、「よし、わかった。後は自分でやる」という人か、「とりあえずどんな物か試してやろう」という人以外にはお勧めしません。

使い方の例(Cubson のモジュールで説明)

(1) 以下の4ファイルを適当なフォルダに置きます

(modules/{モジュール}/include/ など)。

  • livevalidation.css
  • livevalidation.js
  • livevalidationphp.class.php
  • XoopsLiveValidator.class.php

上の3つのファイルは LiveValidationPHP のファイルそのままです。

(2) actions/{table}EditAction.class.php を以下の様に修正します。

(2-1) 必要なファイルを require

require_once "./include/livevalidationphp.class.php";
require_once "./include/XoopsLiveValidator.class.php";

(2-2) executeViewInput メソッドに以下を追加*1

$xoopsLiveValidator = new XoopsLiveValidator();
$xoopsLiveValidator->setupValidationRule($this->mActionForm);

$ValidatePHP = new LiveValidationMassValidatePHP("BmEdit", $_POST);
$ValidatePHP->addRules($xoopsLiveValidator->mRules);
 
$liveValidator = $ValidatePHP->generateAll();

$render->setAttribute('liveValidator', $liveValidator);

$render->setAttribute('xoops_module_header',
'<link href="include/livevalidation.css" rel="stylesheet" type="text/css" media="screen">
<script language="javascript" type="text/javascript" src="include/livevalidation.js">
</script>');
(3) テンプレートファイルの修正

(3-1) form の id を設定

以下の様に、id を追加する。id 名は (2-2) の LiveValidationMassValidatePHP 生成時のオプションで指定した名前

<form action="index.php?action=BmEdit" id="BmEdit" method="post">

(3-2) 生成した javascript を挿入

一番最後にでも、以下を追加

<script>
<{$liveValidator}>
</script>


以上です。

オプション

もし javascript ではチェックからはずしたいフィールドがあれば(hidden など)、

$xoopsLiveValidator->removeRule('uid');

の様に、removeRule メソッドでチェックから外したいフィールドを指定します(例では uid)。

反対に、追加したいチェックがあれば、addRule メソッドで追加できますが、詳細はまた今度。LiveValidation の方が多様なチェックを行えますので、追加したい要望はあるんじゃないかと。

*1:テーブル名"Bm" の BmEditAction.class.php の例で書いてありますので、"Bm" の部分を自モジュール用に変えてください