2013年4月6日カテゴリー:

EC-CUBE2.12:メッセージが流れるティッカー

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]


style=”background-color:#ddd;”>

公開

非公開

選択されていません






⑤ ■data/Smarty/templates/admin/contents/subnavi.tpl 下記追加

[php] class=”on” id=”navi-contents-ticker”>

(1)下記より、jQueryプラグイン「carouFredSel」をダウンロードし、■html/js/jquery.caroufredselフォルダに置く。
http://caroufredsel.frebsite.nl/

(2)■data/Smarty/templates/default/site_frame.tpl 追加

[php]


[/php]

(3)ブロックを新規作成する

 ■html/frontparts/bloc/ticker.php

[php]
blocItems = $params[‘items’];
register_shutdown_function(array($objPage, “destroy”));
$objPage->init();
$objPage->process();
?>
[/php]

 ■data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Ticker_Ex.php

[php]

[/php]

 ■data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Ticker.php

[php]
setTplMainpage(‘ticker.tpl’); //include_phpを可能にする。
}

/**
* Page のプロセス.
*
* @return void
*/
function process() {
$this->action();
$this->sendResponse();
}

/**
* Page のアクション.
*
* @return void
*/
function action() {

// データベースから取得
$objQuery =& SC_Query_Ex::getSingletonInstance();
$this->arrRet = array();

//ティッカーを取得
$arrRet = $objQuery->select(‘*’,’dtb_ticker’,’del_flg = 0 and disp = 1 order by rank’);

//データベースから取得できたか
if(isset($arrRet)){
$this->arrRet = $arrRet;
}
}

/**
* デストラクタ.
*
* @return void
*/
function destroy() {
parent::destroy();
}
}
?>
[/php]

 ■data/Smarty/templates/default/frontparts/bloc/ticker.tpl

[php]


表示・非表示 メッセージ * リンクURL

background-color: ;” />

  • この内容で登録する
表示・非表示 メッセージ * リンクURL 編集 削除 移動