① dtb_faq
———————————————————–
CREATE TABLE dtb_faq (
faq_id int NOT NULL,
faq_category smallint NOT NULL,
faq_question text NOT NULL,
faq_answer text NOT NULL,
rank int NOT NULL DEFAULT 0,
creator_id int NOT NULL,
create_date datetime NOT NULL,
update_date datetime NOT NULL,
del_flg smallint NOT NULL DEFAULT 0,
PRIMARY KEY (faq_id)
);
———————————————————–
② mtb_faq
———————————————————–
CREATE TABLE mtb_faq (
id smallint,
name text,
rank smallint NOT NULL DEFAULT 0,
PRIMARY KEY (id)
);
———————————————————–
(2)PostgreSQL
① dtb_faq
———————————————————–
CREATE TABLE dtb_faq (
faq_id int NOT NULL,
faq_category smallint NOT NULL,
faq_question text NOT NULL,
faq_answer text NOT NULL,
rank int NOT NULL DEFAULT 0,
creator_id int NOT NULL,
create_date timestamp NOT NULL,
update_date timestamp NOT NULL,
del_flg smallint NOT NULL DEFAULT 0,
PRIMARY KEY (faq_id)
);
———————————————————–
② mtb_faq
———————————————————–
CREATE TABLE mtb_faq (
id smallint,
name text,
rank smallint NOT NULL DEFAULT 0,
PRIMARY KEY (id)
);
———————————————————–
/* 取得文字列の変換 */
function lfConvertParam($array) {
/*
* 文字列の変換
* r : 「全角」英字を「半角(ハンカク)」に変換
* R : 「半角(ハンカク)」英字を「全角」に変換
* n : 「全角」数字を「半角(ハンカク)」に変換
* N : 「半角(ハンカク)」数字を「全角」に変換
* a : 「全角」英数字を「半角(ハンカク)」に変換
* A : 「半角(ハンカク)」英数字を「全角」に変換
* s : 「全角」スペースを「半角(ハンカク)」に変換
* S : 「半角(ハンカク)」スペースを「全角」に変換
* k : 「全角片仮名」を「半角(ハンカク)片仮名」に変換
* K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換
* h : 「全角ひら仮名」を「半角(ハンカク)片仮名」に変換
* H : 「半角(ハンカク)片仮名」を「全角ひら仮名」に変換
* c : 「全角かた仮名」を「全角ひら仮名」に変換
* C : 「全角ひら仮名」を「全角かた仮名」に変換
* V : 濁点付きの文字を一文字に変換。”K”,”H”と共に使用します。
*/
// 文字変換
$arrConvList[‘faq_question’] = “KVa”;
$arrConvList[‘faq_answer’] = “KVa”;
1 データベースに下記の2つのテーブルを追加する
(1)MySQL
① dtb_faq
———————————————————–
CREATE TABLE dtb_faq (
faq_id int NOT NULL,
faq_category smallint NOT NULL,
faq_question text NOT NULL,
faq_answer text NOT NULL,
rank int NOT NULL DEFAULT 0,
creator_id int NOT NULL,
create_date datetime NOT NULL,
update_date datetime NOT NULL,
del_flg smallint NOT NULL DEFAULT 0,
PRIMARY KEY (faq_id)
);
———————————————————–
② mtb_faq
———————————————————–
CREATE TABLE mtb_faq (
id smallint,
name text,
rank smallint NOT NULL DEFAULT 0,
PRIMARY KEY (id)
);
———————————————————–
(2)PostgreSQL
① dtb_faq
———————————————————–
CREATE TABLE dtb_faq (
faq_id int NOT NULL,
faq_category smallint NOT NULL,
faq_question text NOT NULL,
faq_answer text NOT NULL,
rank int NOT NULL DEFAULT 0,
creator_id int NOT NULL,
create_date timestamp NOT NULL,
update_date timestamp NOT NULL,
del_flg smallint NOT NULL DEFAULT 0,
PRIMARY KEY (faq_id)
);
———————————————————–
② mtb_faq
———————————————————–
CREATE TABLE mtb_faq (
id smallint,
name text,
rank smallint NOT NULL DEFAULT 0,
PRIMARY KEY (id)
);
———————————————————–
2 システム設定>マスターデータ管理で、mtb_faqを選択して、カテゴリ名を登録する。
★カテゴリ名の変更や追加はここで行う。(以下は例)
———————————————————–
ID:1
値:ご注文・お支払いについて
ID:2
値:配送・送料について
ID:3
値:商品の返品・交換について
ID:4
値:会員登録について
ID:5
値:ショッピング全般について
———————————————————–
3 管理画面を作成する。下記ファイルを新規作成。
(1) ■html/admin/basis/faq.php
[php]
init();
$objPage->process();
?>
[/php]
(2) ■data/class_extends/page_extends/admin/basis/LC_Page_Admin_Basis_Faq_Ex.php
[php]
[/php]
(3) ■data/class/page/admin/basis/LC_Page_Admin_Basis_Faq.php
[php]
tpl_mainpage = ‘basis/faq.tpl’;
$this->tpl_subnavi = ‘basis/subnavi.tpl’;
$this->tpl_subno = ‘faq’;
$this->tpl_subtitle = ‘FAQ登録’;
$this->tpl_mainno = ‘basis’;
$masterData = new SC_DB_MasterData_Ex();
$this->arrCategory = $masterData->getMasterData(“mtb_faq”, array(“id”, “name”, “rank”));
}
/**
* Page のプロセス.
*
* @return void
*/
function process() {
$this->action();
$this->sendResponse();
}
/**
* Page のアクション.
*
* @return void
*/
function action() {
$objQuery =& SC_Query_Ex::getSingletonInstance();
$objDb = new SC_Helper_DB_Ex();
if(!isset($_POST[‘faq_category’])) {
$arrKeys = array_keys($this->arrCategory);
$this->faq_category = $arrKeys[0];
} else {
$this->faq_category = $_POST[‘faq_category’];
}
// 要求判定
switch($this->getMode()) {
// 編集処理
case ‘edit’:
// POST値の引き継ぎ
$this->arrForm = $_POST;
// 入力文字の変換
$this->arrForm = $this->lfConvertParam($this->arrForm);
// エラーチェック
$this->arrErr = $this->lfErrorCheck($this->arrForm);
if(count($this->arrErr) <= 0) { if($_POST['faq_id'] == "") { $this->lfInsertClass($this->arrForm); // 新規作成
} else {
$this->lfUpdateClass($this->arrForm); // 既存編集
}
// FAQ質問・回答は初期化
unset($this->arrForm[‘faq_question’]);
unset($this->arrForm[‘faq_answer’]);
} else {
// POSTデータを引き継ぐ
$this->tpl_faq_id = $_POST[‘faq_id’];
}
break;
// 削除
case ‘delete’:
$objDb->sfDeleteRankRecord(“dtb_faq”, “faq_id”, $_POST[‘faq_id’], “faq_category = ” . $this->faq_category, true);
break;
// 編集前処理
case ‘pre_edit’:
// 編集項目をDBより取得する。
$arrRet = $objQuery->select(“faq_category, faq_question, faq_answer”, “dtb_faq”, “faq_id = ?”, array($_POST[‘faq_id’]));
// 入力項目にカテゴリ名を入力する。
$this->arrForm[‘faq_category’] = $arrRet[0][‘faq_category’];
$this->arrForm[‘faq_question’] = $arrRet[0][‘faq_question’];
$this->arrForm[‘faq_answer’] = $arrRet[0][‘faq_answer’];
// POSTデータを引き継ぐ
$this->tpl_faq_id = $_POST[‘faq_id’];
break;
case ‘down’:
$objDb->sfRankDown(“dtb_faq”, “faq_id”, $_POST[‘faq_id’], “faq_category = ” . $this->faq_category);
break;
case ‘up’:
$objDb->sfRankUp(“dtb_faq”, “faq_id”, $_POST[‘faq_id’], “faq_category = ” . $this->faq_category);
break;
default:
break;
}
// FAQ情報の取得
$objQuery->setorder(“rank DESC”);
$this->arrFaq = $objQuery->select(“faq_id, faq_category, faq_question, faq_answer”, “dtb_faq”, “faq_category = ? AND del_flg = 0”, array($this->faq_category));
}
/**
* デストラクタ.
*
* @return void
*/
function destroy() {
parent::destroy();
}
/* DBへの挿入 */
function lfInsertClass($arrData) {
$objQuery =& SC_Query_Ex::getSingletonInstance();
// INSERTする値を作成する。
$sqlval[‘faq_id’] = $objQuery->nextVal(‘dtb_faq_faq_id’);
$sqlval[‘faq_category’] = $arrData[‘faq_category’];
$sqlval[‘faq_question’] = $arrData[‘faq_question’];
$sqlval[‘faq_answer’] = $arrData[‘faq_answer’];
$sqlval[‘rank’] = $objQuery->max(“rank”, “dtb_faq”, “faq_category = ” . $this->faq_category) + 1;
$sqlval[‘creator_id’] = $_SESSION[‘member_id’];
$sqlval[‘create_date’] = “CURRENT_TIMESTAMP”;
$sqlval[‘update_date’] = “CURRENT_TIMESTAMP”;
// INSERTの実行
$ret = $objQuery->insert(“dtb_faq”, $sqlval);
return $ret;
}
/* DBへの更新 */
function lfUpdateClass($arrData) {
$objQuery =& SC_Query_Ex::getSingletonInstance();
// UPDATEする値を作成する。
$sqlval[‘faq_question’] = $arrData[‘faq_question’];
$sqlval[‘faq_answer’] = $arrData[‘faq_answer’];
$sqlval[‘update_date’] = “CURRENT_TIMESTAMP”;
$where = “faq_id = ?”;
// UPDATEの実行
$ret = $objQuery->update(“dtb_faq”, $sqlval, $where, array($_POST[‘faq_id’]));
return $ret;
}
/* 取得文字列の変換 */
function lfConvertParam($array) {
/*
* 文字列の変換
* r : 「全角」英字を「半角(ハンカク)」に変換
* R : 「半角(ハンカク)」英字を「全角」に変換
* n : 「全角」数字を「半角(ハンカク)」に変換
* N : 「半角(ハンカク)」数字を「全角」に変換
* a : 「全角」英数字を「半角(ハンカク)」に変換
* A : 「半角(ハンカク)」英数字を「全角」に変換
* s : 「全角」スペースを「半角(ハンカク)」に変換
* S : 「半角(ハンカク)」スペースを「全角」に変換
* k : 「全角片仮名」を「半角(ハンカク)片仮名」に変換
* K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換
* h : 「全角ひら仮名」を「半角(ハンカク)片仮名」に変換
* H : 「半角(ハンカク)片仮名」を「全角ひら仮名」に変換
* c : 「全角かた仮名」を「全角ひら仮名」に変換
* C : 「全角ひら仮名」を「全角かた仮名」に変換
* V : 濁点付きの文字を一文字に変換。”K”,”H”と共に使用します。
*/
// 文字変換
$arrConvList[‘faq_question’] = “KVa”;
$arrConvList[‘faq_answer’] = “KVa”;
foreach($arrConvList as $key => $val) {
// POSTされてきた値のみ変換する。
if(isset($array[$key])) {
$array[$key] = mb_convert_kana($array[$key] ,$val);
}
}
return $array;
}
/* 入力エラーチェック */
function lfErrorCheck($array) {
$objErr = new SC_CheckError_Ex($array);
$objErr->doFunc(array(“FAQカテゴリ”, “faq_category”), array(“EXIST_CHECK”));
$objErr->doFunc(array(“FAQ質問”, “faq_question”, MLTEXT_LEN), array(“EXIST_CHECK”, “SPTAB_CHECK”, “MAX_LENGTH_CHECK”));
$objErr->doFunc(array(“FAQ回答”, “faq_answer”, MLTEXT_LEN), array(“EXIST_CHECK”, “SPTAB_CHECK”, “MAX_LENGTH_CHECK”));
// 全入力項目に問題がない場合のみ、質問の重複チェック
if(!isset($objErr->arrErr[‘faq_category’]) && !isset($objErr->arrErr[‘faq_question’]) && !isset($objErr->arrErr[‘faq_answer’])) {
$objQuery =& SC_Query_Ex::getSingletonInstance();
// カテゴリと質問が同じレコードを検索
$arrRet = $objQuery->select(“faq_id”, “dtb_faq”, “del_flg = 0 AND faq_category = ? AND faq_question = ?”, array($array[‘faq_category’], $array[‘faq_question’]));
// 取得レコードがあった場合、IDを比較して編集中のレコードかチェック
if(count($arrRet) > 0 && $arrRet[0][‘faq_id’] != $array[‘faq_id’]) {
// 同じ質問が存在する場合
$objErr->arrErr[‘faq_question’] = “※ 既に同じ質問の登録が存在します。
“;
}
}
return $objErr->arrErr;
}
}
?>
[/php]
(4) ■data/Smarty/templates/admin/basis/faq.tpl
[php]