- ECCUBEで新着情報を種別に分けて2種類の投稿を可能にする
- 2015.07.05
ECCUBEでトップページに「新商品情報」と店舗からの「お知らせ」の2つを表示する必要がありましたが検索してもやり方が見当たりませんでしたので、その方法をメモしておきます。
今回は、元からある新着情報を元にインフォメーションというブロックを制作する事とします。
EC-CUBEバージョン:2.13.3
1)種別を判別するフラグを追加して種別を登録できるようにする
・dtb_newsに「news_flg」というカラムをtinyint形式で追加します。・管理画面の新着情報管理に種別という項目を追加する。
【変更ファイル】
/data/Smarty/templates/admin/contents/index.tpl【変更箇所】
今回は種別が2つだけですので、マスターテーブルは用意せずに直書きします。
(1-1)登録テーブルに下記を追加
<tr>
<th>種別<span class="attention"> *</span></th>
<td>
<!--{if $arrErr[$key]}--><span class="attention"><!--{$arrErr[$key]}--></span><br /><!--{/if}-->
<label><input type="radio" name="news_flg" value="1"<!--{if $arrForm.news_flg.value == 1 || $arrForm.news_flg.value == ""}--> checked="checked"<!--{/if}--> />New</label>
<label><input type="radio" name="news_flg" value="2"<!--{if $arrForm.news_flg.value == 2}--> checked="checked"<!--{/if}--> />information</label>
</td>
</tr>(1-2)一覧表示のテーブルに下記を追加
<th>種別</th>
<td class="left">
<!--{if $arrNews[data].news_flg == 2}-->information
<!--{else}-->News
<!--{/if}-->
</td>【変更ファイル】
/data/class_extends/page_extends/admin/contents/LC_Page_Admin_Contents_Ex.php【変更箇所】
下記を追加/**
* パラメーターの初期化を行う
* @param SC_FormParam_Ex $objFormParam
*/
public function lfInitParam(&$objFormParam)
{
$objFormParam->addParam(‘news_id’, ‘news_id’);
$objFormParam->addParam(‘日付(年)’, ‘year’, INT_LEN, ‘n’, array(‘EXIST_CHECK’, ‘NUM_CHECK’, ‘MAX_LENGTH_CHECK’));
$objFormParam->addParam(‘日付(月)’, ‘month’, INT_LEN, ‘n’, array(‘EXIST_CHECK’, ‘NUM_CHECK’, ‘MAX_LENGTH_CHECK’));
$objFormParam->addParam(‘日付(日)’, ‘day’, INT_LEN, ‘n’, array(‘EXIST_CHECK’, ‘NUM_CHECK’, ‘MAX_LENGTH_CHECK’));
$objFormParam->addParam(‘種別’, ‘news_flg’, INT_LEN, ‘n’, array(‘EXIST_CHECK’,’NUM_CHECK’,’MAX_LENGTH_CHECK’));
$objFormParam->addParam(‘タイトル’, ‘news_title’, MTEXT_LEN, ‘KVa’, array(‘EXIST_CHECK’,’MAX_LENGTH_CHECK’,’SPTAB_CHECK’));
$objFormParam->addParam(‘URL’, ‘news_url’, URL_LEN, ‘KVa’, array(‘MAX_LENGTH_CHECK’));
$objFormParam->addParam(‘本文’, ‘news_comment’, LTEXT_LEN, ‘KVa’, array(‘MAX_LENGTH_CHECK’));
$objFormParam->addParam(‘別ウィンドウで開く’, ‘link_method’, INT_LEN, ‘n’, array(‘NUM_CHECK’, ‘MAX_LENGTH_CHECK’));
}2)デザイン管理>PC>ブロック設定でインフォメーション用のブロックを作成する。
ファイル名をinformation.tplとします。
内容はとりあえず新着情報をそっくりコピーしまが、一部変更します。【変更前】
function getNews(limit) {function getNewsDetail(newsId) {
【変更後】
function getInformation(limit) {function getInformationDetail(newsId) {
デザイン変更はCSS等で変更します。
3)以下のファイルをコピーしてインフォメーション用のファイルを作成します。
・コピーするファイル
/data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_News_Ex.php
/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_News.php・コピー後のファイル名
/data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Information_Ex.php
/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Information.php更にインフォメーション用のファイルはクラス名もNewsからInformationに変更します。
(主な変更箇所)
●LC_Page_FrontParts_Bloc_News_Ex.php
require_once CLASS_REALDIR . ‘pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Information.php’;
class LC_Page_FrontParts_Bloc_Information_Ex extends LC_Page_FrontParts_Bloc_Information●LC_Page_FrontParts_Bloc_News.php
class LC_Page_FrontParts_Bloc_Information extends LC_Page_FrontParts_Bloc_Ex4)/frontparts/bloc/information.phpを新規作成します。
内容は下記のような感じです。require_once realpath(dirname(__FILE__)) . ‘/../../require.php’;
require_once CLASS_EX_REALDIR . ‘page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Information_Ex.php’;$objPage = new LC_Page_FrontParts_BLoc_Information_Ex();
$objPage->blocItems = $params[‘items’];
$objPage->init();
$objPage->process();5)/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Information.phpを新規作成します。
内容はほぼ「LC_Page_FrontParts_Bloc_News.php」と同じですが、クラス名の一文は
class LC_Page_FrontParts_Bloc_Information extends LC_Page_FrontParts_Bloc_Ex
となります。6)最後にそれぞれのブロックで表示する種別を選択するように変更します。
【変更ファイル】
/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Information.php
/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_News.php
/data/class_extends/helper_extends/SC_Helper_News_Ex.php【変更箇所】
/data/class/pages/frontparts/bloc内のphpはaction内のdefaultを下記のように変更$this->arrNews = $objNews->getList("","","",1);
これは、種別1の記事を選択する設定です。
登録する値と同じにします。SC_Helper_News_Ex.phpは下記を追加する。
//put your code here
/**
* ニュース一覧の取得.
*
* @param integer $dispNumber 表示件数
* @param integer $pageNumber ページ番号
* @param boolean $has_deleted 削除されたニュースも含む場合 true; 初期値 false
* @param integer $flg informationの時 2; その他はNew
* @return array
*/
public function getList($dispNumber = 0, $pageNumber = 0, $has_deleted = false, $flg = “”)
{
$objQuery =& SC_Query_Ex::getSingletonInstance();
$col = ‘*, cast(news_date as date) as cast_news_date’;
$where = ”;
if (!$has_deleted) {
$where .= ‘del_flg = 0’;
}
if ($flg != “”) {
if ($where != “”) $where .= ‘ AND ‘;
if ($flg == 2) {
$where .= ‘news_flg = 2’;
} else if ($flg == 1) {
$where .= ‘news_flg = 1’;
}
}
$table = ‘dtb_news’;
$objQuery->setOrder(‘rank DESC’);
if ($dispNumber > 0) {
if ($pageNumber > 0) {
$objQuery->setLimitOffset($dispNumber, (($pageNumber – 1) * $dispNumber));
} else {
$objQuery->setLimit($dispNumber);
}
}
$arrRet = $objQuery->select($col, $table, $where);return $arrRet;
}確かこんな感じでした。
※こちらは備忘録としてまとめたものです。万が一不具合等が発生した場合も責任は負いかねます。流用する場合はご自身の責任で行って下さい。
ECCUBE