中国語サイト作成に便利な「notepad++」の設定

中国語のhtmlサイトを作るにあたって、
いつもはとにかく軽くて複数起動できて便利と感じている
TeraPadを使っているのですが、
TeraPadは中国語非対応です!

なので、テキストエディタで中国語ができて便利なツールといえば

「NotePad++」
便利に使うための設定方法は次のとおりです。

 

NotePad++の設定

 

すべてメニューバーの「設定」→「環境設定」から行います


「設定」→「環境設定」→「自動バックアップ」「現在のセッションを次回起動時に復元」外す
…なんか知らないけど、起動時に前に使用していたファイルが自動で開くので、邪魔なのでSTOP


「設定」→「環境設定」→「マルチインスタンス」「常にマルチインスタンスモードとする」
…複数ファイルを開いて見比べるときには別々のウィンドウの方が良いのでこちらをチェック


「設定」→「環境設定」→「全般設定」「最後のタブを閉じると終了する」チェック
…普通の動きはこうなので、普通のソフトに合わせます


「設定」→「環境設定」→「その他」「タイトルバーにファイル名のみ表示」チェック
…こうしておくと、Windowsのタスクバーにファイル名が表示されるので画面がごちゃごちゃしなくて便利。(その前にタスクバーの設定で「結合しない」にする必要があります)


「設定」→「環境設定」→「その他」「ファイルの状態監視」「有効」のチェックをはずす
…FTPでUPしたときに「他のファイルで開かれました~」的なメッセージが出るのが面倒なので取り

 


「設定」→「環境設定」→「その他」「URLのハイパーリンク化」チェックはずし

…外しておかないと、URL部分の編集の時に、ちょいちょいブラウザが起動しちゃうのが困るので、外しておいたほうがいい。

 


この設定でだいたいなんとかなりますが

「同じファイルを複数起動しない」の設定がナイのが困りますね…

分かり次第UPします…

 

NotePad++を使った感想

中国語の仕事でもなければ、ずっとterapadを使っていたと思います。
TeraPadは、コテコテのテキストエディタで
NotePadはVisualStudioとかのエディタに近くてプログラマ寄りです。

折り畳みができるところとか

タブの隙間とか見やすくて便利!

色も見やすくていいですね~^^

 

あと、入力中にアドバイスが出るのも
忘れっぽい私にとってはうれしいし、
打ち間違いも減るのでありがたいです!

 

でも、嫌な所は

  • 同じファイルを複数起動してしまう
  • 検索が下まで来ると上からまた検索しはじめる(VisualStudioはこのパターンだけど、嫌)
  • 同じ検索ワードが別ウィンドウ同士で共有されない(これは状況に応じて賛否両論ですがね…)

一長一短です。

でも中国語はNotePad++でないとダメなので、
TeraPad好きだけど、実務的にはNotePad推しです。

 

EC-CUBE3 表示順を日付順にする方法

そもそも必要かどうかわかりませんが

「登録した日付順にしたい」

という要望がでましたので備忘録。

 

本来の趣旨

「順番のデフォルト」を変えるということ。
元々は登録ID降順で表示されているのですが、IDを管理画面とかから修正することができないので結局、デフォルトの順番を変えることはできないってことになります。

ここでは「ID降順」ではなく「他の順」で表示させるという修正方法の説明です。

 

話の矛盾した背景

本来なら「登録降順=ID降順」なので何もしなくてもいいはずなんです。
しかし、運用として他のサイトにUPした商品を週1回10件ずつCSVでUPするということをしているので、下のようなことになってしまうのです。

なので、あえて日付降順にすることにします。

 

 

デフォルトの表示順番を修正する方法

/src/Eccube/Repository/ProductRepository.php

の165行目あたりのidソートを直します

■修正前■

} else {
if ($categoryJoin === false) {
$qb
->leftJoin(‘p.ProductCategories’, ‘pct’)
->leftJoin(‘pct.Category’, ‘c’);
}
$qb
->addOrderBy(‘p.id’, ‘DESC’);
}

return $qb;
}

