タグ: PHP

【EC-CUBE】メルマガの配信予約機能を使う(cron)

メルマガはデフォルトでは、配信設定したときに配信される。

これを、CRONを使って予約配信に変更し、30分ごとにメール配信予約ができるようにする。(*利用しているサーバがCRONによるJOBの予約に対応していること。)

その1)サーバのコンパネなどで下記コマンドのCRON設定を行う。

0,30 * * * * cd /(ECCUBEへのパス=/data/install.phpで確認すると良い)/html/admin/mail/; /usr/local/php/bin/php -f /(ECCUBEへのパス=/data/install.phpで確認すると良い)/html/admin/mail/sendmail.php 2>&1 > /dev/null

ちなみにcPanelの場合は、CRON設定画面でAdvanced(Unix Style)をクリック→
1つ目のフォーム:*/30
2つ目のフォーム:*
3つ目のフォーム:*
4つ目のフォーム:*
5つ目のフォーム**
6つ目のフォーム*cd /(ECCUBEへのパス=/data/install.phpで確認すると良い)/html/admin/mail/; /usr/local/php/bin/php -f /(ECCUBEへのパス=/data/install.phpで確認すると良い)/html/admin/mail/sendmail.php 2>&1 > /dev/null
を入力。

/usr/local/php/bin/phpは、/usr/bin/phpの場合もあるので、サーバのパスを確認すること。
Add Cronjobボタンをクリックして登録。上のフォームには、CRONが実行されたときに実行結果を送りたい管理者のメアドを入力しておく。

その2)EC-CUBE設定を行う。

管理画面→システム設定→パラメータ設定で、
[MELMAGA_BATCH_MODE]のパラメータを「false」から「true」へ変更。

管理画面→メルマガ管理でメールの配信を設定していくと、途中で予約配信の時間指定ができるようになっているので、30分単位で時間を入れて予約。毎時0分/30分に配信予約が入っているかの確認がCRONで送られてくる。

携帯メールの場合など設定を間違って夜中にお客さんのところにメールが届いた、といったミスが無いように、最初によくチェックしておくこと。

あとは、メルマガ配信予約で日時指定のときに、日につきの数値が入ってしまうバグがrので、/data/class/pages/admin/mail/LC_Page_Admin_Mail.phpの
292行目あたり「$this->arrNowDate[‘day’] = isset($_POST[‘send_day’]) ? $_POST[‘send_month’] : “”;」となってしまっているのを、「$this->arrNowDate[‘day’] = isset($_POST[‘send_day’]) ? $_POST[send_day] : “”;」と修正する。

【EC-CUBE】商品一覧ページの商品の並べ替え降順を追加する

一覧ページの並べ替えリンクで、価格順に昇順だけでなく降順を追加する。
新着順も同様に変更可能。

その1)/data/Smarty/templates/default/list.tplに降順並べ替え用のリンクを追加

L69あたりから(ver.2.3.2例)のソースに価格降順用のソースを追記。「価格順」のソースをコピペして編集すればOK。

 <!–件数ここから–>
  <!–{if $tpl_linemax > 0}–>
  <ul class=”pagenumberarea”>
    <li class=”left”><span class=”pagenumber”><!–{$tpl_linemax}–></span>件の商品がございます。</li>
    <li class=”center”><!–{$tpl_strnavi}–></li>
    <li class=”right”><!–{if $orderby != ‘price’}–>
        <a href=”javascript:fnModeSubmit(”, ‘orderby’, ‘price’)”>価格順</a>
    <!–{else}–>
        <strong>価格順</strong>
    <!–{/if}–>&nbsp;
  <!–{if $orderby != ‘price2’}–>
        <a href=”javascript:fnModeSubmit(”, ‘orderby’, ‘price2’)”>価格降順</a>
    <!–{else}–>
        <strong>価格降順</strong>
    <!–{/if}–>&nbsp;
    <!–{if $orderby != “date”}–>
        <a href=”javascript:fnModeSubmit(”, ‘orderby’, ‘date’)”>新着順</a>
    <!–{else}–>
        <strong>新着順</strong>
    <!–{/if}–>
    </li>
  </ul><!–件数ここまで–>
  <!–{else}–>
    <!–{include file=”frontparts/search_zero.tpl”}–>
  <!–{/if}–>

その2)/data/class/pages/products/LC_Page_Products_List.phpに価格降順用のソースを追記。

こちらも同様に、上の「価格順」のソースをコピペして編集すればOK。

