ECCUBE3 独自パラメタで検索→リスト表示の時にサブタイトルにパラメタ名を反映させる

前提条件いろいろ割愛しますが、DBに当該データが入っていて、Doctrineファイルにパラメタと名前が定義してあり、Formビルダー各パラメタが構築されてるのが前提です。

以下ファイルを修正。

/src/Eccube/Controller/ProductController.php

基本、$searchDataに値が入っていれば、getName->()でとれます。

 

ECCUBE3の商品一覧の並び順に「お気に入り数順」を追加する

  • まず最初に、並び順テーブル(mtb_product_list_order_by)に新しく「お気に入り数順」を追加

(一例)
・id:4
・name:お気に入り数順(任意)
・rank:3

※optionの順番を前に持ってきたければrankの番号を減らす

 

  • /src/Eccube/Resource/config/constant.yml.dist に追加したorderbyパラメタの番号(4)に名前を定義する

参考)
https://github.com/EC-CUBE/ec-cube/issues/2703

 

  • /src/Eccube/Repository/ProductRepository.php に、SQLを定義する

※クエリビルダーを使用する際、JOINするテーブル名やカラム名はdoctrineの定義に基づくので、 /src/Eccube/Resource/doctrine/Eccube.Entity.CustomerFavoriteProduct.dcm.ymlなどの中を確認して、同じ名前にする。

ちなみに、上記は、生のSQLとしては下記のような感じとなる。多分。

 

参考)
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=17472&forum=10
https://ameblo.jp/withathena/entry-12173872626.html
https://umebius.com/eccube/sort_admin_product_master/
http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/query-builder.html
https://teratail.com/questions/30434
https://teratail.com/questions/43888
http://www.aiship.jp/knowhow/archives/25107
http://d.hatena.ne.jp/Fivestar/20100423/1272013815

 

以上で、商品一覧ページのドロップダウンに「お気に入り数順」が追加され、選択するとお気に入りに追加された数の多い商品順にソートされる。

ECCUBE3でカテゴリに補足情報を追加する

EC-CUBE 3.0.16
MySQL 5.6.19
PHP 5.6.36

例として、あるカテゴリに「関連A」(assoc_A)という補足情報を追加する場合。

1. テーブルへのカラム追加
dtb_categoryテーブルへ”assoc_A”という名前のカラムをtinyintタイプで追加。また、NULLを許可にする。

2. エンティティファイルに、セッターゲッター追加
/src/Eccube/Entity/Category.php

以下のように追記。

 

3. データベース定義ファイルへカラム追加
/src/Eccube/Resource/doctrine/Eccube.Entity.Category.dcm.yml

fields一覧にassoc_Aの項目を追加。データベースとエンティティクラスを接続するのがdcm.yml(Doctrineマッピングファイル)。これにより、Categoryエンティティのassoc_Aとdtb_categoryのassoc_Aカラムが接続される。

※データ型がint,smallint,tinyintでも、Formでcheckboxタイプを使う予定のため( 論理型(値が1か0のタイプ)と認識されるので)ブーリアンタイプにしておく。

ECCUBE3で使用できるtype一覧は過去記事参照

 

4. フォーム定義ファイルへの項目追加
/src/Eccube/Form/Type/Admin/CategoryType.php

下記のように、管理画面の商品登録フォームへ定義を追加。

 

5. 管理画面(カテゴリ登録画面)へフォーム表示
/app/template/admin/Product/category.twig

フォームを表示したい場所に下記のように記述。

 

6. 商品詳細ページへの表示
/app/template/default/Product/detail.twig

関連付けした情報を使って詳細ページでごにょごにょするには、多少の工夫が必要。これについては別途書く予定。

とりあえず以上。

 

参考URL)

 

 

WHERE句でキーとなるカラムに値が無ければ別のカラムの値を採用する

SELECTするとき、WHERE句で特定の日付の値を条件として使いたいが、その値が存在しなかったり期待するものと違ったりした時、別の日付をキーにする。

例えば以下は、base_dateカラムの日付をキーにしたいが、base_dateの値がNULLだったりMySQLのデフォルト値(0000-00-00)だったりすると、結果がおかしくなってしまう。

なので、このbase_dateの値が期待するものと違えば、代替として、entryの値を使用したい。

