EC-CUBE2.12:メルマガのバックナンバーをMYページから閲覧

MYページで、過去に配信されたメルマガを閲覧できるようにする。
管理画面上で削除したメルマガは表示されない。

▼ここでのカスタマイズファイルをすべてダウンロードできます。
必要な箇所だけコピーしてご利用ください。
他のカスタマイズも含まれている場合がありますので、ファイルの上書きは絶対におやめください。
こちらから(facebookユーザーのみ)

1 メルマガ一覧をMYページに表示するかしないか、
会員自身に配信されたメルマガのみを表示するか、それともすべてのメルマガを表示するか、
以上の2点についてmtb_constantsテーブルに登録する。

INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('MAILMAGA_SHOW', 'true', 1426, 'MYページでのメルマガ一覧ページの表示(true:表示する,false:表示しない)');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('MAILMAGA_CUSTOMER', 'false', 1427, '表示するメルマガ(true:会員自身に配信されたメルマガのみ表示 false:すべてのメルマガを表示)')

★システム設定>パラメーター設定を開き、「この内容で登録する」をクリック。

2 ページングに、jQuery Paginateを利用する。
http://th3silverlining.com/2010/04/15/pajination-a-jquery-pagination-plugin/

(1)上記アドレスより、jquery.pajinate.jsをダウンロードし、
■html/js/jquery.pajinateフォルダに置く。

(2)スタイルシートを(1)と同じフォルダに置く。
■html/js/jquery.pajinate/styles.css

div#paging_container .ellipse{
float: left;
}

div#paging_container .page_navigation {
padding-bottom: 10px;
}

div#paging_container .page_navigation a {
padding:3px 5px;
margin:2px;
color:white;
text-decoration:none;
float: left;
font-family: Tahoma;
font-size: 12px;
background-color:#DB5C04;
}
div#paging_container .active_page{
background-color:white !important;
color:black !important;
}
div.page_navigation {
margin-bottom:30px;
}
div#paging_container ul#title {
clear:both;
}
div#paging_container ul#title li {
background-color:#EFEFEF;
border: 1px solid #CCC;
border-bottom:none;
}
div#paging_container .date {
float:left;
width:20%;
text-align:center;
padding:5px;
border-right:#CCC 1px solid;
}
div#paging_container .backnumber {
float:right;
width:76%;
padding:5px;
}
div#paging_container ul#title .backnumber {
text-align:center;
}
div#paging_container ul.content {
border:#CCC 1px solid;
border-bottom:none;
}
div#paging_container ul.content li {
border-bottom:#CCC 1px solid;
}

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

<!--ページング-->
<link media="screen" rel="stylesheet" href="<!--{$smarty.const.ROOT_URLPATH}-->js/jquery.pajinate/styles.css" />
<script type="text/javascript" src="<!--{$smarty.const.ROOT_URLPATH}-->js/jquery.pajinate/jquery.pajinate.js"></script>

3 メルマガ一覧ページとバックナンバープレビューページを新規作成

(1)■html/mypage/mailmaga.php

<?php
// {{{ requires
require_once '../require.php';
require_once CLASS_EX_REALDIR . 'page_extends/mypage/LC_Page_Mypage_Mailmaga_Ex.php';

// }}}
// {{{ generate page

$objPage = new LC_Page_Mypage_Mailmaga_Ex();
register_shutdown_function(array($objPage, 'destroy'));
$objPage->init();
$objPage->process();
?>

(2)■html/mypage/mailmaga_view.php

<?php
// {{{ requires
require_once '../require.php';
require_once CLASS_EX_REALDIR . 'page_extends/mypage/LC_Page_Mypage_Mailmaga_view_Ex.php';

// }}}
// {{{ generate page

$objPage = new LC_Page_Mypage_Mailmaga_view_Ex();
register_shutdown_function(array($objPage, 'destroy'));
$objPage->init();
$objPage->process();
?>

(3)■data/class_extends/page_extends/mypage/LC_Page_Mypage_Mailmaga_Ex.php

<?php
// {{{ requires
require_once CLASS_REALDIR . 'pages/mypage/LC_Page_Mypage_Mailmaga.php';

