ページにアンケートボックスを追加するPHPライブラリの日本語対応、およびインストールのメモ。仕様書がきちんと書かれていないので、仕様メモも。
ダウンロード
http://proxy2.de/の Free Scripts より Advanced Poll の最新版をダウンロード。
インストール
- ダウンロードしたzipファイルを解凍すると、dbとtextfileというディレクトリが作成される。dbの下にはMySQLまたはPostgreSQLを使用するバージョンが、textfileの下にはDBにテキストファイルを使用するバージョンが置かれている。
今回はテキスト版を使用。textfile以下のファイルを、ディレクトリ構成そのまますべてサーバ上に転送する。
DB版はインストールしたことがないので、詳細不明。基本的には、readme.txtファイルに書かれた手順どおりで失敗しないはず。 -
ファイルパーミッションを次のように変更。
- polldata – 777
- polldata配下の全ファイル – 666
- templates – 777
- templates配下の全ディレクトリ – 777
- templates配下の全ファイル – 666
- graphic – 777
- graphic配下の全ファイル – 777
- include – 755
- include/config.inc.php – 666
- Web経由で、インストールしたディレクトリの下にあるadminディレクトリを開き(例: http://www.yourdomain.com/poll/admin/)ユーザ名に「admin」、パスワードに「poll」を指定してログインし、ユーザ名とパスワードを変更。
- General Settings の Language に japanese_euc を指定して Submit Settings をクリックすると、管理画面が日本語化される。
- ヘルプのページに、アンケートをWebページに組み込むためのPHPコードが書かれているので、それをコピーして利用する。
- その他、必要に応じて一般設定のページでタイトルやボタンの日本語化をしたり、テンプレートで表示時のHTMLタグを編集したりする。
日本語対応
テキスト版でコメント機能を使用すると、データベース格納時のセパレータに0xA1を使用しているため、コメントが日本語のような2バイトコードのときにテキストを破壊してしまう。これを防ぐため、セパレータに “<>” を使用するよう変更。
DB版を使用する場合には、たぶんそのままで日本語が使えると思う(でも、未確認)。
-
admin/admin_comment.phpの80行目を次のように変更。
if (ereg("^[0-9]+<>.+<>.*<>.+<>.*<>.+",$comment_array[$i])) {
-
include/class_pollcomment.phpの70行目を次のように変更。
$strg = str_replace("<>","",$strg);
-
include/class_pollcomment.phpの104行目を次のように変更。
list($time,$host,$browser,$name,$email,$message) = spllit("<>",$this->comment_array[$poll_id][$i]);
-
include/class_pollcomment.phpの103行目を次のように変更。
if ereg("^[0-9]+<>.+<>.*<>.+<>.*<>.+",$this->comment_array[$poll_id][$i])) {
- include/class_pollcomment.phpの316行目を次のように変更。
$entry = "$this_time"."<>"."$host"."<>"."$agent"."<>"."$name"."<>"."$email"."<>"."$message¥n";
ポップアップの結果ウィンドウにコメント表示
結果をポップアップウィンドウで表示するテンプレートがあるが、ポップアップウィンドウ内にコメントを表示する機能がない。コメント表示のためには、プログラムに手を入れる必要あり。
-
booth.phpの30行目に次の行を追加。
require $include_path."/include/class_pollcomment.php";
-
booth.phpの31行目にある “new poll();” の行を次のように変更。
$php_poll = new pollcomment();
-
popup.phpの22行目に次の行を追加。
$php_poll->comment_process($poll_ident); $php_poll->set_template("poll_comment"); $php_poll->set_comments_per_page(5); $php_poll->set_date_format("Y/m/d(D) H:i"); $php_poll->data_order_by("time","desc"); echo $php_poll->view_poll_comments($poll_ident); echo $php_poll->get_comment_pages($poll_ident);
バー種類の追加
アンケート結果をバー表示することができるが、標準のバーだとちょっと色がきつくて個人的には好みでない。このため、MA-FAからiMac風のバーを拾って組み込んで利用。
-
プログラムに手を入れずに画像のみ入れ替えるには、imageディレクトリの下の次のファイルを好みのものに差し替える。
- aqua.gif
- blue.gif
- brown.gif
- darkgreen.gif
- gold.gif
- orange.gif
- pink.gif
- purple.gif
- red.gif
- yellow.gif
-
画像を追加する場合には、プログラムを改造する必要がある。今回は次の7色を追加。このファイルをimageディレクトリの下にコピー(MA-FAからダウンロードしたものを、自分でファイル名変更)。
- mac_aqua.gif
- mac_blue.gif
- mac_gold.gif
- mac_gray.gif
- mac_green.gif
- mac_purple.gif
- mac_red.gif
次のファイルを編集。
-
language/japanese_euc.phpの176行目に次の行を追加。
$color_array[12] = "mac_gray"; $color_array[13] = "mac_gold"; $color_array[14] = "mac_red"; $color_array[15] = "mac_purple"; $color_array[16] = "mac_blue"; $color_array[17] = "mac_aqua"; $color_array[18] = "mac_green";
-
admin/index.phpの118行目に次の行を追加。
,"mac_gray", "mac_gold", "mac_red", "mac_purple", "mac_blue", "mac_aqua", "mac_green
-
admin/admin_edit.phpの17行目に次の行を追加。
,"mac_gray", "mac_gold", "mac_red", "mac_purple", "mac_blue", "mac_aqua", "mac_green
コメント入力まわりのメッセージ日本語化
コメント入力フォーム自体の日本語化は、管理者パネルのテンプレート編集でCommentを編集して行う。
入力後のメッセージは、Advanced Pollをインストールしたディレクトリにあるcomment.php内のprint_message()関数の引数を書き換えて変更。
pollクラス仕様
内部的にのみ使用してそうな関数は省略して列挙。
- set_template_set([$template_set])
- 使用するテンプレート名を設定。引数を省略した場合には、defaultが設定される。
- set_display_order([$display_order])
-
結果表示順を指定。
- “asc” : 昇順
- “desc” : 降順
- 省略 : 項目名設定順
- set_display_result($result)
-
結果を投票数で表示するか、パーセント表示するかを設定。
- “votes” : 投票数
- “percent” : パーセント
- set_max_bar_length($max_bar_length)
- 結果バーの最大幅
- set_max_bar_height($max_bar_height)
- 結果バーの最大の高さ
- get_poll_stat($poll_id)
-
$poll_idで指定したアンケートの状態を連想配列で返す。配列のキーは下記。
- question : アンケートの質問内容
- timestamp : アンケート作成日時
- exp_time : 期限切れとなる日時
- expire : 期限付きかどうか (0: 無期限、1: 期限あり)
- status : 現在状態 (0: 期限切れ、1: 有効)
- comments : コメント許可しているか (0: 禁止、1: 許可)
- get_poll_list()
- 現在定義されているアンケートのIDを配列で返す。
- get_poll_question($poll_id)
- $poll_idで指定されたアンケートの質問内容をテキストで返す。
- view_poll_result($poll_id [, $vote_stat])
- $poll_idで指定されたアンケートの結果表示のためのテキストを返す。$vote_statは、投票ボタンのHTMLを$VOTEに設定するかどうかを0または1で指定する。1のとき設定する。
- get_random_poll_id()
- 現在有効なアンケートの中から、ランダムにIDを選んで返す。
- get_latest_poll_id()
- 最新(もっとも最近定義した)アンケートのIDを返す。
- is_valid_poll_id($poll_id)
- $poll_idが有効なアンケートIDかどうかをチェック。アンケートが存在する場合にtrueが返される。
- has_voted($poll_id)
- クッキーに投票済みと設定されているかどうかをチェック。
- is_active_poll_id($poll_id)
- $poll_idが有効なアンケートIDかどうかをチェック。アンケートが存在し、かつ期限が切れていない(期限なし、または期限内)場合にtrueが返される。
- poll_process($poll_id)
- $poll_idで指定したアンケートの内容を表示するためのテキストを返す。アンケートが期限切れかどうかをチェックし、期限切れなら結果を、期限なしまたは期限内ならアンケート内容。$poll_idにはIDの他に “newest” または “random” を指定可。”newest” が指定された場合には最新アンケート、”random” が指定された場合には利用可能なアンケートの中からランダムで表示。
pollcommentクラス仕様
pollクラスを継承。pollクラスの関数に加え、下記の関数が使用可能。
- set_comments_per_page($records)
- 1ページに表示するコメント数を$recordsで指定された数に設定。
- set_form_error($error_msg_arr)
-
エラーメッセージを連想配列$error_msg_arrで指定されたものに設定する。指定可能な配列キーは下記。
- “name” : 名前欄が空欄のときのエラーメッセージ
- “email” : e-mail欄が空欄のときのエラーメッセージ
- “message” : コメント欄が空欄のときのエラーメッセージ
- data_order_by($by, $order)
- コメント表示の並べ替え方を指定。$byには並べ替えのキーを “time”、”name”、”email”、”host”、”browser”、”message” のいずれかで指定。$orderには並べ替え順を “asc” (昇順)、”desc” (降順)のいずれかで指定。
- get_total_comments($poll_id)
- コメント総数を数字で返す。
- get_comment_pages($poll_id [, $max_pages [, $separate]])
- 1ページにコメントを表示しきれなかった場合の、ページ移動用のナビゲーション表示のためのテキストを返す。$max_pagesで指定したページ数を上限とし、それ以上のページがあれば「more..」と表示。$max_pagesを省略した場合は、10ページが上限。$separateで別ページへのリンク間のセパレータを指定可能。省略時は「|」。
- set_date_format($date_strg)
- コメント日時表示の形式をテキストで指定。ここで指定したテキストをdate()関数に渡して整形するため、指定形式はdate()関数に準ずる。
- view_poll_comments($poll_id)
- $poll_idで指定されたアンケートのコメント表示のためのテキストを返す。set_comments_per_page()で設定されたコメント数のみ表示される。
- set_template($title)
- $titleで指定したテンプレートに設定する。
plistクラス仕様
pollcommentクラスを継承。pollクラス、pollcommentクラスの関数に加え、下記の関数が使用可能。
- view_poll_list()
- アンケート一覧を表示するためのテキストを返す。
- set_polls_per_page($records)
- 1ページに表示するアンケート数を$recordsで指定した数に設定。
- get_total_polls()
- アンケート総数を数字で返す。
- get_list_pages([$max_pages [, $separate]])
- 1ページにアンケートを表示しきれなかった場合の、ページ移動用のナビゲーション表示のためのテキストを返す。$max_pagesで指定したページ数を上限とし、それ以上のページがあれば「more..」と表示。$max_pagesを省略した場合は、10ページが上限。$separateで別ページへのリンク間のセパレータを指定可能。省略時は「|」。