iPhone8を買う理由

【このページは時短ページ】要点は緑色の太文字だけ読めばわかると思います

とっても不人気なiPhone8シリーズ。
買っちゃったよ…その理由と検証を説明します

いきなり結論:
iPhone7以前の機種なら買い替えるべし!
7を持っていたら不要!

 

 

 

 

iPhone7からの買い替えなら不要と感じた

今使っているのがiPhone6sでした。
なので防水機能・防塵機能が全くない裸武者のような機種だったので防水・防塵機能は魅力的です。

実際7は防水というよりも防滴と考えた方が安全な状況。

iPhone8は強めの防水・防塵機能であるとともに強度が強いので6からだったら絶対に買い!

 

 

機械の寿命や破損に備える

買い取りサービスの適用外や故障修理の対象に備えて2世代交代を目安に

パソコンもだけど壊れる前に買い替えるのが理想です。
2年も使うと、そろそろどこかが悪くなるというのもあるし、3世代くらい前になると機種編の買い取りサービスの適用外にもなってしまうので、せめて2世代開けての交代くらいの方が安心です。
それにソフトウェアの面や動作の面でもやっぱり新しいものの方が正常動作が確立されています。

常に新しい挙動をするスマホはある程度したら買い替えておくと安心です。

 

 

契約プランがちょっと安くなる

こればっかりはお店に行って説明を受けないと人それぞれです。
ウチは2人家族+光でソフトバンクなので支払いが若干安くなる予定?本当か?…なるはず?
まぁ、うっかり変な有料サービスに入っていたというのもあったのでそのあたりも切っていますが。
「機種代金」は今月でチャラになるのですが…よくわかりません。
「機種変先取り」って何?意味わかんなすぎて腹立つ!
「半額サポートfor iPhone」はとりあえず2年後に強制機種回収契約?みたいな

その明細はまた後日請求が来たらUPします

iPhone6s現在   iPhone8の場合の予定  
機種代金 4,440円 半額サポートfor iPhone

560円

基本料
ホワイトプラン
934円 基本料
スマ放題ライト
1,700円
通信料
パケットし放題フラット
for4G LTE 7G
5,700円 通信料
ウルトラギガモンスター
50G
7,000円
おうち割光セット -1,410円 家族2人割り -1,500円
ウェブ使用料 300円  
安心保障パックプラス 650円  

機種変先取りプログラム

300円  

ユニバーサル使用料

3円  
月付き割 -2,625円  
タダで機種変キャンペーン -1,065円  
       
       
合計 7,227円  

 

 

実際にiPhone8の売り文句はどうなのか?

はっきり言うと無駄な気がします。

  • スピーカー…従来より大きな音は出るけど、音割れするので無駄
  • ワイヤレス充電…充電しながら使えないのでいらない。充電スタンドを買わないといけないからいらない。
  • ApplePay…交通ICカードがすべて適用されたら使おうと思うけど、現時点で必要ないし対応しているお店も少ないし、セキュリティとか怖いし電車内スキミングとかも怖いから、まだ使わない。
  • カメラ性能…優れた性能を持っているのはiPhoneXのほうで8は大したことない。でも、一眼じゃないデジカメよりはきれいに撮れる。
  • スピード…そんなに変わらない
  • イヤホン穴…ないと不便だけど慣れると思う

 

 

キリのいい上限値を出す計算式(キリ番計算式)

グラフを書くときの上限値を出すときに例えば最大値が52.6とかだったら53というようなキリのいい数字で締めたらキレイですよね。

そういうときのキリの良い数字を求める計算方法です

C#でチャートコントロールを使うなら
こんな感じで設定

//Y軸最小値、最大値、目盛間隔の設定
chart1.ChartAreas[0].AxisX.Maximum = MAXVALUE_X ;
chart1.ChartAreas[0].AxisY.Maximum = MAXVALUE _Y;

上位2桁でキリの良い上限値を求める方法

【例】

  • 52.6753→53.0000
  • 0.124→0.200
  • 15473→16000

C#で上2桁のキリ番を計算

double dblVal_In = 52.6753;//←暫定的な最大値

strVal = dblVal_In.ToString(“0.0E+0”);
intPos = strVal.IndexOf(“E”) + 1;
dblVal_new = double.Parse(strVal);
if (dblVal_new < dblVal_In)
{
dblVal_new = dblVal_new + Convert.ToDouble(“0.1” + *注Mid(strVal, intPos));
}

double MAXVALUE = dblVal_new;//←キリの良い数字

 

 

 

VB6(VBA)で上位2桁のキリ番を計算

