たくさんのデータを扱う携帯サイトを作ると、
ユーザーの視点で見るとデータを探すのって、
結構めんどくさいんですよね。
そんな、携帯サイトのユーザビリティを向上させるために、
色んな検索方法を組み込んでみるのも一つの手です。
その中でも、一番オーソドックスで簡単に導入できる、
50音検索の作り方をご紹介します。
ZendFrameworkを使用していますが、
パラメータの取得のところぐらいなので、
ご利用の環境に置き換えてご覧になって下さい。
では、説明していきます。
作るに当たって重要なのは、
DBにデータを登録してもらう時に、
「かな」で入力をしてもらう項目を設置してください。
かな検索をかけるので必須です。
次に、HTMLに「あ|か|さ|た|な|は|ま|や|ら|わ」をそれぞれリンクで作成します。
[href]につっこむ遷移先のURLは現在表示されているURLです。
ただし、そのURLの最後にパラメータを設定します。
ex.[現在表示されているURL]/search/a/
「あ」行であれば”/search/a/”、「か」行であれば”/search/ka/”をくっつけます。
同じページに飛ばすので遷移後の処理は、
同じアクション内に書きます。
まずこの送られてきたパラメータを取得します。
//パラメータの取得
$search = $this->_getParam('search');
//パラメータを変数にセット
switch($search){
case 'a':
$data['a'] = $search;
break;
case 'ka':
$data['ka'] = $search;
break;
case 'sa':
$data['sa'] = $search;
break;
case 'ta':
$data['ta'] = $search;
break;
case 'na':
$data['na'] = $search;
break;
case 'ha':
$data['ha'] = $search;
break;
case 'ma':
$data['ma'] = $search;
break;
case 'ya':
$data['ya'] = $search;
break;
case 'ra':
$data['ra'] = $search;
break;
case 'wa':
$data['wa'] = $search;
break;
}
ただこれだけのことです。
ここまでできればあとはDBに処理を引き継ぎます。
本来ZendFrameworkではDBでの処理はモデルで行うべきなのですが、
今回はシンプルに分かりやすくするためにこのまま書きます。
DBの中には、テーブル名:search、カラム:name、name_kanaです。
nameは本来表示させたいもの、name_kanaは検索用。
データはこんなものを入れてみました。
INSERT INTO search(name,name_kana) VALUES ('太郎','たろう');
INSERT INTO search(name,name_kana) VALUES ('花子','はなこ');
INSERT INTO search(name,name_kana) VALUES ('勇次','ゆうじ');
INSERT INTO search(name,name_kana) VALUES ('ROBIN','ろびん');
INSERT INTO search(name,name_kana) VALUES ('ちん丸','ちんまる');
DB接続等の処理は割愛し、SQLを書きます。
$sql = SELECT * FROM search;
この基本SQLに、
if($data['a']){
//あ行検索
$sql .= "WHERE name_kana BETWEEN 'ぁ' AND 'か'";
}elseif($data['ka']){
//か行検索
$sql .= "WHERE name_kana BETWEEN 'か' AND 'さ'";
}elseif($data['sa']){
//さ行検索
$sql .= "WHERE name_kana BETWEEN 'さ' AND 'た'";
}elseif($data['ta']){
//た行検索
$sql .= "WHERE name_kana BETWEEN 'た' AND 'な'";
}elseif($data['na']){
//な行検索
$sql .= "WHERE name_kana BETWEEN 'な' AND 'は'";
}elseif($data['ha']){
//は行検索
$sql .= "WHERE name_kana BETWEEN 'は' AND 'ま'";
}elseif($data['ma']){
//ま行検索
$sql .= "WHERE name_kana BETWEEN 'ま' AND 'ゃ'";
}elseif($data['ya']){
//や行検索
$sql .= "WHERE s_name_kana BETWEEN 'ゃ' AND 'ら'";
}elseif($data['ra']){
//ら行検索
$sql .= "WHERE name_kana BETWEEN 'ら' AND 'ゎ'";
}elseif($data['wa']){
//わ行検索
$sql .= "WHERE name_kana BETWEEN 'ゎ' AND 'ァ'";
}
これを追加します。
今回の味噌となる部分で、between ~ AND ~ を使って表示させています。
betweenは文字列でも順番に検索できるようで、
バイナリデータに置き換えて、表示してくれているみたいです。
小さい「ぁ」から始まるのが重要なところです。
betweenでの検索は未満検索なので、
"WHERE name_kana BETWEEN 'ゎ' AND 'ん'";
と入力すると、「ん」はとってこれません。「ゑ」までです。
ですので、「ん」の表示だけがちょっとややこしくて、
「ん」の次にくるカタカナの小さい「ァ」を指定してやってください。それで表示できます。
ex.「た」行が検索される SQLの中身は、SELECT * FROM search WHERE name_kana BETWEEN 'た' AND 'な'; name | name_kana --------+----------- 太郎 | たろう ちん丸 | ちんまる (2 rows)
こんな感じでデータが出てきます。
ちゃんと「た」行検索されています。
簡単ですね。
このように簡単に導入できるものですので、
ユーザビリティ向上のために是非取り入れてみてください。