L393あたりから

        //価格順
        case ‘price’:
            $col = “DISTINCT price02_min, product_id, product_code_min, product_code_max,”
                . ” name, comment1, comment2, comment3,”
                . ” main_list_comment, main_image, main_list_image,”
                . ” price01_min, price01_max, price02_max,”
                . ” stock_min, stock_max, stock_unlimited_min, stock_unlimited_max,”
                . ” point_rate, sale_limit, sale_unlimited, deliv_date_id, deliv_fee,”
                . ” status, product_flag, create_date, del_flg”;
            $from = “vw_products_allclass AS T1”;
            $order = “price02_min, product_id”;
            break;

というソースがあるので、その下にコピーして下記のように編集。

        //価格順
        case ‘price2’:
            $col = “DISTINCT price02_min, product_id, product_code_min, product_code_max,”
                . ” name, comment1, comment2, comment3,”
                . ” main_list_comment, main_image, main_list_image,”
                . ” price01_min, price01_max, price02_max,”
                . ” stock_min, stock_max, stock_unlimited_min, stock_unlimited_max,”
                . ” point_rate, sale_limit, sale_unlimited, deliv_date_id, deliv_fee,”
                . ” status, product_flag, create_date, del_flg”;
            $from = “vw_products_allclass AS T1”;
            $order = “price02_min DESC, product_id”;
            break;

これで、追加OK。新着順を古いものから並べたいときは、同様の手順でその下の「新着順」のコードをコピペして、一番下の「$order = “create_date DESC, product_id”;」を「$order = “create_date, product_id”;」(DESCを削除)とすればよい。

【EC-CUBE】PHPに関する覚書

EC-CUBEの覚書。

1)PHPのセッティングをオーバーライドでカスタム設定にしたいとき。

→APACHEのモジュール版(通常ROOT権限をもらえるサーバに使用されていることが多い)の場合は、.HTACCESSで設定する。.HTACCESSを設置したディレクトリ以下の全てに適用される。

→CGIモジュール版(レンサバで多い)の場合は、PHP.INIで設定する。PHP.INIを設置したディレクトリのみに適用される。

※PHP設定を確認するには、

<?php
phpinfo();
?>

と記載したphpファイルを確認したいディレクトリにアップロードし、アクセス。

2)パラメータ設定などで更新時に\(バックスラッシュ)が入ってしまい、更新エラーになることがある。

→ほぼ、PHPの設定で、magic_quotes_gpcがonになっていることが原因。PHP.INIまたは.HTACCESSで自分の環境の設定を変更するか、自分の利用しているサーバのPHPがモジュールかCGIか分からない場合は、いずれで設定変更できるのかをサーバ会社に連絡して確認する。

【EC-CUBE】データベース内の文字化け対策

DBを作ったら、先にphpMyAdminでDBに接続。

上のタブで、SQLを開き、まずは、

status

または、

show variables like “char%”;

と打ち込んで、現在の文字コードを確認。

サーバの設定にあたる「character_set_server」以外をUTF8に揃える。

ので、

set names utf8;
または、
alter database 〜DB名 character set utf8; (←たぶんこっち。)

で変更。確認して変更されていればOK。

これで変更できない場合は、phpMyAdminのトップページなどから、「照合順序」で変えればいいかと。

character_set_serverは、サーバの設定なので、個別には変更できないが、専用サーバなどであれば、my.conf等で変更可能。

my.cnfの[mysqld]のところにdefault-character-set=utf8と書いておけばOK。

2.3.2以前の場合は、それだけでは、システム動作時に文字化けに戻ってしまうので、

data/class/SC_DbConn.php

L64~
$this->conn = $objDbConn; 
の手前に、

if (DB_TYPE == 'mysql') {
$objDbConn->query('SET NAMES utf8');
}

を追加。(参考:http://svn.ec-cube.net/open_trac/changeset/17559)この場合、my.cnfの設定は必要ない。

PHP開発のための便利スニペット10

http://htmlblog.net/10-code-snippets-for-php-developers/

  1. メールアドレスチェック簡単化
  2. パスワード文字列ジェネレート
  3. Proxy経由でもできるだけIPアドレスを取得
  4. Uploadクラスを使ったファイルの簡単アップロード
  5. XSL変換
  6. ファイルのダウンロード
  7. Htmlバリデーションクラスの紹介
  8. PHPMailerを使ったメール送信
  9. 特定ディレクトリ以下のファイルを得る
  10. MDB2を使ったRDBM操作

こんな感じでスニペット化されたコードライブラリ。