(佐賀→熊本)マークアップエンジニアのググる生活

地方のWEB制作会社で働く、フロントエンドエンジニア。
HTML、CSS、JavaScript(jQuery)、PHP、Smary、EC-CUBE、WordPress、Movable Type等々で解らない時に、Googleで検索したら解決した話や、「閃いた!」などをほとんど自分用にメモとして残すブログです。

※URLがあったら元記事を参照推奨です!
※ほとんどの事は検証はしていますが、あくまでも参考程度にお願い致します!
※記載が不正確であったことにより生じたいかなる損害に関しても、当ブログは責任を負いかねます。自己責任でよろしくおねがいいたします。

2018年05月

レンタルサーバーの場合、WordPressやEC-CUBEなどのメジャーなCMSは、
自動インストールなどのワンクリック操作で可能だが、
それが無い場合は、各種公式サイトよりダウンロードし、
解凍後、FTPなどでアップロードすると思いますが…。
解凍後のファイル群は容量が多く時間がかかります。

そこでダウンロードした際に、Zipやtar、gzなど圧縮形式のままアップロードできないかと、
思っていたところ、WinSCPにはその機能があるとのこと!
http://xoops.ryus.co.jp/modules/d3blog/details.php?bid=304
↑で書いてある通りに操作してみるものの、「UnTar/GZip」がクリックできない…。

もしやFTPだからダメなのかな?と調べてみると、
https://translate.googleusercontent.com/translate_c?act=url&depth=1&hl=ja&ie=UTF8&prev=_t&rurl=translate.google.co.jp&sl=en&sp=nmt4&tl=ja&u=https://winscp.net/forum/viewtopic.php%3Ft%3D8638&xid=17259,15700021,15700124,15700149,15700168,15700173,15700186,15700189,15700201&usg=ALkJrhiM3r5zhuseDWr9lgcMD5J_ZvhoHw
思った通り、FTPではなくSFTPやSCPなどのSSH接続ではないと、
使用できない機能でした。

ということで、FTPをやめて、SFTP接続を試みました。

XSERVERを使用しているため、
基本的なやり方はググると良く出てきます。
https://lab.maro-log.net/post-3935/
https://nelog.jp/xserver-winscp-sftp
↑の通りではありますが、最後のWinSCPのセッションの設定で、
ちょっと奔走したので下記にメモします。

・転送プロトコル → SFTP
・ホスト名 → サーバードメイン
・ポート番号 → 10022
・ユーザ名 → サーバーID
・パスワード → 空欄

sftp



これでめでたくSFTP接続が可能となり、
リモート先で「UnTar/GZip」のコマンドをクリックできるようになり、
圧縮ファイルの解凍が可能となりました!嬉しい!

EC-CUBE 3.0.16 でカスタマイズしています。
受注CSVに利用ポイントと加算ポイントを追加しました。

カスタマイズ方法としては、
1. dtb_csv に利用ポイントと加算ポイントを挿入
2. プログラムに処理を追加
です。
3系になってからは、標準項目の追加なら、DBに値を追加するだけで出力してくれるので非常に便利でした。

ただプラグインの場合はそのプラグインがCSVの処理を入れてない場合 1. だけでは出力できないので、
プログラム側にカスタマイズが必要でした。
そこで今回は苦戦しました。またあまり正しくない方法で取り急ぎの対応…になります。


ググってみると、
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=18139&forum=13
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=19444&forum=11
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=19318&forum=11
https://github.com/EC-CUBE/ec-cube/pull/1944
などなど、参考になりそうなトピックスがありました。


まずは、1. dtb_csv に利用ポイントと加算ポイントを挿入を実行。
SQLでサクッと行います。
INSERT INTO `dtb_csv` (`csv_id`, `csv_type`, `creator_id`, `entity_name`, `field_name`, `reference_field_name`, `disp_name`, `rank`, `enable_flg`, `create_date`, `update_date`) VALUES (NULL, '3', '1', 'Plugin\Point\Entity\Point', 'point', 'use', '利用ポイント', '', '1', '', '');
INSERT INTO `dtb_csv` (`csv_id`, `csv_type`, `creator_id`, `entity_name`, `field_name`, `reference_field_name`, `disp_name`, `rank`, `enable_flg`, `create_date`, `update_date`) VALUES (NULL, '3', '1', 'Plugin\Point\Entity\Point', 'point', 'add', '加算ポイント', '', '1', '', '');
`entity_name` は恐らく 'Plugin\Point\Entity\Point' であっていると思いますが、
`field_name` と `reference_field_name` とはダミーになります。
↑は、'Plugin\Point\Entity\Point' で定義されているファイルの中の変数を入れると思いますが、
適切なものが見当たりませんでしたので…
この辺アドバイスされたい…(>_<)


次に、2. プログラムに処理を追加
本来は新たに処理用のプラグインを作るようですが、今回は取り急ぎのため本体コードを編集します。
/src/Eccube/Controller/Admin/Order/OrderController.php が、
管理画面の受注画面をコントロールしているファイルになります。
exportOrder関数の中の、だいたい260行目に
$event = new EventArgs(
とあるので、その上に下記を追記します。
/src/Eccube/Controller/Admin/Order/OrderController.php$Customer = $Order->getCustomer();
// 会員のみ処理
if ($Customer) {
    if ($Csv->getDispName() === '利用ポイント') {
        // 利用ポイント取得
        $usePoint = $app['eccube.plugin.point.repository.point']->getLatestUsePoint($Order);
        $usePoint = abs($usePoint);
        $ExportCsvRow->setData($usePoint);
    }
    if ($Csv->getDispName() === '加算ポイント') {
        // 加算ポイント取得
        $addPoint = $app['eccube.plugin.point.repository.point']->getLatestAddPointByOrder($Order);
        $ExportCsvRow->setData($addPoint);
    }
} else {
    if ($Csv->getDispName() === '利用ポイント') {
        // $ExportCsvRow->setData(0);
    }
    if ($Csv->getDispName() === '加算ポイント') {
        // $ExportCsvRow->setData(0);
    }
}
まず会員であるかをチェックして、非会員の場合は空欄(場合によっては0を出力してもよいかも)にしています。
非会員でも加算ポイントを取得しようとするとエラーが出るので会員チェックは重要です。

次に 'eccube.plugin.point.repository.point' でポイントのリポジトリにアクセスできるので、
用意されている関数に $Order を渡すと利用ポイント取得、加算ポイント取得が取得できます。
取得できたポイントを $Csv->getDispName() が '利用ポイント' と '加算ポイント' との時に、
CSVにセットする、という感じになっています。


配送CSVも同じ作業でできました。

以上ですが、冒頭にも言いましたがこれは良い方法でないので、
参考程度が良いかと思います。

それにしてもSymfonyとSilexを勉強しないとついていけませんね...。

このページのトップヘ