/**
* メール配信履歴 のページクラス(拡張).
*
* LC_Page_Mypage_Mailmaga をカスタマイズする場合はこのクラスを編集する.
*
* @package Page
* @author LOCKON CO.,LTD.
* @version $Id: LC_Page_Mypage_Mailmaga_Ex.php 20764 2011-03-22 06:26:40Z nanasess $
*/
class LC_Page_Mypage_Mailmaga_Ex extends LC_Page_Mypage_Mailmaga {

// }}}
// {{{ functions

/**
* Page を初期化する.
*
* @return void
*/
function init() {
parent::init();
}

/**
* Page のプロセス.
*
* @return void
*/
function process() {
parent::process();
}

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

(4)■data/class_extends/page_extends/mypage/LC_Page_Mypage_Mailmaga_view_Ex.php

<?php
// {{{ requires
require_once CLASS_REALDIR . 'pages/mypage/LC_Page_Mypage_Mailmaga_view.php';

/**
* メルマガプレビュー のページクラス(拡張).
*
* LC_Page_XXX をカスタマイズする場合はこのクラスを編集する.
*
* @package Page
* @author LOCKON CO.,LTD.
* @version $Id: LC_Page_Mypage_Mailmaga_view_Ex.php 20764 2011-03-22 06:26:40Z nanasess $
*/
class LC_Page_Mypage_Mailmaga_view_Ex extends LC_Page_Mypage_Mailmaga_view {

// }}}
// {{{ functions

/**
* Page を初期化する.
*
* @return void
*/
function init() {
parent::init();
}

/**
* Page のプロセス.
*
* @return void
*/
function process() {
parent::process();
}

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

(5)■data/class/pages/mypage/LC_Page_Mypage_Mailmaga.php

<?php
// {{{ requires
require_once CLASS_EX_REALDIR . 'page_extends/mypage/LC_Page_AbstractMypage_Ex.php';

/**
* MyPage のページクラス.
*
* @package Page
* @author LOCKON CO.,LTD.
* @version $Id: LC_Page_Mypage.php 21051 2011-07-27 04:51:21Z 468 $
*/
class LC_Page_MyPage_mailmaga extends LC_Page_AbstractMypage_Ex {

// {{{ properties

/** ページナンバー */
var $tpl_pageno;

// }}}
// {{{ functions

/**
* Page を初期化する.
*
* @return void
*/
function init() {
parent::init();
$this->tpl_subtitle = 'メルマガ一覧';
$this->tpl_mypageno = 'mailmaga';
}

/**
* Page のプロセス.
*
* @return void
*/
function process() {
parent::process();
}

/**
* Page のAction.
*
* @return void
*/
function action() {

$objCustomer = new SC_Customer_Ex();
$customer_id = $objCustomer->getvalue('customer_id');

//データ取得
$objQuery =SC_Query_Ex::getSingletonInstance();
$this->arrRet = array();
$this->arrRetMulti = array();

//取得1
$arrRet = $objQuery->select("*", "dtb_send_history", "del_flg = 0 order by start_date DESC");

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

//取得2
$arrRetMulti = $objQuery->select("*", "dtb_send_customer join dtb_send_history on dtb_send_customer.send_id=dtb_send_history.send_id", "dtb_send_history.del_flg = 0 AND dtb_send_customer.customer_id = $customer_id order by start_date DESC");

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

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

}
?>

(6)■data/class/pages/mypage/LC_Page_Mypage_Mailmaga_view.php

<?php
// {{{ requires
require_once CLASS_EX_REALDIR . 'page_extends/mypage/LC_Page_AbstractMypage_Ex.php';

/**
* メルマガプレビュー のページクラス.
*
* @package Page
* @author LOCKON CO.,LTD.
* @version $Id: LC_Page_Mypage_Mailmaga_view.php 21250 2011-09-22 07:13:57Z nanasess $
*/
class LC_Page_Mypage_Mailmaga_view extends LC_Page_AbstractMypage_Ex {

// }}}
// {{{ functions

/**
* Page を初期化する.
*
* @return void
*/
function init() {
parent::init();
$this->tpl_subtitle = 'バックナンバープレビュー';
$this->tpl_mainpage = 'mypage/mailmaga_view.tpl';
}

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

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

$objMailHelper = new SC_Helper_Mail_Ex();

switch ($this->getMode()) {
case 'template':
if (SC_Utils_Ex::sfIsInt($_GET['template_id'])){
$arrMail = $objMailHelper->sfGetMailmagaTemplate($_GET['template_id']);
$this->mail = $arrMail[0];
}
break;
case 'history';
if (SC_Utils_Ex::sfIsInt($_GET['send_id'])){
$arrMail = $objMailHelper->sfGetSendHistory($_GET['send_id']);
$this->mail = $arrMail[0];
}
break;
case 'presend';
$this->mail['body'] = $_POST['body'];
default:
}

$this->setTemplate($this->tpl_mainpage);
}

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

(7)■data/Smarty/templates/default/mypage/mailmaga.tpl

メルマガのビュー画面を開くのに、「ポップアップウィンドウを中央に表示する」が適用されている。
class=”popupwindow” rel=”windowReview” ← 適用しない場合は、削除し、target=”_blank”などと記述する。

<script type="text/javascript">
$(document).ready(function(){
$('#paging_container').pajinate({
num_page_links_to_display : 10,
items_per_page : 10,
nav_label_first : '最初',
nav_label_last : '最後',
nav_label_prev : '前へ',
nav_label_next : '次へ'
});
});
</script>

<div id="mypagecolumn">
<h2 class="title"><!--{$tpl_title|h}--></h2>
<!--{if $tpl_navi != ""}-->
<!--{include file=$tpl_navi}-->
<!--{else}-->
<!--{include file=`$smarty.const.TEMPLATE_REALDIR`mypage/navi.tpl}-->
<!--{/if}-->

<div id="mycontents_area">
<h3><!--{$tpl_subtitle|h}--></h3>

<!--{if count($arrRet) > 0}-->
<div id="paging_container">
<div class="page_navigation"></div>

<ul id="title">
<li>
<div class="date">配信日</div>
<div class="backnumber">バックナンバー</div>
<div class="clear"></div>
</li>
</ul>

<!--{if $smarty.const.MAILMAGA_CUSTOMER == "true"}-->

<!--{if count($arrRetMulti) > 0}-->
<ul class="content">
<!--{section name=cnt loop=$arrRetMulti}-->
<li>
<div class="date"><!--{$arrRetMulti[cnt].start_date|date_format:"%Y/%m/%d"|h}--></div>
<div class="backnumber"><a class="popupwindow" rel="windowReview" href="./mailmaga_view.php?mode=history&amp;send_id=<!--{$arrRetMulti[cnt].send_id|h}-->"><!--{$arrRetMulti[cnt].subject|h}--></a></div>
<div class="clear"></div>
</li>
<!--{/section}-->
</ul>
<!--{else}-->
<ul class="content">
<li style="padding:10px; text-align:center;">
メルマガ配信まで、もうしばらくお待ちください。
</li>
</ul>
<!--{/if}-->

<!--{else}-->

<ul class="content">
<!--{section name=cnt loop=$arrRet}-->
<li>
<div class="date"><!--{$arrRet[cnt].start_date|date_format:"%Y/%m/%d"|h}--></div>
<div class="backnumber"><a class="popupwindow" rel="windowReview" href="./mailmaga_view.php?mode=history&amp;send_id=<!--{$arrRet[cnt].send_id|h}-->"><!--{$arrRet[cnt].subject|h}--></a></div>
<div class="clear"></div>
</li>
<!--{/section}-->
</ul>

<!--{/if}-->


</div>
<!--{else}-->
<div id="complete">
<div class="contents">
<div class="message">
現在メルマガバックナンバーはありません。
</div>
</div>
</div>
<!--{/if}-->
</div>
</div>

(8)■data/Smarty/templates/default/mypage/mailmaga_view.tpl

<!--{if $mail.mail_method eq 2}--><!--{$mail.body|h|nl2br}--><!--{else}--><!--{$mail.body}--><!--{/if}-->

4 ナビメニューに追加する
■data/Smarty/templates/default/mypage/navi.tpl 「会員状態」と「退会状態」の2カ所に追加

<!--▼メルマガ一覧-->
<!--{if $smarty.const.MAILMAGA_SHOW == on}-->
<li><a href="mailmaga.php" class="<!--{if $tpl_mypageno == 'mailmaga'}--> selected<!--{/if}-->">
メルマガ一覧</a></li>
<!--{/if}-->
<!--▲メルマガ一覧-->
<!--▼メルマガ一覧-->
<!--{if $smarty.const.MAILMAGA_SHOW == on}-->
<li><a href="<!--{$smarty.const.TOP_URLPATH}-->" class="<!--{if $tpl_mypageno == 'mailmaga'}--> selected<!--{/if}-->>
メルマガ一覧</a></li>
<!--{/if}-->
<!--▲メルマガ一覧-->

5 データベースにページを登録

メルマガ一覧とバックナンバープレビュー

INSERT INTO dtb_pagelayout (device_type_id, page_id, page_name, url, filename, header_chk, footer_chk, edit_flg, author, description, keyword, update_url, create_date, update_date) VALUES (10, 30, 'MYページ/メルマガ一覧', 'mypage/mailmaga.php', 'mypage/mailmaga', 1, 1, 2, NULL, NULL, NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
INSERT INTO dtb_pagelayout (device_type_id, page_id, page_name, url, filename, header_chk, footer_chk, edit_flg, author, description, keyword, update_url, create_date, update_date) VALUES (10, 31, 'MYページ/バックナンバープレビュー', 'mypage/mailmaga_view.php', 'mypage/mailmaga_view', 1, 1, 2, NULL, NULL, NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)

6 メルマガ一覧ページにブロックを配置