strVal = 52.6753′暫定的な最大値

strVal = Format$(dblVal_In, “0.0E+##”)
intPos = InStr(1, strVal, “E”)
dblVal_new = CDbl(strVal)
If dblVal_new < dblVal_In Then
dblVal_new = dblVal_new + CDbl(“0.1” & mID$(strVal, intPos))
End If

MAXVALUE = dblVal_new;//←キリの良い数字

 

 

上位1桁でキリの良い上限値を求める方法

【例】

  • 52.6753→60.0000
  • 0.124→1.000
  • 15473→20000

C#で上1桁のキリ番を計算

double dblVal_In = 52.6753;//←暫定的な最大値

strVal = dblVal_In.ToString(“0.E+0”);
intPos = strVal.IndexOf(“E”)+1;
dblVal_new = double.Parse(strVal);
if (dblVal_new < dblVal_In)
{
dblVal_new = dblVal_new + Convert.ToDouble(“1” + *注Mid(strVal, intPos));
}
double MAXVALUE = dblVal_new;//←キリの良い数字

 

VB6(VBA)で上位1桁のキリ番を計算

strVal = 52.6753′暫定的な最大値

strVal = Format$(dblVal_In, “0.E+##”)
intPos = InStr(1, strVal, “E”)
dblVal_new = CDbl(strVal)
If dblVal_new < dblVal_In Then
dblVal_new = dblVal_new + CDbl(“1” & mID$(strVal, intPos))
End If

MAXVALUE = dblVal_new;//←キリの良い数字

 

キリ番計算の考察

※注
C#の方では。ここでMidという関数を作って使っています。
詳細はコチラのサイトを参考にしてください→「VB の Left, Mid, Right のように文字列を取り出す


ここで使っている計算はイロイロな上限値でキリ番にできるようになっていますので、関数かしておくと便利です。
私が使ったときはイロイロな種類のグラフを書くので上限値が250だったり9.84だったりのキリ番を求めなきゃいけないときに使いました。

多分あっていると思う…

こういうのって納品した後に備忘録として書くからガッツリとデバッグしてないんだよね…(=_=;)
まちがってたらごめん。でもこんな感じで考えりとできますってことで参考に。

 

 

中古PCを買うメリットとデメリット

【このページは時短ページ】要点は緑色の太文字だけ読めばわかると思います

パソコンが壊れた!新しいパソコンを買うのに迷った!というときのアドバイス。

パソコンが壊れる前に買い替えること!

お客さまの90%が「パソコンが壊れたので新しいのを購入したいので…」と相談が来ます。

そして必ず「最近動きがおかしい感じで…」とか「音がうるさくなって…」「熱を持つようになって…」「起動しないときがあったり…」と壊れる前の話をします。

壊れる前に!そういう予兆が出たら買い替えてください!

パソコンが壊れると、壊れたパソコンのデータを完全に取り出すことができません!

壊れる前なら、新しいパソコンでも、前のとほぼ同じような環境にしてやることができます。使っているファイルとか、メール設定や今までのメール、デスクトップ、ソフト、お気に入り、写真、音楽などなど…

壊れると元のパソコンの中にあったものの50%くらいしか持ってこれないと思ってください。

 

 

 

パソコンを中古で買うメリット

パソコンを中古で買う理由はただ一つです。

「今使っているソフト(プログラム)・外部機器がこのバージョンでないと動かない」

の時だけです。それだけです。

特にWindows7は開発関係ではとても重宝されていて、
一世代前のVisualstudio(VB6、VB4あたり)が動くので、IT全盛期Windows98に開発をした社内システムを使うにはコレが適しています。
大体のWindowsXPで動いていたプログラムは、それなりの設定をすればWindows7で動かすことができます。
しかし、そのプログラムを動かすために最新のソフトExcelとかWordとかPhotoshopとか殆どが使えません。
すべての最新プログラムを投げうってでも旧システムを使うときにはWindows7を中古で買うのもアリです。

「好きだから」とか「気に入っているから」というならデメリットを理解してから考えてください。

 

 

 

中古パソコンを買うデメリット

デメリットは沢山ありますが簡潔に言うと

  1. 壊れやすい!
  2. 動かない!
  3. 割高!
  4. 危険!

私だったら絶対に買いませんね!知り合いだったら絶対買わせませんね!

1.壊れやすい点

機械の寿命があります。回転もののハードディスクは5年もヘビーに使っていたらソロソロお迎えが来るころでしょう。中古前の状況にもよりますが、あまり長持ちするパーツでもないので難しいです。だったらハードディスクだけ買い替えればいいじゃんと思いますが、古いマザーボードに適したハードディスクも、あまりなかったり中古だったりなので壊れの連鎖になります。

 

2.動かない点

・本体が動かない

確実に引っかかるのがWindowsUpdateです。
自動でUpdateをしない設定にしておかないと次に電源を入れたときに数千件の更新項目のためUpdateが始まって数日動かせないことにもなります。最悪の場合Updateもできません。

 

・ソフトが動かない

特にインターネット系です。2017年の現時点でWindowsVistaは、もうまともにサイトを見ることができません。
かろうじてサイトを見ることはできますが、レイアウトが崩れて見れないし、通販もできないし動画再生すら難しい状況です。

現在ホームページなどをしっかり見ることができる最終OSはWindows7です。それ以前は不可。

それ以外にも当然のことですが最新ソフトを入れても重い、動かないことは普通にあります。

でもWindows7は開発環境がいろいろ動くので神機!重いけど。
サイトを見ない、Updateをしないという条件の下で使用しています。
趣味や実用ではありませんね。確実に開発用オンリーです。

3.割高

今や最新機種も中古にちょっと+したくらいの金額で変えます。
また壊れるということを考えると
最新機種1台買うのと
中古3台かって、しかも毎回設定しなおして…
と考えると時間や金額も含めて最新の方がお得です。

4.危険(ウィルスや火事発火)

古いシステムやセキュリティなのでウィルスなんてバンバン入ります。
さらに、ラップトップを開けたところGが中で死んでたなんてことも。
それ以外にもホコリいっぱいとかで発火の危険も考えられそうです。

セキュリティも怖いし火事も怖いです。

 

 

 

それでも中古パソコンを買うなら?

ここで中古というと、ついWindows7あたりの話をしてしまっていました。
逆にWindows10の中古なら?と思うと、動作などは良いのですがハードディスクとか物理的な破損が心配ですね。
Windows8は?というとコレは使えません。闇歴史OSです。

 

 

 

新しいパソコンを買うときのチェック

安かろう悪かろう

チラシやDMを持ってきて「これ!安いからいいんじゃない?」と言われますが、大体低スペック。
よく書いてある部分の目安として
Celeron・・・使えない遅さ
Corei3・・・イライラする遅さ
Corei5・・・十分使える
Corei7・・・すげぇ快適
もっと細かくCPUの種類がありますが、この4つを参考にして比較してみるとよいと思います。

 

 

 

今、業務で動いているPCは何?

そういう自分は旧OSで何を使っているのかというと、中古で買うというよりも破棄するPCをもらうとか、買い替え前の古いのという感じで環境を保持しています。家にあるものや出先にあるものも含めています。

  • Windows98
    NECの古いやつ、Dynabook…主にVB2のプログラムやデータ焼き直し用で使用
  • WindowsVista
    Vaio・Corei5、Vaio・Celeron…使っていないですね。ネットがうまく動かないし…旧プログラムの動作確認用
  • Windows7
    DELL・Corei7、DELL・Corei5、ThinkPad・Corei5…現役バリバリ!VB4・VB6開発したものの修正や焼き直し参照、C#、Eclipce。もちろんVB4を入れるといろいろ動かなくなるのでその都度フォーマット。株・EX監視用。
  • Windows8
    DELL・Corei5…息子の株・FX監視と取引、レポート、PSOなど
  • Windows10
    DELL・Corei7…現在のメイン。株・FX監視と取引、VisualStudio C#、Xamalin

 

 

 

 

 

 

Chartコントロールでラベルやグラフの設定

VisualStudioのChartコントロール

あまり有名ではないけど、とても便利で簡単なのでC#での使い方を備忘録。
とりあえず自分がやったグラフだけ書きますが
細かい設定まで書いているので参考にしてください。

コントロールの貼り付け

「ツールボックス」「データ」の中にあるチャートをドラッグドロップ

 

チャートの初期化

//初期化
chart1.Series.Clear();

//X軸最小値、最大値、目盛間隔の設定
chart1.ChartAreas[0].AxisX.Minimum = 0;
chart1.ChartAreas[0].AxisX.Maximum = 20;
chart1.ChartAreas[0].AxisX.Interval = 5;

//Y軸最小値、最大値、目盛間隔の設定
chart1.ChartAreas[0].AxisY.Minimum = 0;
chart1.ChartAreas[0].AxisY.Maximum = 50;
chart1.ChartAreas[0].AxisY.Interval = 10;

//背景色
chart1.ChartAreas[0].BackColor = Color.FromArgb(255,200,200,200);

//中の罫線を点線にと色
chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.HotPink;
chart1.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dot;
chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Brown;
chart1.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dot;

折れ線グラフの書き方

例:「全国」という名前の青くてちょっと太い線のy=5x+10なグラフ

Series series_all = new Series(“全国”);
{
for (int i = 0; i < 50; i++)
{
int x = i;
int y = (5 * x) + 10;

series_all.Points.AddXY(x, y);
}
series_all.ChartType = SeriesChartType.Line;//グラフの種類
series_all.Color = Color.Blue;//線の色
series_all.BorderWidth = 3;//線の幅
series_all.IsValueShownAsLabel = false;//ポイントごとの値を表示しない
}
chart1.Series.Add(series_all);

 

 

 

分布図の書き方

なんのグラフなんだか…(-_-;)

string[] ary_tdfk = { “北海道”, “青森”, “岩手”, “秋田”, “山形”, “福島” };
double[] ary_y ={ 20.5, 10, 12.8, 7, 25.2, 9 };
long[] ary_x={ 15, 8, 4, 10, 7, 5};

//分布図
Series series_spraying = new Series(“散布図”);
{
//描画形式の設定
series_spraying.MarkerSize = 10;//点の大きさ
series_spraying.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Diamond; //点の形
series_spraying.ChartType = SeriesChartType.Point;//グラフのスタイル
series_spraying.Font = new Font(“Arial”, 8);//文字フォントとサイズ
series_spraying.Name = “散布図”;

//描画
for (int i = 0; i < ary_tdfk.Length; i++)
{
DataPoint dp = new DataPoint(ary_x[i], ary_y[i]);
dp.Label = ary_tdfk[i];
series_spraying.Points.Add(dp);
}
}
chart1.Series.Add(series_spraying);

ラベルのカスタマイズ

chart1.Series[“散布図”].LabelBackColor = Color.LightYellow;//ラベルの背景色
chart1.Series[“散布図”].CustomProperties = “LabelStyle=BottomRight”;//ラベルの位置
chart1.Series[“散布図”].Color = Color.Aqua;//ポイントの色

 

 

ラベルが重なってもいい、または重ねない

上のラベルはラベルを重ねない状態です。

密集した場所だと→とか自動で出るので結構便利ですが逆に分かりにくい場合は重なってもいいからという場合は

chart1.Series[“散布図”].SmartLabelStyle.Enabled = false;//ラベルの自動移動

 

凡例の削除

ちょっと場所を取りすぎるので邪魔ですよね

//凡例の非表示
for (int i = 0; i < chart1.Series.Count; i++)
{
chart1.Series[i].IsVisibleInLegend = false;
chart1.Series[i].IsValueShownAsLabel = false;
}

 

チャートをクリックしたときに値を表示

private void chart1_Click(object sender, EventArgs e)
{
HitTestResult result;
result = this.chart1.HitTest(((MouseEventArgs)e).X, ((MouseEventArgs)e).Y);
if (result.ChartElementType == ChartElementType.DataPoint)
{
DataPoint dp = result.Series.Points[result.PointIndex];
label1.Text = “エリア:” + dp.Label + “ X=” + dp.XValue.ToString() + “ Y=” + dp.YValues[0].ToString();
}

}

  ↓

「山形」の点をクリックすると「label1」に内容を書き出します

  ↓

 

複数グラフがあるときに特定のグラフの時だけ値を表示

上のままだと直線をクリックしたときに値が出てしまいます。
これを都道府県名の時だけ表示にします。

 

private void chart1_Click(object sender, EventArgs e)
{
label1.Text = “”;

HitTestResult result;
result = this.chart1.HitTest(((MouseEventArgs)e).X, ((MouseEventArgs)e).Y);
if (result.ChartElementType == ChartElementType.DataPoint)
{
if (result.Series.Name == “散布図”)
{
DataPoint dp = result.Series.Points[result.PointIndex];
label1.Text = “エリア:” + dp.Label + “ X=” + dp.XValue.ToString() + “ Y=” + dp.YValues[0].ToString();
}
else
{
label1.Text = “”;
}
}
}

 

chartコントロールを使わない場合

Chartコントロールを使わない場合はPictureboxもしくはFormに書きます。

下に進むとY軸は+され、右に進むとX軸が+されるので
グラフの(0,0)の位置を決定してから
計算して出た値のポイントまでラインを書いていきます。

 

 

Chartコントロールの感想

昔はねぇ…こういう便利なのがなかったから大変でした。
いろいろなグラフをきれいにかけるので是非とも活用してほしいと思います。

特にこのグラフのすごい点はchartのアンカーを4方位に設定して
ウィンドウを拡縮したときに同じようにchartコントロームが拡縮したときに
スムーズに描画がされる点です。

 

 

EC-CUBE3注文・問い合わせメールを返信でお客様のアドレスに

EC-CUBE3の注文メール、お問い合わせのメールはお客様に送る内容と同じものをBCCで管理人に送っているので、マスター情報に入れてある管理人メールアドレスに届いたメールに返信をしても自分のところに戻ってきてしまいます。

これを返信したときにお客様へのメールにすぐできるようにする方法です。

 

速習!返信メールカスタム場所

\src\Eccube\Service\MailService.php

開いてみるとわかる通りお客様宛メールはここで一括管理しています。
適当にいじれば何とかなります。

 

返信メール宛先変更詳細

この3件のメールを修正します。

・お問い合わせ受付メール送信開始
・受注メール送信開始
・受注管理通知メール送信開始

どれも、管理人に送られてきたメールの宛先をお客様のメアドにするので、管理人がメールを開いて返信をすることで簡単にお客様にメールを送ることができます。

 

全体での概要

上記3つ以外のところでもカスタマイズしたい場合はこちらを参考に

①各部分で

 ->setBcc($this->BaseInfo->getEma~~~

をコメントアウト

 

②直近の

$count = $this->app->mail($message);

の下に、直上の$messageをコピペして

->setFrom(array($this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()))
->setTo(array($Order->getEmail()))
->setBcc($this->BaseInfo->getEmail01())
->setReplyTo($this->BaseInfo->getEmail03())

 

Bcc項目を削除

 

③次の項目の内容を入れ替えます

->setFrom()
->setTo()
->setReplyTo(
->setReturnPath()

 

④その下に1行追加

$count = $this->app->mail($message);

 

お問い合わせ受付メール送信

log_info(‘お問い合わせ受付メール送信開始’);
の場所を探します

次のように書き換えます

// 問い合わせ者にメール送信
$message = \Swift_Message::newInstance()
->setSubject(‘[‘ . $this->BaseInfo->getShopName() . ‘] お問い合わせを受け付けました。’)
->setFrom(array($this->BaseInfo->getEmail02() => $this->BaseInfo->getShopName()))
->setTo(array($formData[‘email’]))
//->setBcc($this->BaseInfo->getEmail02())
->setReplyTo($this->BaseInfo->getEmail02())
->setReturnPath($this->BaseInfo->getEmail04())
->setBody($body);

$event = new EventArgs(
array(
‘message’ => $message,
‘formData’ => $formData,
‘BaseInfo’ => $this->BaseInfo,
),
null
);
$this->app[‘eccube.event.dispatcher’]->dispatch(EccubeEvents::MAIL_CONTACT, $event);

$count = $this->app->mail($message);

//ここが追加部分—————
$message = \Swift_Message::newInstance()
->setSubject(‘[‘ . $this->BaseInfo->getShopName() . ‘] お問い合わせを受け付けました。’)
->setFrom(array($formData[‘email’]))
->setTo($this->BaseInfo->getEmail02())
->setReplyTo(array($formData[‘email’]))
->setReturnPath($this->BaseInfo->getEmail04())
->setBody($body);

$count = $this->app->mail($message);
//—————–

log_info(‘お問い合わせ受付メール送信完了’, array(‘count’ => $count));

 

 

受注メール送信

お客様から注文が入ったときに管理人あてにくるメールです

$message = \Swift_Message::newInstance()
->setSubject(‘[‘ . $this->BaseInfo->getShopName() . ‘] ‘ . $MailTemplate->getSubject())
->setFrom(array($this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()))
->setTo(array($Order->getEmail()))
//->setBcc($this->BaseInfo->getEmail01())
->setReplyTo($this->BaseInfo->getEmail03())
->setReturnPath($this->BaseInfo->getEmail04())
->setBody($body);

$event = new EventArgs(
array(
‘message’ => $message,
‘Order’ => $Order,
‘MailTemplate’ => $MailTemplate,
‘BaseInfo’ => $this->BaseInfo,
),
null
);
$this->app[‘eccube.event.dispatcher’]->dispatch(EccubeEvents::MAIL_ORDER, $event);

$count = $this->app->mail($message);

//ここが追加部分—————
$message = \Swift_Message::newInstance()
->setSubject(‘[‘ . $this->BaseInfo->getShopName() . ‘] ‘ . $MailTemplate->getSubject())
->setFrom(array($Order->getEmail()))
->setTo($this->BaseInfo->getEmail01())
->setReplyTo(array($Order->getEmail()))
->setReturnPath($this->BaseInfo->getEmail04())
->setBody($body);

$count = $this->app->mail($message);
//—————–

log_info(‘受注メール送信完了’, array(‘count’ => $count));

 

 

 

受注管理通知メール送信

ここは管理画面からお客様へ「発送しましたよ」とか「注文を受付しましたよ」的なメールを送る際に使用する場所です。

$message = \Swift_Message::newInstance()
->setSubject(‘[‘ . $this->BaseInfo->getShopName() . ‘] ‘ . $formData[‘subject’])
->setFrom(array($this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()))
->setTo(array($Order->getEmail()))
//->setBcc($this->BaseInfo->getEmail01())
->setReplyTo($this->BaseInfo->getEmail03())
->setReturnPath($this->BaseInfo->getEmail04())
->setBody($body);

$event = new EventArgs(
array(
‘message’ => $message,
‘Order’ => $Order,
‘formData’ => $formData,
‘BaseInfo’ => $this->BaseInfo,
),
null
);
$this->app[‘eccube.event.dispatcher’]->dispatch(EccubeEvents::MAIL_ADMIN_ORDER, $event);

$count = $this->app->mail($message);

//追加するところ—————
$message = \Swift_Message::newInstance()
->setSubject(‘[‘ . $this->BaseInfo->getShopName() . ‘] ‘ . $formData[‘subject’])
->setFrom(array($Order->getEmail()))
->setTo($this->BaseInfo->getEmail01())
->setReplyTo(array($Order->getEmail()))
->setReturnPath($this->BaseInfo->getEmail04())
->setBody($body);

$count = $this->app->mail($message);

//—————–

log_info(‘受注管理通知メール送信完了’, array(‘count’ => $count));

 

 

 

注意点

ここで修正する全部のところに共通しますが

->setBcc(

をコメントアウトすることを忘れないように。
コメントアウトしないと、管理人までメールが来てしまいます。

 

EC-CUBE3会員登録関係を管理人にメールしない

会員登録関係でとっても便利な機能を持っているEC-CUBE3

でも、会員登録の認証メールとかも管理人に通知が来るのでとても邪魔です。会員登録は勝手にこっそりやってほしい場合のカスタマイズです。あと、お客様に送った通知メールも管理人に来てややこしくなるのでSTOPさせます。

速習!動作概要

\src\Eccube\Service\MailService.php

ここでBCCで管理人にメールを送っているので修正すればOK

全体でメールのタイトルや、Bccを他に追加したいときもここをいじるとOKです。

 

会員登録系メールを管理人に送らないする方法

この4つが該当します。
・仮会員登録メール
・会員登録完了メール
・退会手続き完了メール
・仮会員登録再送メール

\src\Eccube\Service\MailService.php
ここでログを履きさす部分に上記の4項目が書いてあるので検索してその場所を特定します。

その付近にある

 ->setBcc($this->BaseInfo->getEmail01())

をコメントアウト

 

 

エディタは「Terapad」を使用しています。
デフォルトでこんな感じに色がつくからわかりやすくて便利です

ファイルの中の文字を探すツールの作り方2(ソースコード)

このソースは「ファイルの中の文字を探すツールの作り方」の内容です

 

ソースコードはこちらになります

 

 

       private void listBox1_DragDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                foreach (string fileName
                    in (string[])e.Data.GetData(DataFormats.FileDrop))
                {
                    listBox1.Items.Add(fileName);
                }
            }
        }

        private void listBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete)
            {
                for (int i = 0; i &amp;amp;amp;amp;amp;amp;lt;= listBox1.SelectedItems.Count; i++)
                {
                    listBox1.Items.Remove(listBox1.SelectedItem);
                }
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
        }
        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string path;
            string src_utf;
            string src_sift;
            int datacnt = 0;
            System.IO.StreamReader reader;

            string key_old = textBox2.Text;

            bool ChangeFlg;

            for (int i = 0; i &amp;amp;lt; listBox1.Items.Count; i++)
            {
                path = listBox1.Items[i].ToString();

                string[] files = { path };

                if (System.IO.File.Exists(path))
                {
                    // ファイルだ!
                }
                else
                {
                       //ディレクトリだ!
                    files = System.IO.Directory.GetFiles(path, "*", System.IO.SearchOption.AllDirectories);
                }



                foreach (string searchfile in files)
                {

                    label1.Text = searchfile;
                    System.Windows.Forms.Application.DoEvents();

                    reader = new System.IO.StreamReader(searchfile, System.Text.Encoding.GetEncoding("utf-8"));
                    src_utf = reader.ReadToEnd();
                    reader.Close();

                    reader = new System.IO.StreamReader(searchfile, System.Text.Encoding.GetEncoding("shift_jis"));
                    src_sift = reader.ReadToEnd();
                    reader.Close();

                   if (src_utf.IndexOf(key_old) != -1)
                   {
                       textBox1.Text = textBox1.Text + searchfile + "\r\n";
                       datacnt++;
                   }else if(src_sift.IndexOf(key_old) != -1){
                       textBox1.Text = textBox1.Text + searchfile + "\r\n";
                       datacnt++;
                   }
               }

            }

            label1.Text = "FIX=" + datacnt.ToString() ;


            MessageBox.Show("OK");
        }

EC-CUBE3下書きサイトから本番サイトへ移動するポイント

 

いきなり本番のURLで作りこむ猛者はいないと思います。
とりあえずどこか適当なURLで作ってから、本番へ移行ということが多いので、
その時の引っ越しのポイントです。

 

普通は簡単にできる

普通だと

  1. データベースの移動
  2. ファイル全てを移動
  3. app/config/eccubeフォルダの中を新しい環境に変える
    (データベースとかパスを新しい環境に変更する)

という感じだけ動くのですが、

それでもなぜか動かない場合の方法の一例です。

 

引越しでのハマりやすいポイント

app/config/eccube/path.yml
を修正するときに、上の方の「tpl」下の方の「admin_urlpath」あたりが、下書きサイトが第二階層で引越しサイトが第一階層だと、文字の変換でうまくいかないので手作業で確認と修正が注意が必要です。
とくにCSSがうまく読み込めていないなどはココが影響します。

良くわからない場合は、一度EC-CUBEをインストして、自動生成されたpath.ymlを参考にしてください。

 

よくあるEC-CUBE3の引越しの失敗

  • 下書きサイトから本番サイトに移動したときログインできない
  • ログイン画面が表示されない
  • なんだかわからないけど動かない

 

下書きサイトの準備のポイント

httpsサイトの場合の注意

もし本番サイトがhttpsサイトの場合には
下書きサイト自体でhttps環境で作り
 システム設定 > セキュリティ管理 > サイトセキュリティ設定で
 □SSLを強制にチェックを入れて作っておく。

次項目で「3.本番環境に自動インストール」の後にログインして
同じように□SSLを強制にしておくとスムーズに以降できます。

(ロリポップだと無料で独自ドメインをsslにできるので便利!)

 

phpバージョンなどの注意

phpバージョンやCGI版・モジュール版などは同じものにしておいた方が良いです。
というよりも私だったら「絶対に同じにしておく!」
同じような環境が準備できない場合には本番サイト下層もしくはマルチドメインで同じサーバーに作ると安心です。

 

EC-CUBE3引越し方法

下書きサイトのデータをFTPですべてダウンロード

  1. 下書きサイトのデータベースを次の3つを抜かしてエクスポート
    mtb_authority
    mtb_work
    dtb_menber
    このとき「詳細」「Add DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT statement」でダウンロード
  2. 本番環境にEC-CUBE3をインストール
  3. ダウンロードした\app\config\以外のファイルを上書きUPロード
  4. 本番サイトのデータベースで上記3テーブル以外を削除
  5. 下書きサイトのデータベースをアップロード

 

外国向けECサイトはMagento2かEC-CUBE3か?

【このページは時短ページ】要点は緑色の太文字だけ読めばわかると思います

 

今までは外国向けECサイトをhtmlでやっていた老舗の会社から
「ショッピングカートと会員登録とメルマガが機能がほしい」
と言われてEC系のCMSを導入することになりました。

そこで候補として挙がったのが
「外国産で外国では超有名な安心のMagento2」

「国産で日本では有名だけど外国は微妙なEC-CUBE3」

 

実際に導入する際の比較検討です。
もし悩んでいる方がいましたら参考にしてください。

結局Magento2とEC-CUBE3どっちを選んだか

EC-CUBE3を選びました。
理由はレンタルサーバーを使用しているので、Magento2を使えるほどのスペックがなかったからです。
サーバーのスペックが許されればmagento2を使いたかったです。

サーバーの機能不足でMagento2は使えない

「Magento2をインストールする際に最低でも512MB欲しい」
一時だけPHPのメモリを増やしたいんですが…って問い合わせたら
大変丁寧に「ダメ」って言われました^^;

それと「imagemagick」を使用しているので、このあたりもチェックポイントになります。

  • レンタルサーバーではXサーバーはなんとか動かせるような感じのことが書いてありました
    XサーバーMagento2インストール(公式)

  • ロリポップは不可(imagemagick有りだけどメモリ足りず)
  • さくらはVPSなら可能

この3つのサーバーってナウでヤングなので好きです。
新しい機能とかガンガン取り入れるからいいですよ。
古いところだとPHPもMySQLも古いし、機能少ないし、問い合わせてもトンチンカンな返事が来たりとか多いので…

実際、高スペックなVPSで動かすならMagento2のが良いと思います。

 

Magento1を使えばいいじゃん!

Magento2の容量がすさまじいので断念しましたが、Magento1ならレンタルサーバーでも十分動きます。
でもphp5.5までの環境でしか動かないので、新しくサイトを作る場合にphp5.5で使わせてくれるサーバーなんてないのでダメでした。
一応php5.6で動くとは言われていますが、Magento1は2016年以降プラグイン系が一切動かないので使えないと断言できます。

 

 

翻訳の手間はMagento2推し

Magento2の場合は英語→日本語に
EC-CUBE3の場合日本語→英語に
どちらも同じような手作業で翻訳する必要があります。

実際、どっちが楽かというと「英語→日本語」の方が楽です。

片言の英語が読めたり、Google翻訳を使えばニュアンスがわかるのでネイティヴな日本語で翻訳することができます!

 

あと、デザインや操作なども世界向けなのでMagento2のが安心です。
特に電話番号や郵便番号はEC-CUBE3では国内向けガチガチなので、結構カスタマイズしないと使えません。
電話番号が+の国番号から始またったり、名前にスペースが入ったり、住所の長さや書き方などは世界標準に合っている方が便利です。

それに「英語→日本語」だと、ちょっとくらい英語が残ってても大丈夫。逆にカッコいいじゃん?

 

 

ノウハウの多さはどっちもどっち

フォーラムや改造テクで日本語が多いのがEC-CUBE3。

でも世界的にみると使用している人数が少ないので、Magento2の方が情報は沢山あります!しかし全部英語です!
でもカタコトの英語ができればなんとかなるレベルです。

日本公式さんも頑張って欲しいところです…

 

 

EC-CUBE3で作って思った点

根性入れればなんとかなります。
一応軽くですが越境EC-CUBE3変更した点をまとめましたのでご参考に。
あと、「ファイルの中を探すツールの作り方」も公開しているので、これを使えばどこのファイルを修正すればいいかわかるので作っておいた方がいいと思います。

 

 

ファイルの中の文字を探すツールの作り方

C#でつくる簡単プログラム

ファイルを開いて中の文字を検索して、検索文字が入っていたファイルをリストアップします。

EC-CUBEやMagentoなどオープンソースの便利なシステムがたくさんあります。
でも「この部分を変更したい」というときに
「”この部分”がどこにあるのか探したい」というときに便利です。

例によってツールはVisualstudioのC#を使用しています。
「VisualstudioのC#」はMicrosoftが提供している無料の開発ツールです。
C#の使い方はここでは割愛させていただきます。

文字を探すツールの使い方

  1. phpなどのプログラムが一式が入ったフォルダをツールにドラッグします
  2. 調べたい文字を入力します
  3. 「検索」を押すと文字が記述されたファイルをリストアップします

 

プログラム

使うツールボックス

まずフォームに「listbox1」「textbox1」「textbox2」「button1」「button2」「button3」「label1」を置きます

 

 

プロパティの設定

  • listbox1(探すディレクトリをドラッグドロップするとこ)
    Allowdorop=true
  • textbox1(結果を表示するとこ)
    Mulitiline=true
    ScrollBars=Vertical
  • button1
    text=探す
  • button2、button3
    text=クリア

 

プログラム

きちんとイベントに結び付けてから記述してください

 

ソースコードはコチラです
 ↓
ファイルの中の文字を探すツールの作り方2(ソースコード)

 

動作確認

CuctomEntoryの中に入っているファイルすべての中で「電話」と書いてあるファイルを表示します。

  1. ディレクトリごとドラッグドロップ
  2. 探したい文字を入力
  3. 「探す」クリック
  4. 結果が一覧で出てくる

 

 

検証

なんかエラー出た。まぁいいやwごめん。
昔作ったツールの焼き直しだから、使っていない変数とかあったw

あと細かくは適当に直してください。