/**
* get query builder.
*
* @param array $searchData
* @return \Doctrine\ORM\QueryBuilder

 

 

■修正後■

} else {
if ($categoryJoin === false) {
$qb
->leftJoin(‘p.ProductCategories’, ‘pct’)
->leftJoin(‘pct.Category’, ‘c’);
}
$qb
->addOrderBy(‘p.create_date’, ‘DESC’);
}

return $qb;
}

/**
* get query builder.
*
* @param array $searchData
* @return \Doctrine\ORM\QueryBuilder

 

ここではcreate_dateで回していますが、
このソースを見ていくと

cc1.rank
p.price02_max

とかもあるので、いろいろな値を入れてカスタマイズすることができそうです。

 

 

「->addOrderBy(」とかって簡単にSQLの追加できるのが、ドクトリンのいいところだよなぁ~(^ー^)

ドクトリン?スマーティー?わからんけど。

WordPress Jetpack SNSボタンを大きくする

 

「スマホで見ると小さい!」とのお嘆きの貴兄に・・・

特に自作テンプレだと小さくなるので

使用しているCSSに次を追加するとOKです

 

/* SNSを大きく */
.sd-social-icon .sd-content ul a:before,
.sd-social-text .sd-content ul a:before,
.sd-content ul div.option.option-smart-off a:before,
.sd-social-icon-text .sd-content a:before {
font-size:50px !important;
}

/*間隔を広く */

.sd-social-icon .sd-content li{
margin-left:20px !important;
}

 