CASEを使って対応。

 

NULLだけを回避するのであれば、COALESCEを使えばいいっぽい。試してないが書くならこんな感じかしら。

 

参考サイト)

 

phpmyadminで大きなサイズのファイルをインポートする

.sqlファイルをインポートするときなど、制限があるとアップロードが途中で止まってしまう。

エラー:「アップロードしようとしたファイルが大きすぎるようです。…」など。

解決法としては、

  • エクスポート時にファイルを圧縮しておく。
  • Bigdumpを利用する。
  • sshで接続し、SCP転送する。

などがあるが、VPSやクラウド環境などの場合は、php.iniを編集した方が早いかも。

編集後、このままだと反映されないので、WEBサーバを再起動する必要があります。

以上。

参考サイト)

 

EC-CUBE(2系)で管理者権限の設定

動作確認はEC-CUBE2.13.2。結構古いけど。

例えば一部のメンバーは、商品管理メニューしか操作できないようにしたい時とか。

    1. まず「システム設定」→「マスターデータ設定」から「mtb_authority」を選択。
    2. 「追加のデータ」欄に、IDを指定(例えば2)し、値に権限名(例えば「商品管理者」)を入力。→「この内容で登録する」
    3. 「システム設定」→「マスターデータ設定」から「mtb_permission」を選択。
    4. 「基本情報管理」以下にアクセスできなくする場合、「追加のデータ」欄に、ID「/admin/basis/」、値「1」を設定。(この値が、ログインしたメンバーのID以下ならアクセス可能になる。ここを「2」にすれば追加した商品管理者もアクセス可能になる。)
    5. 他にもアクセス不可にしたいページがあれば、同様に「mtb_permission」に追加する。
    6. 「/data/class/SC_Session.php」を編集。
    7. 「/data/class/pages/error/LC_Page_Error_DispError.php」を編集。
    8.  「/data/Smarty/templates/admin/login_error.tpl」を編集。

以上。

  1. さらにメニューを非表示にしたい場合は、こちらなどを参照。

 

参考URL)

GROUP BYしたカラム以外のカラムで優先順位を決める方法

GROUP BY で指定したカラムの値が、同じ値の行はグループ化されるが、GROUP BY で指定していないカラムの値は、どの行の値を優先させるか、通常は決めることができない。

例えば、下記のようなSQLだと、得られるidの優先順位は指定できない。(実際、昇順で最初のものがくる場合が多いが、保証はされない)

 

この場合は、副問い合わせで対応するのが一般的なやり方らしい。

 

ちなみにWHERE句で絞る場合も、副問い合わせの中で絞らないとダメ。なので、下記の場合は失敗する。

 

参考サイト)

CentOS7にmysqlインストール

1.mariaDBの削除

CentOS7にはデフォルトで競合するmariaDBが入っているので削除する

・mariaDBのインストール確認

・mariaDBとデータ削除

 

2.MySQL5.7のインストール

・公式リポジトリ追加

本記事執筆時では、mysql57-community-release-el7-11.noarch.rpmが最新 のよう。

・インストール

・確認する

・自動起動設定

・起動する

 

3.mysqlに入る

・初期パスワード確認

・******の部分がパスワード。このパスワードを使って入る。

・SQL発行の前に、新しいパスワードを設定する必要があるので設定する。

・ちなみにパスワードの強度が低いと怒られて変更できない。

・SQL発行テスト

これでOK。

 

参考URL)

 

MySQLで最後にINSERTしたAutoIncrementのidを取得する

生のSQLで取得する場合は、

で取得できます。

DBIを使用している場合は、以下のようにステートメントハンドルから取得できます。

 

参考URL)

 

CentOS7でファイアウォールの設定

  • サービス状態確認

※”…/firewalld.service; disabled;”になっているので自動起動無効

  • 自動起動するように設定

  • サービス起動

  • 現在の有効な設定を確認

  • sshの設定を追加(22番ポートを許可)

  • mysqlの設定を追加(3306番ポートを許可)

  • 削除する場合

  • 設定一覧を表示(必要に応じて)

  • 再度設定を確認

※mysqlとsshが追加された

 

  • ちなみにiptables使う場合

インストール方法は割愛
※firewalldと併用でないのでiptablesを使う場合はfirewalldは停止する

 

参考URL)