Smartyのtruncateをマルチバイト対応で
Smartyのtruncate修飾子はマルチバイト対応されていないので文字化けしちゃう。 独自にtruncateの拡張をするまでもなく、PHP自身が持っているmb_strimwidthを使えばOK でも、すぐに忘れちゃうのでメモ {$contents|mb_strimwidth:0:80:"..."} 変数にHTMLタグが入ってるなら、それも除去...
View ArticleEC-CUBE 2系で商品を沢山購入すると住所情報が欠落する
以外と有名な問題なのですが、カートに沢山の商品を入れて注文すると、受注メールは送信されてエラーも出ないのに「送料がゼロ円になる」とか「管理画面に受注データが表示されない」という障害が起きます。 これは、セッション情報を保存するDBテーブルが text型で取られているため、65,535バイト(MySQLの場合)以上のセッション情報を保存しようとすると後ろの方のデータが欠落するためです。 CREATE...
View ArticleEC-CUBE 2系で商品情報をCSVで更新するとき関連商品情報が削除される
CSVアップロードして商品データを更新する事ができるのですが、そのCSVに「関連商品」の列が無いと、CSVをアップロードしたときにその商品に今まで登録されていた関連商品の内容が全て削除されてしまいます。...
View ArticleEC-CUBE 2系でShift_JISに存在しない文字が含まれた受注データがあると、その受注内容が受注CSVからまるごと欠落する
受注データの備考などにお客様が入力した文章にShift_JISで表現できない文字や記号がまざっていると、受注CSVをダウンロードしたときにその受注データがそっくり欠落してしまいます。 これはCSVデータをShift_JISに変換するときのiconvのパラメータがデフォルトの「不正な文字があったらデータを捨てる」指定になっているからです。...
View ArticleEC-CUBE 2系で注文を受けた商品の規格を後で削除すると、管理画面で受注内容を編集できなくなる
注文された規格を削除して、dtb_products_classテーブルから該当する規格データが無くなると、受注内容のたとえば発送先住所などを編集しようとしても数量の上限チェックに引っかかりエラーが出て受注内容の変更ができなくなってしまいます。 ※ この現象は、規格のチェックBOXを外して更新 → チェックBOXを再度立てて更新...
View ArticlePHPの array_column array_combine は超便利
PHPでデータベースを読み書きして操作していると、連想配列が配列になった以下のような配列からデータを取り出して操作する事が多いと思います。 $rec = array( array( 'id' => '1001', 'name' => 'りんご', 'area' => '青森' ), array( 'id' => '1002', 'name' => '梨', 'area'...
View ArticlePHP5.6でEUC-JPやShift_JISのサイトを動かす
今さら何でPHP5.6なのかと悲しくなりますが、サーバー変更するときにmysql_connect等のPHP7で廃止された関数を大量に使用しているサイトだったので、修正予算が無い関係でどうしてもPHP5系を選ばないといけませんでした。 しかもMySQLデータもPHPソースもHTMLも、全てEUC-JPで書かれているというサイトです。...
View ArticleEC-CUBE 2系でポート番号付で管理画面を動かす
Apacheの処理分散させるために、ロードバランサーを介してラウンドロビンを掛けた複数台で同じEC-CUBEを動かす必要が出てきました。 Apacheを動作させるフロントエンドをコピーした複数台でPHP処理を分担、MySQLはローカル接続されているバックエンドの専用サーバーで運用という形です。...
View Article第n○曜日の日付を求める
例) 2019-08 の第3木曜日を求める。該当する日付が無ければfalseを返す $target = '2019-08-05'; print getWeekWdayDate($target, 3, 4); function getWeekWdayDate($target, $week, $wday) { list($y, $m, $d) = explode('-', $target); //...
View ArticleURLのアンカーを判定して処理を切り替え
http://www.exsample.jp/test.php?type=0001#list というアクセスがあった場合にlocation.hashで取得可能 var strHash = location.hash; console.log(strHash); 実行結果 #list ページを表示したときに、非表示になっていたら表示したり、タブを切り替えたり、背景色を変えたりという処理が可能です。
View Article