スマホの時だけ…というなら
@media screen and (max-device-width: 480px) {

で囲ってやればいいかなぁ

 

WordPress(コピペで使える)データベースからIDを指定した記事の内容を取得する


スイーツ作って待っててくれる弟欲しいなぁ~(>~<)

表題の通りで「WordPressで使用しているデータベースからSQLを使って指定IDのデータを取得する方法」です。

普通だったらget_posts()を使います

$args = array( ‘ID’ => 1234);
$tmp_post = get_posts($args );

で、済むことですが、使えない場合の時のために備忘録。

「使えない場合」がポイントなので、それは後述します。

 

データを取得するコード

以下のコードで$oya_postの配列の中にキーでメタ情報を入れて配列化します。

$tmp_post -> ID は $oya_post[‘ID’]
$tmp_post -> post_title は $oya_post[‘post_title ‘]
女神族の記憶 は 悪魔族の記憶へ

となります。

以下の赤い部分は適時修正してください。
取得結果は最後のprint_rで出しています。

 

■コードです■

$parents_table_prefix = “wp4_“;
$parents_id = “12345“;

//メイン情報の取得
$sql = “SELECT * FROM wp_posts WHERE ID ='” . $parents_id . “‘”;
$sql = str_replace(“wp_”, $parents_table_prefix ,$sql);
$draft_page = $wpdb->get_results($sql);
$oyadata_posts = $draft_page[0];

//詳細情報の取得
$sql = “SELECT * FROM wp_postmeta WHERE post_id ='” . $parents_id . “‘ AND meta_key Not Like ‘\_%'”;
$sql = str_replace(“wp_”, $parents_table_prefix ,$sql);
$draft_page = $wpdb->get_results($sql);
foreach($draft_page as $data){
$oyadata_postmeta[$data -> meta_key] = $data -> meta_value;
}

//カテゴリの取得
$sql = “SELECT wp_terms.name, wp_terms.slug “;
$sql .= “FROM wp_term_relationships INNER JOIN wp_terms ON wp_term_relationships.term_taxonomy_id = wp_terms.term_id “;
$sql .= “WHERE wp_term_relationships.object_id='” . $parents_id . “‘ “;
$sql .= “ORDER BY wp_terms.term_id”;
$sql = str_replace(“wp_”, $parents_table_prefix ,$sql);
$draft_page = $wpdb->get_results($sql);
$oyadata_category = $draft_page;

//カテゴリの取得
$sql = “SELECT wp_terms.name, wp_terms.slug, wp_terms.term_id “;
$sql .= “FROM (wp_term_relationships INNER JOIN wp_terms ON wp_term_relationships.term_taxonomy_id = wp_terms.term_id) INNER JOIN wp_term_taxonomy ON wp_terms.term_id = wp_term_taxonomy.term_id “;
$sql .= “WHERE wp_term_relationships.object_id='” . $parents_id . “‘ AND wp_term_taxonomy.taxonomy=’category’ “;
$sql .= “ORDER BY wp_terms.term_id;”;
$sql = str_replace(“wp_”, $parents_table_prefix ,$sql);
$draft_page = $wpdb->get_results($sql);
$oyadata_category = $draft_page;

//タブの取得
$sql = “SELECT wp_terms.name, wp_terms.slug, wp_terms.term_id “;
$sql .= “FROM (wp_term_relationships INNER JOIN wp_terms ON wp_term_relationships.term_taxonomy_id = wp_terms.term_id) INNER JOIN wp_term_taxonomy ON wp_terms.term_id = wp_term_taxonomy.term_id “;
$sql .= “WHERE wp_term_relationships.object_id='” . $parents_id . “‘ AND wp_term_taxonomy.taxonomy=’post_tag’ “;
$sql .= “ORDER BY wp_terms.term_id;”;
$sql = str_replace(“wp_”, $parents_table_prefix ,$sql);

$draft_page = $wpdb->get_results($sql);
$oyadata_tag = $draft_page;

unset($draft_page);

//以降の処理で汎用性を持たせるためにオブジェクトを連想配列にする
$ary_oyadata_posts = (array)$oyadata_posts;
$oya_post = $ary_oyadata_posts;
unset($oyadata_posts);

$oya_post = array_merge($oya_post , $oyadata_postmeta);
unset($oyadata_postmeta);

$ary_oyadata_category = (array)$oyadata_category;
$oya_post[‘category’] = $ary_oyadata_category;
unset($oyadata_category);

$ary_oyadata_tag = (array)$oyadata_tag;
$oya_post[‘tag’] = $ary_oyadata_tag;
unset($oyadata_tag);


//内容の確認

print_r($oya_post);

 

 

get_posts()が使えない場合とは?

同じデータベース内にあるWordPressの記事情報を取得する

第一階層でwpサイトを作ります。
第2階層で全く別の動きのwpを使いたいとします。

そこで、こんな感じの構成になって、実質3つのWorPressが動いている感じになります。

 

 

ただ、動くだけならいいのですが、
「第2階層のcookingが第一階層の記事をID指定して使いたい」
とか
「cookingがgameの内容をID指定して取得したい」
というときに、ほかの階層の
require_once(“./wp-load.php”);
を使うと正常に動作することができません。

同じデータベース内にあるWordPressの記事情報を取得するというときに、
これが結構便利になります。

 

Wp以外からの参照の場合

WordPressとEC-CUBEを同居させたりしたときなどに、SQLで読み込む際に上記SQLが使えます。

WordPress以外のphpからの場合には
$wpdb->get_results()ではなく、きちんとDBにアクセスするのが注意点です。

でも、EC-CUBEとかなら普通にrequire_once(“./wp-load.php”);できるか…

 

もしくは「require_once(“./wp-load.php”);なんて使わん!」という方や、
私みたいなゴリゴリ修正の方が得意な方だったら参考になるかと思います…

 

 

 

 

Javascript 無理にmouseoverを発火させる

ページ表示の時に、IDで指定したアイテムのマウスオーバーのイベントを実行する。
備忘録。
(JavaScript一族は苦手なので汚いです…)

元ネタはこちらです:https://qiita.com/ryounagaoka/items/a48d3a4c4faf78a99ae5

 


 

<script type=”text/javascript”>

//「show_pic_first」というIDのマウスオーバーを実行する
window.onload = function() {
triggerEvent(document.getElementById(“show_pic_first”), ‘mouseover’);
}

function triggerEvent(element, event) {
// IE以外のブラウザ用
if (document.createEvent) {
var evt = document.createEvent(“HTMLEvents”);
evt.initEvent(event, true, true );
return element.dispatchEvent(evt);

// IEブラウザの場合
} else {
var evt = document.createEventObject();
return element.fireEvent(“on”+event, evt)
}
}
</script>

EC-CUBE3 「予約」「入荷待ち」に対応させる方法

またしても、プラグインを使わないでゴリゴリ行く系です。
今回はphpを使わないで管理画面からできるので
結構、楽かと思います。

 

ここで対応する動作

  1. 「手作り巾着」を売るとします。
  2. 在庫は5個
  3. 6個目からは「入荷次第発送で予約」にします

仕組み

  1. 【作業①】在庫を105個でUP
  2. 【作業②】在庫が100個になったら「カートに入れる」ボタンを「入荷次第発送で予約」にする

【作業①】商品を追加します

この時、在庫数を105個にします

 

 

【作業②】在庫が100個になったらの動作

「Product.stock_min」が現在の在庫らしいので
100を含んでそれ以下の時は「入荷次第発送で予約」の文字にします。

 

管理画面から内容をいじります。

「コンテンツ管理」→「ページ管理」→「商品詳細ページ」app/template/default/Product/detail.twig
のファイルを修正します。

228行目あたりの「{# カートボタン #}」からちょっと下の(下に記載の赤い部分)を修正します

 

■元データ■

{# カートボタン #}
<div id=”detail_cart_box__button_area” class=”btn_area”>
<ul id=”detail_cart_box__insert_button” class=”row”>
<li class=”col-xs-12 col-sm-8″><button type=”submit” id=”add-cart” class=”btn btn-primary btn-block prevention-btn prevention-mask”>カートに入れる</button></li>
</ul>

 

■修正後データ■

{# カートボタン #}
<div id=”detail_cart_box__button_area” class=”btn_area”>
<ul id=”detail_cart_box__insert_button” class=”row”>

{% if Product.stock_min <= 100 %}
<li class=”col-xs-12 col-sm-8″><button type=”submit” id=”add-cart” class=”btn btn-primary btn-block prevention-btn prevention-mask”>入荷次第発送で予約</button></li>

{% else %}
<li class=”col-xs-12 col-sm-8″><button type=”submit” id=”add-cart” class=”btn btn-primary btn-block prevention-btn prevention-mask”>カートに入れる</button></li>

{%endif %}

</ul>

 

すると、
在庫数が105~101は「カートに入れる」が
在庫数100~1は「入荷次第発送で予約」に代わります。

 

実際の動き

在庫105個~101の時

 

コツコツ購入をしていって在庫が100になったとき

ここでは文字だけが変わっていますが、cssとかをいじって色を変えるとかもいいと思います。

その時はcssで「!important;」を入れないと、なかなか上手く表示されないので注意です。

 

 

 

該当商品のみこの方法にする場合

一番簡単な方法

在庫数の設定を1000とか10000とか、ほかの商品とは格別に違う在庫数にして、処理の分岐をその数量にする方法が手っ取り早いです。

 

ちょっと面倒だけど、あと楽な方法

カテゴリで分割します。
たとえばカテゴリで「ハンドメイド」コーナーを作ります。

一定在庫を切ったら「予約」にする商品は、商品登録のときに「ハンドメイド」のカテゴリも選択するようにします。

上記「■修正後データ■」の部分で赤い文字上記と同じで、青い部分を追加します。

(*******)の部分にはカテゴリIDが7なら
{% if Product.belongsToCategory(7) %}
となります。

 

■コード1■

{% if Product.belongsToCategory(******) %}
{% if Product.stock_min <= 100 %}
<li class=”col-xs-12 col-sm-8″><button type=”submit” id=”add-cart” class=”btn btn-primary btn-block prevention-btn prevention-mask”>入荷次第発送で予約</button></li>
{% else %}
<li class=”col-xs-12 col-sm-8″><button type=”submit” id=”add-cart” class=”btn btn-primary btn-block prevention-btn prevention-mask”>カートに入れる</button></li>
{%endif %}
{% else %}
<li class=”col-xs-12 col-sm-8″><button type=”submit” id=”add-cart” class=”btn btn-primary btn-block prevention-btn prevention-mask”>カートに入れる</button></li>

{%endif %}

 

※カテゴリ番号の調べ方

管理画面の「商品管理」「カテゴリ編集」でカテゴリ名のところにマウスを合わせると、下の方に/category/* という感じで番号がでます。

ここの例だと「ハンドメイド」は「7」となります。

 

面倒だけど、特定の商品だけを予約タイプにする方法

上のカテゴリ分けと同じ感じで、商品を登録する際に使用する商品コードで分岐をいれます。

この方法だと、また同じような予約商品を追加したときに、このプログラム部分も修正しないといけないので面倒ですが、クライアントが「どうしてもカテゴリは嫌!」って言いだしたら対応するしかないでしょう…

(config.ymlに入れるっていう方法もあるけど、それはまた別の知識が必要なので他の時に…)

 

■コード1■の

{% if Product.belongsToCategory(******) %}

の部分を

{% if Product.code_min == ‘****’ %}

に変更します

 

※商品コードではなくIDを使用するときには

{% if Product.id == ‘3’ %}

となります。

 

おまけ:商品IDの調べ方

商品ページを開いて表示されるURLの一番最後の数字です。

この場合は「3」ですね。

 

 

EC-CUBE3 「NoSuchPropertyException~」エラーでツボった

EC-CUBE3で入力フォームに項目を追加して、管理画面から入力フォームにアクセスをしたときにツボったエラーです。
同じ人がいるかもしれないので参考にしてください。

NoSuchPropertyException in PropertyAccessor.php line 486:
Neither the property “

のエラーに関しての話です。

 

 

エラーメッセージ

NoSuchPropertyException in PropertyAccessor.php line 486:
Neither the property “message_cur” nor one of the methods “getMessageCur()”, “messageCur()”, “isMessageCur()”, “hasMessageCur()”, “__get()” exist and have public access in class “Eccube\Entity\Order”.

 

 

エラーの画面

こちらは/index_dev.php/を使用したエラー画面です。
エラー画面の出力の仕方はコチラの

「EC-CUBE3 エラーの場所がわかりにくいので解りやすくデバッグモードにする方法」

を参考にしてください。

 

速攻解決策

「message_cur」という名前のフォームを追加したので、
src/Eccube/Entity/内の関数名も
public function setMessage_cur($message_cur)

public function getMessage_cur()
にしていました。

この関数はそのままにしておいて
同じ内容の関数で_を外した関数を追加したら直りました。

public function setMessagecur($message_cur)

public function getMessagecur()

 

こんな感じです

 

詳細

何をしようとしたのか

注文画面で「message_cur」という項目をつけようとしました。
なので、既存の「message」に関する記述をコピペして、「message」を「message_cur」と変えてソースを追加しました。

その時、関数名も同じようにsetMessage()のコピペをsetMessage_cur()としてしまった感じです。

詳しくはコチラの内容を行った状況です
EC-CUBE3 注文画面に項目を追加する

注文に関する部分なので、該当ソースの場所は
/src/Eccube/Entity/Order.php
です。

 

なぜ2つの関数を用意したのか

【public function setMessage_cur(】
のほうは、お客様が注文をしたときに呼び出されていました。

【public function setMessagecur(】
のほうは管理画面からの操作で呼び出されていました。

細かく王時間もないので、2つの関数を用意して対応という感じです。

 

結局のところ、納期の問題もありSmartyとか勉強する余裕がないので
詳しいことはわかりませんが、
勉強するならフォーラムの中の

mapped オプションとは?

が、とても有効な内容になっている感じですので、参考にしてみて下さい。

 

 

 

 

 

 

 

 

 

 

EC-CUBE3 カスタマイズの困ったところ

EC-CUBE3はまだまだカスタマイズがめんどくさい感じがします。
導入前に検討している場合はご参考に。

でもまぁ、ここまで良質なECモノってないので、
やむを得ない感もありますので、あきらめたり、あるあるな感じで見てください。

EC-CUBE3の嫌なあるあるデメリットポイント

  1. EC-CUBE2と全く互換性がない
  2. カスタマイズ方法を検索して見つけたらEC-CUBE2の物だった
  3. 便利な無料プラグインを見つけたと思ったらEC-CUBE2だった
  4. 同じ機能の3向けプラグインは高い
  5. 公式フォーラムですらEC-CUBE2とEC-CUBE3がしっかり分かれていない
  6. 情報の掲載年が2016以降がEC-CUBE3の情報の可能性が高い
  7. 「\user_data\」の文字があったらEC-CUBE2の情報
  8. SmartyとかtwigとかDoctrineとか分かりにくい
  9. SmartyとかDoctrineとか勉強する時間なんて納期的に無い
  10. SmartyとかtwigとかDoctrineとか勉強したくない
  11. EC-CUBE3カスタマイズで稼ぐくらいの気合がないとソースが分かりにくい
  12. ドキュメントが少ない
  13. オブジェクト指向と行っても、ここまで組まれていたら手が出しにくい
  14. ソースのタブがスペース!
  15. デバッグモードがわかりやすいようでわかりにくい
  16. 過去バージョンが細かく再配布されていないので、自分で持っておかないとヤバイ

 

 

EC-CUBE3のうれしいあるあるメリット

  1. 軽い
  2. ロリポップとかワンクリックで入れられる
  3. 全体で必要な機能が入っているので、細かなカスタマイズを考えなければ超便利
  4. SEOにも強い
  5. スマホ・タブレット・PCで使えるレスポンシブデザイン
  6. SmartyとかtwigとかDoctrineとか慣れると便利
  7. 配列の定義で最後に「,」がついているので追加エラーしにくい
    array(‘a’ , ‘B’ , ‘c’ );
    じゃなくて
    array(‘a’ , ‘B’ , ‘c’ , );
    ってなっているのが、ちょっとうれしい気遣い

 

 

カスタマイズの練習に

スマーティ~とかドクトリンとか…
他の請負がてらにEC-CUBE3の依頼がちょっと入り込んできて
時間もノウハウもなくて即興で勉強するには

EC-CUBE3 住所に項目を追加する方法

EC-CUBE3 注文画面に項目を追加する」←こっちのが短くて簡単

をやってみて下さい。
なんとなく、こんな感じかな~ってのがつかめると思います。

よければC#ですが
ファイルの中の文字を探すツールの作り方
のアプリを作ると、直したい場所を探すことができて便利だとおもいます。

 

 

 

【参考までに私の近況】
EC-CUBE3はぜんぜんわからないで、BtoB社内ツール専門のアラフィフ&ほぼ退役PGです。
片手間にEC-CUBE3の仕事が入りこんできたので悪戦苦闘しています。

納期も短いし、スポットなので初歩からSmartyとか勉強できませんので
体当たりでゴリゴリと改造しています。

 

 

EC-CUBE3 注文画面に項目を追加する

「支払方法」とか「メッセージ」を入力する「注文画面」に項目を追加します。
例えば「包装あり・なし」とか「カタログ希望」とかに使えます。
今回は「通貨」を入れ込んでみたサンプル例です。

いつも通りにプラグインタイプではなく、ソースをいじる感じで行きます。

※管理画面でのオーダー情報の変更は、今回使用していないのでデバッグしていません。

 

ゴリゴリの注文項目の追加の仕方

EC-CUBE3注文項目追加の仕組み

EC-CUBE3 住所に項目を追加する方法」と同じような考えで
注文フォームの「message」部分をコピペして「message_cur」という名前の項目を追加してみます。

ただ、「message」っていう名前が変数として、いろいろな所で使用されているので検索ツールを使っても場所が分かりにくいのが難点です。

 

ざっくりとした手順

  1. データベースにaddr03を追加
  2. プログラムの修正
  3. レイアウトの修正

 

1.データベースにmessage_curを追加します

●MYSQLを開いて実行します

ALTER TABLE `dtb_order` ADD `message_cur` LONGTEXT NULL ;

 

 

2.プログラムの修正

●次のソースの中の「message」を検索して、その部分をコピペして「message_cur」にしたものを貼り付けていきます。
「message」という変数のところもあったりするので、こればっかりは勘とか雰囲気で対応してみて下さい。
追記で注意事項:「message_cur」というような「_」のついた名前は良くないらしい。

 

\src\Eccube\Service\ShoppingService.php
\src\Eccube\Resource\doctrine\Eccube.Entity.Order.dcm.yml
\src\Eccube\Form\Type\ShoppingType.php
\src\Eccube\Entity\Order.php

※↑Order.phpについてはコチラを参考にして関数名に気を付けてください。
EC-CUBE3 「NoSuchPropertyException~」エラーでツボった

 

 

2-追記:フォームのスタイルをテキストとかセレクトにする

入力タイプを変えることができます。

\src\Eccube\Form\Type\ShoppingType.php

の場所で次のように設定します。

 

【テキストエリアタイプの場合】 <textarea>タグを使用

->add(‘message_cur’, ‘textarea’, array(
‘required’ => false,
‘data’ => $message,
‘constraints’ => array(
new Assert\Length(array(‘min’ => 0, ‘max’ => 3000))),
))

 

【リストの場合】 <select>タグを使用

->add(‘message_cur’, ‘choice’, array(
‘choices’ => array(‘Please select a currency’=>’Please select a currency’,’JPY’=>’JPY’,’USD’=>’USD’,’EUR’=>’EUR’,’OTHERS’=>’OTHERS’)
))

 

【オプションボタンの場合】<option>タグ

奥が深そうなので諦めました…
リストのスタイルでごまかすとか…(>_<)

 

 

 

3.レイアウトを修正します

管理画面からでも良いですし、ソースをいじっても良いのでtwigファイルのレイアウトを修正します。

※「src\Eccube\Resource\template」は「app」に入っていることがあるので、そちらを優先します。

\src\Eccube\Resource\template\default\Mail\order.twig
\app\template\default\Shopping\index.twig
\app\template\default\Mypage\history.twig

 

 

↓お問い合わせ(Inquiry field)の上に「Currency」の名前で追加するとこんな感じになります

\app\template\default\Shopping/index.twig

<h2 class=”heading02″>Currency</h2>
{{ form_widget(form.message_cur) }}
{{ form_errors(form.message_cur) }}
<h2 class=”heading02″>お問い合わせ欄</h2>

 

4.キャッシュを削除します

何がどうつながっているのかわからないので、全部にチェックを入れてキャッシュを削除します。

 

 

まず、お客様周りの動作が完成

とりあえずここまでで購入に関する部分は完成します。

  1. お客様の購入の際に新項目の操作が可能に
  2. 注文メールに新項目の表示(自動配信、管理者宛メール)
  3. お客様がログインして自分で注文履歴を見る際に新項目が表示

問題になるのが、次の管理画面での新項目の操作です。

実際に管理画面で「支払い方法」などを管理者が修正をすると、手数料等の変更は手計算でするようになったりするので、ここで細かな修正はしないで、運営の方で「ショップ用メモ欄」などに記載しての対応が望まれます。

 

 

ソースのダウンロード

今回修正をかけたtwig以外のファイルをUPしましたので参考にしてみて下さい。

「message_cur」と「messagevur」の部分が追加したところです。

ひょっとしたらそのほかの部分も更新しているので、これをUPするとサイトが確実に壊れると思いますので参考で使用してください。

サンプルのダウンロードsrc

 

 

管理画面の方で修正ができるようにする方法

実際、使用しないで運営でカバーするのでここまでは作りこみませんでした。
おそらく新項目をテキストエリアタイプで作るとすんなりいくかもしれませんが、私のほうではSelectタイプで作ったので表示がめんどくさそうです。

ちょっと感じた部分で、直さないといけなそうなソースはこのあたりかと感じます

 

\src\Eccube\Form\Type\Admin\OrderType.php
\src\Eccube\Resource\template\admin\Order\edit.twig

 

ここを直すと、管理画面で入力をすることができるようになります。
(エラーが出るならこちらも参考に「EC-CUBE3 「NoSuchPropertyException~」エラーでツボった」)

しかし、なぜか「Select」で入れて炒るのにテキストエリアになります。
気にしなくてもいいならこれでもいいかも。

実際には手入力の方が汎用性があるので、これはこれで…良しとして
クライアントが突っ込んできたら
(^^)「変更をした履歴や詳細が入力できるようにテキストエリアにしています」
といってごまかす…

もしくは表示させない。

 

 

 

 

EC-CUBE3 メールが長いので短くしたい

注文確認メールと管理人に届くメール。

これを
「印刷したときに2枚になるので、1枚に収まるくらいコンパクトにして欲しい」

という要望がありましたので修正です。

 

特に通販だと7年くらい注文受付の紙を保持しておいた方が良いという話なので
おそらく他の会社でも必要だと思いますので備忘録。

 

メールを短くする方法

注文メールはお客様に届くものと管理人に届くものが同じなので
「様」とかをはしょらないように注意が必要です。

1.メールテンプレートを修正します

\src\Eccube\Resource\template\default\Mail\order.twig

例によって\app\の方に入っている場合もありますので、
\app\に同名のファイルがあったら、そっちの修正を優先してください。

 

【例1】

FAXを()閉じにしてTELの横にしたり

 

【例2】

************************************************
 ご注文商品明細
************************************************

******ご注文商品明細******

にしたり

 

【例3】

時間指定値引き送料無料だったらその項目も切っちゃいます。

 

【例4】

下の方の

{% for ShipmentItem in Shipping.ShipmentItems %}
商品コード: {{ ShipmentItem.product_code }}
商品名: {{ ShipmentItem.product_name }} {{ ShipmentItem.classcategory_name1 }} {{ ShipmentItem.classcategory_name2 }}
数量:{{ ShipmentItem.quantity|number_format }}

{% endfor %}

の部分は上の金額が出ているヤツとかぶっているからいらなさそうです。

 

2.キャッシュの削除

例によって「管理画面」で「コンテンツ管理」「キャッシュ管理」で全部を削除します。

(なぜかtwigだけだとうまくいかなかったので…)

 

3.フッターなども短く

「管理画面」で「設定」「基本情報設定」「メール設定」でヘッダーやフッターの文章を短くします

 

 

 

4.検証

注文をしてみて、メールを受信して、印刷をするのは紙がもったいないから「印刷プレビュー」とか「XPS」や「PDF」にプリントアウトして確認