[php]
CREATE TABLE dtb_ticker (
ticker_id int NOT NULL,
disp smallint NOT NULL DEFAULT 1,
message text,
url text,
rank int NOT NULL DEFAULT 0,
creator_id int NOT NULL,
create_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_date timestamp NOT NULL,
del_flg smallint NOT NULL DEFAULT 0,
PRIMARY KEY (ticker_id)
);
[/php]
1 管理画面でメッセージを登録できるようにする。
(1)データベースへテーブル(dtb_ticker)の追加
【MySQL・PostgreSQL】
[php]
CREATE TABLE dtb_ticker (
ticker_id int NOT NULL,
disp smallint NOT NULL DEFAULT 1,
message text,
url text,
rank int NOT NULL DEFAULT 0,
creator_id int NOT NULL,
create_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_date timestamp NOT NULL,
del_flg smallint NOT NULL DEFAULT 0,
PRIMARY KEY (ticker_id)
);
[/php]
(2)管理画面用ファイルの作成
① ■html/admin/contents/ticker.php
[php]
init();
$objPage->process();
?>
[/php]
② ■data/class_extends/page_extends/admin/contents/LC_Page_Admin_Contents_Ticker_Ex.php
[php]
[/php]
③ ■data/class/pages/admin/contents/LC_Page_Admin_Contents_Ticker.php
[php]
tpl_mainpage = ‘contents/ticker.tpl’;
$this->tpl_subno = ‘ticker’;
$masterData = new SC_DB_MasterData_Ex();
$this->arrDISP = $masterData->getMasterData(‘mtb_disp’);
$this->tpl_maintitle = ‘コンテンツ管理’;
$this->tpl_subtitle = ‘流れるメッセージ編集’;
$this->tpl_mainno = ‘contents’;
}
/**
* Page のプロセス.
*
* @return void
*/
function process() {
$this->action();
$this->sendResponse();
}
/**
* Page のアクション.
*
* @return void
*/
function action() {
$objDb = new SC_Helper_DB_Ex();
$mode = $this->getMode();
if (!empty($_POST)) {
$objFormParam = new SC_FormParam_Ex();
$this->lfInitParam($mode, $objFormParam);
$objFormParam->setParam($_POST);
$objFormParam->convParam();
$ticker_id = $objFormParam->getValue(‘ticker_id’);
$this->arrErr = $this->lfCheckError($mode, $objFormParam);
if (!empty($this->arrErr[‘ticker_id’])) {
SC_Utils_Ex::sfDispException();
return;
}
$post = $objFormParam->getHashArray();
}
// 要求判定
switch($mode) {
// 編集処理
case ‘edit’:
// POST値の引き継ぎ
$this->arrForm = $_POST;
if(count($this->arrErr) <= 0) { if($post['ticker_id'] == '') { $this->lfInsertClass($this->arrForm, $_SESSION[‘member_id’]); // 新規作成
} else {
$this->lfUpdateClass($this->arrForm, $post[‘ticker_id’]); // 既存編集
}
// 再表示
$this->objDisplay->reload();
} else {
// POSTデータを引き継ぐ
$this->tpl_ticker_id = $post[‘ticker_id’];
}
break;
// 削除
case ‘delete’:
$objDb->sfDeleteRankRecord(‘dtb_ticker’, ‘ticker_id’, $post[‘ticker_id’], ”, true);
// 再表示
$this->objDisplay->reload();
break;
// 編集前処理
case ‘pre_edit’:
// 編集項目を取得する。
$arrTickerData = $this->lfGetTickerDataByTickerID($post[‘ticker_id’]);
// 入力項目にカテゴリ名を入力する。
$this->arrForm[‘disp’] = $arrTickerData[0][‘disp’];
$this->arrForm[‘area’] = $arrTickerData[0][‘area’];
$this->arrForm[‘message’] = $arrTickerData[0][‘message’];
$this->arrForm[‘url’] = $arrTickerData[0][‘url’];
// POSTデータを引き継ぐ
$this->tpl_ticker_id = $post[‘ticker_id’];
break;
case ‘down’:
$objDb->sfRankDown(‘dtb_ticker’, ‘ticker_id’, $post[‘ticker_id’]);
// 再表示
$this->objDisplay->reload();
break;
case ‘up’:
$objDb->sfRankUp(‘dtb_ticker’, ‘ticker_id’, $post[‘ticker_id’]);
// 再表示
$this->objDisplay->reload();
break;
default:
break;
}
$this->arrTicker = $this->lfGetTickerList();
// POSTデータを引き継ぐ
$this->tpl_ticker_id = $ticker_id;
}
/**
* デストラクタ.
*
* @return void
*/
function destroy() {
parent::destroy();
}
/* DBへの挿入 */
function lfInsertClass($arrData, $member_id) {
$objQuery =& SC_Query_Ex::getSingletonInstance();
// INSERTする値を作成する。
$sqlval[‘disp’] = $arrData[‘disp’];
$sqlval[‘message’] = $arrData[‘message’];
$sqlval[‘url’] = $arrData[‘url’];
$sqlval[‘creator_id’] = $member_id;
$sqlval[‘rank’] = $objQuery->max(‘rank’, ‘dtb_ticker’) + 1;
$sqlval[‘update_date’] = ‘CURRENT_TIMESTAMP’;
$sqlval[‘create_date’] = ‘CURRENT_TIMESTAMP’;
// INSERTの実行
$sqlval[‘ticker_id’] = $objQuery->nextVal(‘dtb_ticker_ticker_id’);
$ret = $objQuery->insert(‘dtb_ticker’, $sqlval);
return $ret;
}
function lfGetTickerDataByTickerID($ticker_id) {
$objQuery =& SC_Query_Ex::getSingletonInstance();
$where = ‘ticker_id = ?’;
return $objQuery->select(‘url, message, disp’, ‘dtb_ticker’, $where, array($ticker_id));
}
function lfGetTickerList() {
$objQuery =& SC_Query_Ex::getSingletonInstance();
$where = ‘del_flg <> 1′;
$objQuery->setOrder(‘rank DESC’);
return $objQuery->select(‘message, url, ticker_id, disp’, ‘dtb_ticker’, $where);
}
/* DBへの更新 */
function lfUpdateClass($arrData, $ticker_id) {
$objQuery =& SC_Query_Ex::getSingletonInstance();
// UPDATEする値を作成する。
$sqlval[‘disp’] = $arrData[‘disp’];
$sqlval[‘message’] = $arrData[‘message’];
$sqlval[‘url’] = $arrData[‘url’];
$sqlval[‘update_date’] = ‘CURRENT_TIMESTAMP’;
$where = ‘ticker_id = ?’;
// UPDATEの実行
$ret = $objQuery->update(‘dtb_ticker’, $sqlval, $where, array($ticker_id));
return $ret;
}
function lfInitParam($mode, &$objFormParam) {
switch ($mode) {
case ‘edit’:
$objFormParam->addParam(‘公開・非公開’, ‘disp’, INT_LEN, ‘n’, array(‘NUM_CHECK’,’MAX_LENGTH_CHECK’));
$objFormParam->addParam(‘メッセージ’, ‘message’, MLTEXT_LEN, ‘KVa’, array(‘EXIST_CHECK’,’MAX_LENGTH_CHECK’));
$objFormParam->addParam(‘リンク先’, ‘url’, MLTEXT_LEN, ‘KVa’, array(‘SPTAB_CHECK’,’MAX_LENGTH_CHECK’));
case ‘delete’:
case ‘pre_edit’:
case ‘down’:
case ‘up’:
$objFormParam->addParam(‘ID’, ‘ticker_id’, INT_LEN, ‘n’, array(‘NUM_CHECK’, ‘MAX_LENGTH_CHECK’));
break;
default:
break;
}
}
/**
* 入力エラーチェック
*
* @param string $mode
* @return array
*/
function lfCheckError($mode, $objFormParam) {
$arrErr = $objFormParam->checkError();
if(!isset($arrErr[‘name’]) && $mode == ‘edit’) {
$post = $objFormParam->getHashArray();
$objQuery =& SC_Query_Ex::getSingletonInstance();
$arrRet = $objQuery->select(‘ticker_id, message’, ‘dtb_ticker’, ‘del_flg = 0 AND message = ?’, array($post[‘message’]));
// 編集中のレコード以外に同じ名称が存在する場合
if ($arrRet[0][‘ticker_id’] != $post[‘ticker_id’] && $arrRet[0][‘message’] == $post[‘message’]) {
$arrErr[‘name’] = ”;
}
}
}
}
?>
[/php]
④ ■data/Smarty/templates/admin/contents/ticker.tpl
[php]