カテゴリー別アーカイブ: Tips(EC1)

会員登録メールと購入内容確認メールに会社名を出そう。

EC-CUBE1系です。
今まで散々、会員情報に「会社名追加」とかやってきたわけですが

「会社名」を管理画面の顧客管理での一覧に表示させる
会員登録に必須の「会社名」を追加する
「顧客管理」時に「会社名」を検索対象にする

メールの方の一番最初の「○○様」ってところにも「会社名」を出したいとな。

会社名

○○様

を目指します。

まずは購入内容確認メールの方

data\lib\slib.php
のL.1770あたり
// 顧客情報の取得の2行下。
$arrRet = $objQuery->select(“point,name01,name02”, “dtb_customer”, “customer_id = ?”, array($customer_id));を

$arrRet = $objQuery->select(“point,name01,name02,company,fax01,fax02,fax03″, “dtb_customer”, “customer_id = ?”, array($customer_id));

と。あ、faxも表示したかったからついでに追加。

L1805あたりの

$name = $objPage->arrOrder[‘order_name01’].” “.$objPage->arrOrder[‘order_name02’];

$name = $objPage->arrCustomer[‘company’].”\n “.$objPage->arrOrder[‘order_name01’].” “.$objPage->arrOrder[‘order_name02’];

です。

次に会員登録メールの方

entry\index.php

のL138($objPage->name02ツꀀ = htmlspecialchars($_POST[‘name02’]);)の下

$objPage->company = htmlspecialchars($_POST[‘company’]);を追加。

data\Smarty\templates\mail_templates\customer_mail.tpl

の会社名を表示したいところに、

<!–{$company}–>

と追加。

これさ、もともと$_POST[]のでーたを生で渡してるけど、大丈夫なのかな?
ちゃんと読み取れてないけど、一応、htmlspecialcharsつけたけど・・・・・・。
まぁ、htmlじゃなくてメールだからいいのか・・・・・・。

管理画面の検索部分プルダウンの日付について

商品管理 – 商品マスタの「登録・更新日」
顧客管理 – 顧客マスタの「最終購入日」
受注管理 – 受注管理の「受注日」「変更日」
メルマガ – 配信内容設定「登録日」「最終購入日」

は、
data\conf\conf.php L210のdefine (“RELEASE_YEAR”, 2005);で管理されているので、そこを変更すること。
顧客管理 – 顧客マスタの「最終購入日」
メルマガ – 配信内容設定「登録日」「最終購入日」は、RELEASE_YEARから現在の年+3の選択肢となる。ちょっと不思議な感じですが。

顧客管理 – 顧客マスタの「登録・更新日」は、
admin\customer\index.php の L.91 $objDate = new SC_Date(1901);
で設定してあるが、この1901は、同じところの誕生日部分に関わってくるので、下手に「2008」とかできません。

なので、テンプレートを変更します。

data\Smarty\templates\admin\customer\index.tpl
「登録・更新日」の
<!–{html_options options=$arrYear selected=$arrForm.end_year}–>
となっているところを

<!–{html_options options=$objDate->getYear($smarty.const.RELEASE_YEAR) selected=$arrForm.end_year}–>

と変更します。

「会社名」を管理画面の顧客管理での一覧に表示させる

以前、顧客情報に「会社名」を追加しましたが、その会社名を管理画面>顧客管理で検索したあとのリストに表示させるには・・・・・・。

data\class\SC_CustomerList.php

のL.341あたりにあります

ツꀀ// 検索用SQL
ツꀀfunction getList() {
ツꀀツꀀ$this->select = “SELECT customer_id,name01,name02,kana01,kana02,sex,email,tel01,tel02,tel03,pref,status FROM dtb_customer “;
ツꀀツꀀreturn $this->getSql(0);
ツꀀ}

に、companyを追加します。

function getList() {
ツꀀツꀀ$this->select = “SELECT customer_id,name01,name02,kana01,kana02,sex,email,tel01,tel02,tel03,pref,status,company FROM dtb_customer “;
ツꀀツꀀreturn $this->getSql(0);
ツꀀ}

そして、テンプレートの
data\Smarty\templates\admin\customer\index.tpl

の任意の場所へ

<!–{$search_data[data].company|escape}–>

を入れます。

件名(subject)やFromやToが文字化けする件

「お問い合わせ」「会員登録」「受注メール」の件名やFromやToが文字化けする。
つまりヘッダーに含まれる日本語が文字化けしているのだと思うのだけど、MicrosoftOutlookだと文字化けしないのに、OutlookExpressだと文字化けしてします。

文字コードがUTF8なのを、OutlookExpressが許さないのかなぁとも思いつつ、詳しい理由はつきとめられなかった。

その回避方法

EC-CUBE開発コミュニティサイトより
文字化け

data\class\GC_SendMail.php

L.29

$name = mb_encode_mimeheader($name);

↓↓↓↓↓

$name = mb_encode_mimeheader(mb_convert_encoding($name, “JIS”, CHAR_CODE), “ISO-2022-JP”);

L.65

$this->subjectツꀀツꀀ = mb_encode_mimeheader($subject);

↓↓↓↓↓

