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

配信したすべてのメルマガをMYページで表示する。
管理画面上で削除したメルマガは表示されない。

1 メルマガ一覧を表示するかしないかをmtb_constantsテーブルに登録する。
——————————————-
id:MAILMAGA_SHOW
name:on
rank:1249(←適宜)
remarks:メルマガ一覧ページの表示 on/表示する off/表示しない
——————————————-
★システム設定>パラメーター設定を開き、「この内容で登録する」をクリック。

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>

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

(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';

/**
* メール配信履歴 のページクラス.
*
* @package Page
* @author LOCKON CO.,LTD.
* @version $Id: LC_Page_Mypage_Mailmaga.php 20911 2011-05-04 19:29:41Z Seasoft $
*/
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';
$this->tpl_pager = 'pager.tpl';
}

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

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

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

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

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

/**
* デストラクタ.
*
* @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
「ポップアップウィンドウを中央に表示する」を適用している。
http://www.itoben.com/blog/168.html

<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}-->

<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>

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

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

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

3 ナビメニューに追加する
■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}-->

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

(1) メルマガ一覧
———————————-
テーブル:dtb_pagelayout
device_type_id:10
page_id:30 ←既存page_idの続き
page_name:MYページ/メルマガ一覧
url:mypage/mailmaga.php
filename:mypage/mailmaga
header_chk:1
footer_chk:1
edit_flg:2
author:NULL
description:NULL
keyword:NULL
update_url:NULL
create_date:作成日
update_date:作成日
———————————-

(2) バックナンバープレビュー
———————————-
テーブル:dtb_pagelayout
device_type_id:10
page_id:31 ←既存page_idの続き
page_name:MYページ/バックナンバープレビュー
url:mypage/mailmaga_view.php
filename:mypage/mailmaga_view
header_chk:1
footer_chk:1
edit_flg:2
author:NULL
description:NULL
keyword:NULL
update_url:NULL
create_date:作成日
update_date:作成日
———————————-

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