ECCUBE 商品カテゴリをDBから手動で登録するときの注意点メモ

ECCUBEのカテゴリ管理でのお話です。

カテゴリのCSV一括登録機能では、category_id, category_name, parent_category_id フィールドが入ったCSVをアップロードして一気に登録します。新規登録ならば、色々と自動的に割り振っていい感じにしてくれるかと思いますが、更新目的で一括登録機能を使用すると、カテゴリの構成を大幅に変更したとき、いろいろと不都合が生じます。(その前にそんな大幅な変更が入らないようにしっかり構成にしろって話ですが……)

その時は仕方ないのでDBを直接操作することになると思いますが、そこでの注意点をいくつかメモっておきたいと思います。

ますは、dtb_categoryテーブルの構造です。

  • category_id
    カテゴリID
  • category_name
    カテゴリ名
  • parent_category_id
    親カテゴリID
  • level
    階層
  • rank
    ランク
  • creator_id
    作成者ID
  • create_date
    作成日時
  • update_date
    更新日時
  • del_flg
    削除フラグ

ECCUBEのカテゴリは、階層上に構成することができます。その際の階層レベルはlevelフィールドで設定します。一番上が1で、あとは2,3……と設定していきます。あるカテゴリの子供としてカテゴリを設定変更した際は、この辺の変更をしないとおかしくなります;;

そして、おそらく一番面倒なのが順番の設定だと思います。rankフィールドの変更です。 ほかのECCUBEのテーブルと同様、降順で番号を割り振ります。つまり、番号の大きい順から並んで「1」がリストの一番下に配置されます。

……なんだかいちいち説明するのがめんどくさいので結論から言いますと、親カテゴリ「お菓子」のrankが10だとしたら、その子供になるカテゴリは 9,8,7 という具合に、親の連番としてrankを割り振った方が変な表示になりにくいです。どうしても連番にならなければ、親カテゴリと子供カテゴリの間には、別のカテゴリは入り込まないように注意するべきです。 処理上は問題ないみたいですが、表示上では別のカテゴリが紛れ込んでいるかのような見え方になってしまいます。

自分が実際に行ったやり方は、level1の親カテゴリには、あらかじめrank200個分ぐらいの間隔を取って番号を割り振り、その範囲の中で子カテゴリに番号を割り振っていきました。 こうすれば別のカテゴリ同士が混じることはないと思います。

なんだかごちゃごちゃな説明ですが、とりあえずこの辺で……

[JS] IEではconsole.log は(半分)使えないんですね……(;ω;`)

今の今までconsole.log()を残していたのが動かない原因だったと分からなかったよくそっくそっ!

そしてもっと腹が立つのが、デバッグモードではconsole.logは動くということ。つまり通常モードではエラーが出て、何がおかしいのかをデバッグモードで探そうとした途端、正常に動きやがる。さんざん悪事を働いているズル賢いいじめっ子が、先生にチクられても巧みにかわして、しかもその矛先がチクった方に向けられてしまったような、何言ってるかちょっとよく分からないですが、とにかく悲しい心境です(・ω・`;)

まぁいじめはいじめられる側にも問題があるんじゃないかという、めったくそ一方的な論理もありますが、console.logを残しておく方にも問題があるという論理はあまり一方的ではないわけで……リリースするときはもちろん消すべきですし……でもIEさんの方も、モードによって挙動が変わるっていうのは何とかしてほしいとも思うんですよねぇ……(小声)

検索してみると、いろんな人たちがコード内にconsole.logを残していたために悲しい気持ちになっていますね。ですがそこはみなさんすごいです。しっかり対処法を書きつけてくれています。参考になったので、リスペクトの意味を込めてリンクをぺたぺたします。

304 – narucissus is Not Modified: Firebugのconsole.logをIEでも使いたいとき  http://narucissus.blogspot.jp/2007/07/firebugconsolelogie.html

この悲しい出来事から得た教訓は、動かす前にはIE console.logは消せ!ということですかね……。

[PHP]大量の配列をPOST/GETで渡す時に、要素が途中で切れて、すべて渡せない件。