$this->subjectツꀀツꀀ = mb_encode_mimeheader(mb_convert_encoding($subject, “JIS”, CHAR_CODE), “ISO-2022-JP”);

L.79

$this->header.= “From: “. mb_encode_mimeheader( $from_name ).”<“.$fromaddress.”>\n”;

↓↓↓↓↓

$this->header .= “From: “. Mb_encode_mimeheader( $from_name, “ISO-2022-JP” ).”<“.$fromaddress.”>\n”;

という感じ。

商品CSVで商品説明文に改行コードが含まれる不具合

EC-CUBEは、商品をcsvで一括変更できるが、このcsvをダウンロードしたとき、商品説明に改行コードが含まれていると1商品1行にならずに不具合が起こる。

タグを使い、改行をせずに文章を入れることが必要だが、一覧リストコメントにいたっては、タグが許可されていなくて、改行コードを<br>に変換する機能がついているのに、なんだか面倒なことだ。

csvデータの途中に改行コードが含まれるなら、途中で削除してしまえばよい。

admin\products\index_csv.php
L137あたりにあるlfMakeProductsCSV関数を変更する。

// 文末の”,”を変換
$line = ereg_replace(“,$”, “\n”, $line);

の上に下記コードを加える。

//▼文の改行コードを全て変更する
$line = str_replace(“\n\r”,””, $line);
$line = str_replace(“\r”,””, $line);
$line = str_replace(“\n”,””, $line);

\は円マークです。

もっとスマートなコードがある気はするが、とりあえず・・・・・・。

メールテンプレート{order}部分

EC-CUBEの管理画面、受注管理から個別の受注を見ると「通知」というところが表示され、メールを送れるようになっている。このときテンプレートを選ぶと、{order}という表示がでてきて、プレビューするとそこに受注依頼内容が表示される。

{order}には商品名、商品コード、数量、価格などが表示されるんですが、今回のカスタマイズでは、価格通知は行わないようにしたいので、{order}から、価格を取り除く必要がある。

この{order}の内容はテンプレートで管理されている。

PC用 data\Smarty\templates\mail_templates\order_mail.tpl

モバイル用 data\Smarty\templates\mobile\mail_templates\order_mail.tpl

この2箇所を変更すると良い。

カート確認画面で、お支払い方法を飛ばせるか

特殊なサイトを作っているので、「お支払い方法」がいらない。

カートの中を確認 → お届け先を指定・その他お問い合せ → 入力情報確認 → 完了

「お支払い方法・お届け時間」をまるまるごっそり飛ばしたい。

セッションを生み出して、前のページアドレス(now-page)をprepageとして入れて、今のページを$_SERVERからとってnowpageに入れてみたりとか、ページの処理がうまく行ったら、locationで飛ばしているみたい(だいぶ割愛)

さて、肝心の「お支払い方法」の飛ばし方ですが、

shopping\deliv.php の L102 case ‘customer_addr’: 以下を編集します。

header(“Location: ” . URL_SHOP_PAYMENT); が2箇所ありますが、これを
header(“Location: ” . URL_SHOP_CONFIRM); に変更。 以上。

これで、確認画面に飛びますが、もちろん支払い方法は空です。
メール等々の小細工が必要となります。

ツꀀ 続きを読む

会員登録に必須の「会社名」を追加する

1)dtb_customerにカラム「company」を追加する。

alter table dtb_customer add (companyツꀀ text);

2)フォームに会社名を追加する。

data\Smarty\templates\entry\index.tpl

<tr>
ツꀀ<td width=”135″ bgcolor=”#f0f0f0″>会社名<span>※</span></td>
ツꀀ<td width=”402″ bgcolor=”#ffffff”><span><!–{$arrErr.company}–></span>&nbsp;<input type=”text” name=”company” size=”30″ value=”<!–{$company|escape}–>” maxlength=”<!–{$smarty.const.STEXT_LEN}–>” style=”<!–{$arrErr.company|sfGetErrorColor}–>; ime-mode: active;” />
ツꀀ</td>
</tr>

3)確認ページで会社名を必須対象にする。

entry\index.phpのL309「function lfErrorCheck($array) {」以降

$objErr->doFunc(array(“会社名”, ‘company’, STEXT_LEN), array(“EXIST_CHECK”));

ツꀀ 続きを読む

備忘録:仮会員登録でもメールアドレスは重複になるか?

EC-CUBE 1.4で、仮会員登録時に使ったメールアドレスを、本登録させずに、もう一度会員登録時に使用する。

本登録だろうが仮登録だろうが、データベースに入っているものは「重複」になっちゃいますね。

仮登録ではねるときは、仮登録のままで置いておくのも一つの手か?

登録しなおさせるときは、仮登録のデータ消さなくちゃいけないってことですね。

会員のみ表示させたい

会員がログインしているときだけ、表示させたいという場合。

・詳細ページの価格
・リストページの価格
・見積リストブロック

<!–{if $tpl_login}–>

<!–{/if}–>で挟まれていると、ログインしただけで表示される。

だが、リストページと見積もりリストブロックは、プログラムのほうにログイン判定の追加が必要。

続きを読む