Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What is going on with this article?
@haruna-nagayoshi

EC-CUBE4 独自プラグイン開発 ③今後も使えそうなTips

概要

独自プラグインの開発を通して学んだことをまとめました。
別の記事として書いた場合もあります。タイトルにピンときたら読んでみてください。

目次

EC-CUBE4 独自プラグイン開発 ①環境構築手順
EC-CUBE4 独自プラグイン開発 ②独自プラグイン開発Tips
EC-CUBE4 独自プラグイン開発 ③今後も使えそうなTips (本記事)

今後も使えそうなTips

.gitkeepと.gitignoreの違いと使い分け

空のディレクトリを維持するための、 .gitkeep と .gitignore の使い分け
PhpStormを使う都合上.gitignoreはよく使うけど、gitkeepについてはよく知らなかったので、上記記事が参考になりました。

カラーピッカーで色を選択し、#付き16進数を登録する

カラーピッカーから色を選択し、その色の#付き16進数をDBに登録・更新するという機能を管理画面側に作りました。
そのときに利用したライブラリがこちらです。
jQuery MiniColors

EC-CUBE4の管理画面はbootstrapで作られているので、とても相性がよかったです。
他のプロジェクトで似たような機能を作るときも使えそう。

サンプル

実際のコードはこんな感じ。

$('.color-picker').minicolors({
  position: 'bottom right',
  theme: 'bootstrap',
  swatches: [
    '#FFFFFF',
    '#ff0000',
    '#FFFF00',
    '#00FF00',
    '#00FFFF',
    '#0000FF',
    '#FF00FF',
    '#C0C0C0',
    '#800000',
    '#808000',
    '#008000',
    '#008080',
    '#000080',
    '#800080',
    '#808080',
    '#000000',
  ],
})
<input type="text" class="color-picker form-control" size="7">

position:入力フォームを基準としたカラーピッカーの表示位置
theme:bootstrapを利用している場合はbootstrapを指定する。そうでない場合はdefaultでよいと思います(未検証)。
swatches:カラーパレットを表示する。いくつでも、#付き16進数で指定すれば追加できます。公式ページに例があります。
image.png

TCPDFで座標を使ってPDFを出力する

EC-CUBE4ではPDFを出力するためのライブラリとして、TCPDFが使われています。(受注編集ページの納品書出力機能を参照) 「PHP PDF」で検索するとすぐ出てくるので定番のライブラリらしい。

別記事に使い方をまとめました。
TCPDFで座標を使ってPDF出力

PDF出力機能を実装したことも見たことも無かったので、勉強になった。最初はx,y座標に抵抗があったけど線や表、画像を描画するだけなら座標を使うほうが簡単だと思います。

Excelに文字と画像を書き込んでExcelとして出力する

PhpSpreadsheetでExcelを読み書きしてExcelとしてダウンロードする

PHPExcelやPhpSpreadsheetについてはたくさんの方が記事を書いているので何番煎じって感じですが...
ライブラリの使い方そのものより、ラッパークラスを作る利点を実感できたのがよかったです。
今後PhpSpreadsheetを使う機会があれば自分の記事を参照するだろうし、もし新たな機能を見つけたら追記します。

Blob型カラムに保存した画像をHTML(twig)に出力する

PHPでblob型でデータベースに保存した画像を出力する

URI Scheme Data URI schemeという概念が知れました。
今後この記事が役立つかどうかは怪しかった...ですが、次のZipダウンロードの段でもバイナリ画像を使うことになったので結果的に役立ちました。

複数のファイルをZipにまとめてダウンロード

PHPで複数ファイル(blob型のファイル含む)をZipダウンロードする方法

この記事を書くためにいろいろ調べていたら、IEでダウンロードしたファイルの名前が文字化ける現象の対処方法を偶然知れて、開発に取り込めたのでよかったです。
Zip・Excel・PDFなどファイルの種類に限らず、日本語を含むファイル名のファイルをIEでダウンロードする際には、上記記事で説明している対策が必要だと思います。

SymfonyでDQLを拡張してMysqlの関数を使えるようにする

キーワードで検索時に「半角・全角、小文字・大文字、かな・カナを区別しない」ように、照合順序を指定することを求められました。
そのため、DQLでMySQLのCOLLATE関数を利用したかったのですが、自分で拡張する必要がありました。
SymfonyでDQLを拡張してMysqlの関数を使えるようにする

エラーとその解決策をメモし、共有する

今回の私のように、周りの誰も知らないツールやライブラリを使うときは、「エラーとその解決策をメモしておく」「何か分かったら共有し合う」というのが重要でした。
とくに、序盤はエラーの解決策を忘れてしまうことが多くて自分のメモがとても役に立ちました。

Qiitaの記事を短期間にこんなに書くのは初めてですが、開発と並行して書いておくと、「たしかあの記事にリンク貼っておいたよなー」とか「このエラーの対策方法なんだっけ」ってときに記事が辞書代わりになりました。

MySQL カラムの照合順序の確認方法

# 文字コードを確認する
SHOW VARIABLES LIKE "chara%";

# UTF8に変更する
SET character_set_database=utf8;

# 照合順序を確認する
SHOW FULL COLUMNS FROM `{table_name}`;

ほとんど使わなさそう・・・。

SQLにおいて NULLNULL の比較はtrueではない

PHPなどプログラム言語上においては、「NULL===NULL」(※PHPでの厳密な比較式)はtrueです。

しかし、SQLにおいては、三値論理を用いているため、NULL同士の比較はtrueにはなりません。
また、NULLに比較演算子を適用した結果は必ず unknown というtrueでもfalseでもない値になり、NOT IN句などを使った場合に直感に反する挙動を生むことがあります。

これについては、アプリケーションの実装が粗方終わってから調べました。
後述する参考記事に記載されているSQLをまんま書いていて、実装当時この挙動を知らなくてめちゃくちゃはまりました。

SLECT * 
FROM Table1
WHERE x NOT IN (SELECT y FROM Table2);

本来は設計段階からNULLを許容することを避けるべきですが、覚えておけば悩まずにすむ場面がこれからもありそうです。

DB設計の段階においては、全力をもって NULL を追い出してください。可能な限りの列に NOT NULL制約をつけてください。

参考記事

おわり

得た知識をどこかに共有する、っていう習慣をわずかながら身に付けられました。

今後はEC-CUBE4に関連した記事を書くことはないと思います。
追記することはあるかも。

4
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
4
Help us understand the problem. What is going on with this article?