分かった今はなんてことないのですが……(・ω・`)

PHPで大量のパラメータをPOSTで送ろうとする(自分の場合は1160個程度)と、こんなエラーが出てきました。

Warning: Maximum number of allowable file uploads has been exceeded in Unknown on line 0

とりあえず調べると、php.ini内にある「max_input_vars」プロパティをいじくれよ!と公式ドキュメントに書いてありました。
http://php.net/manual/ja/info.configuration.php

自分のphp.iniを見てみると、どこにも書いていないのでとりあえず追加。

max_input_vars = 2000

ちなみにデフォルトの値は1000みたいです。普通ならこの数で十分足りるはずなんですけどね……。

ほんと、なんてことない話なんですけど、俺がこの問題にぶつかったときにいじくっていたのがECCUBEで、こいつは画面上にPHPのエラーをそのまま吐き出してくれないんですよね。
仕方ないのでapacheのエラーログを見てみると、明らかに怪しいエラーがわんさかあったので、それを手掛かりに解決できました。

……あれ、この記事を書いていて思ったんだけど、よく考えたら、ECCUBEほどのものなら、デバッグモードぐらい用意されてるんじゃないだろうか?

探してみたらありました。これで出てくるんじゃないかしらorz
http://web-karakuri.com/archives/2510

複数行にまたがってパターン検索したい時は、「マルチラインモード」じゃなくて「シングルラインモード」で検索するもんだと今頃気がついた水曜日の夜。

どうもご無沙汰してます。にしふなです。

正規表現で、デリミタ(/)の後にiだかgだとか入れて、いろんなことができて幸せになれる機能があるじゃないですか。
その機能の中に、複数行にまたがってパターンをマッチさせるか否か、と言う機能があるじゃないですか。ありますよね。
俺はそれを、単一行マッチを「シングルラインモード」、複数行マッチを「マルチラインモード」だと思ってたんですね。
でも実際は、複数行マッチさせたい場合はシングルラインモードを使うみたいなんですね。

なぜなら、「マルチ」、「シングル」は、「検索される側の文字列」(php風にいえば$subject)を、一行として扱うか、それとも複数行として扱うか、と言う違いを切り替える言葉なんですね。

例えば、下記のように人が見やすいように改行・インデントが加えられたソースコードがあったとします。

このようなソースコードに「シングルラインモード」を適用すると、以下のように扱われるみたいです。

つまり、改行・インデントといった、整形に関わる記号をすべて「通常の文字」として扱い、「検索される側の文字列」を1行としてみなすモードが「シングルラインモード」と言うことみたいなんですね。
と言うことは、正規表現の挙動はどちらのモードでも変わってないということになりますね。シングルでもマルチでも、1行分しかパターンを適用していないです。

とりあえず結論は、複数行にまたがって検索したい時は「シングルラインモード」で検索しろ!ってことですね。
ちなみに俺は、このことに気づくまで1時間ぐらいウンウン唸ってました。なんというかお恥ずかしい……(;ω;`)

でもですね、言い訳じみた感じになってしまって恐縮ですが、Web上で正規表現のチェックが出来る「PHP正規表現チェッカー」さんでは、複数行にまたがってパターン検索するときには「マルチラインモード(m)」にチェックを入れるんですよ!! これはかなり混乱してしまいました……まじどっちなんだよとorz
でも、このツール自体はかなり便利なので、気にせず使っていくと思いますけどね。
http://www.rider-n.sakura.ne.jp/regexp/regexp.php

Zen-CodingをEclipse IDE(またはAptanaなど)にインストールする

どうもこんばんわ。

今回はZen-Codingのインストールについてのメモです。Zen-Codingについては各所で色々書いている方がおられますので、そちらの記事をお読み頂くとして、とりあえず本題へ。

自分がいつも使っているのはAptana Studioなんですが、↓の記事を読んで、Aptanaにも簡単にインストールできることを知りました。

知らない人は損してる?コーディングが3倍速くなるZen-Codingを導入してみた – EC studio デザインブログ
http://designblog.ecstudio.jp/htmlcss/zen-coding-aptana.html

でも、公式ページを見ても、DownloadページにはAptana用のファイルがどこにもなかったんですね。

しかし、ページ内をよくよく見てみると、こんなことが書いてありました。

Officially supported editors

These plugins are developed by Zen Coding team and guarantee to have full support of all Zen Coding latest features.

EclipseベースのIDEに関しては、どうも公式サポートエディターになったらしいですね。ここにあるリンクをクリックして飛ぶと、インストール方法が書いてありました。

Eclipse(Aptanaなど)へのZen-Codingインストール方法

  1. Eclipse本体画面上部にあるメニューバー内の「ヘルプ(Help)」を押し、
  2. 出てきたメニュー内の「新規ソフトウェアのインストール(Install New Software)」を押す。
  3. 出てきた画面の右上「追加(Add)」ボタンを押して、出てきたダイアログ内の「ロケーション」ボックスに、 http://zen-coding.ru/eclipse/updates/  もしくは http://media.chikuyonok.ru/eclipse/updates/  を入力。
  4. 画面の指示通りに進んでインストール完了。

なんだかとても簡単なインストールになっています。おぢちゃんびっくりだよぉ(・Д・`;)

しかも、公式対応になったことで、Eclipse上で編集しているファイルならどんな状態でもZen-Codingが使えるようになっています。(これ以前は、Zen-Codingのファイルが入っているプロジェクトを同時に開いていないと有効になりませんでした。)

まぁ波にかなり乗り遅れ、今や引潮に流されている感のあるタイミングですが、とりあえずインストールしてみたんですよ。使ってみると本当に便利ですねこれ。リストとかテーブルとかドロップダウンボックスとか、やたら大量にタグを使う構造を組む時にはかなり重宝します。

とりあえずこんな感じで……今日はこの辺で~(´・ω・)ノ