EC-CUBEは4.2で絵文字に対応していますが、EC-CUBEバージョンの4.0、4.1は絵文字に対応していませんでした。
すでに運用しているサイトで一部の項目を絵文字対応にする方法をご紹介します。
絵文字を登録できるようにするにはデータベースのカラムをutf8mb4に対応させる必要があります。
下記の修正はまず検証環境で確認を行い、さらに必ずデータベースのバックアップを取った上で行ってください。
また、この記事の内容はクラウド版EC-CUBEでは対応が難しいと思いますのでご了承ください。
それでは、注文する時にお客様のメッセージに絵文字を記入できるようにしていくことを目標にカスタマイズを行っていきます。
1. app/config/eccube/packages/doctrine.yamlの修正
charset: utf8 となっている部分を下記のコードに変更します。
charset: utf8mb4 default_table_options: charset: utf8mb4 collate: utf8mb4_general_ci
2. 変更したいカラムへの文字エンコーディングのオプションをつける
エンティティクラスで@Orm\Columnのオプションに”charset”: “utf8mb4”, “collation”: “utf8mb4_bin”を設定します。
また、文字制限があるとエラーになることがあるので、typeがstringとなっている場合はtextなどに変更しましょう。
/** * @var string|null * * @ORM\Column(name="message", type="text", nullable=true, options={"charset": "utf8mb4", "collation": "utf8mb4_bin"}) */ private $message;
3. 変更をデータベースに反映させる
php bin/console eccube:schema:update –dump-sql –force を使用するのは危険だと思っています。(意図しない変更が起きないとも限らない)
次のようにSQLを直接実行する方が良いと思います。
ALTER TABLE dtb_order CHANGE message message LONGTEXT CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_bin`;
4. 動作確認
これにてカスタマイズは終了です。カートから注文を入れてみるとお問い合わせ欄に絵文字が入力できるようになっています。
EC-CUBEカスタマイズに関するお問い合わせはこちら
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。