EC-CUBEでは、ブロックのデフォルトレイアウトが、update_block.sqlのSQL文によって設定されている。
管理画面でレイアウトを決めても、テンプレートを変更したり、キャッシュをクリアした場合、ブロックレイアウトの情報をこのupdate_block.sqlから新規に読み込んできてしまうため、その都度デフォルトのブロックレイアウトに変わってしまう。
これじゃあ、イタチのおっかけっこってやつじゃあないですかい?
ってことで、一旦リリースしたWEBサイトでは、次にテンプレ更新したときも、やっぱり同じブロックレイアウトで表示されたいですな、ってことで、どん。
update_block.sqlは、
/data/smarty/templates/(テンプレ名)/_packages/sql/
/user_data/packages/(テンプレ名)/sql/
/user_data/packages/default/sql/
にそれぞれあるので、ここの値を変更。
テンプレの更新時に読み込んでもらいたいなら(Aのテンプレでは、Aのブロックレイアウトセットを使うけど、違うテンプレのときには違うブロックレイアウトセットを使うときは)/data/smarty/templates/(テンプレ名)/_packages/sql/のなかのupdate_block.sqlのみ編集。
下記に編集ルールをば。
INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(1,5,1,0,’category’);
これは、前から、
- page_id→1
- target_id→5
- bloc_id→1
- bloc_row→0
- filename→category
と設定されているということで、
page_id |
トップページ=1、一覧ページ=2、詳細ページ=3、マイページ=4、その他カスタムで作成したページへID付与。(dtb_pagelayout参照) |
target_id |
左カラム=1、中央上カラム=2、右カラム=3、中央下カラム=4、未使用ブロック=5.mtb_target参照) |
bloc_id |
カテゴリー=1、利用ガイド=2、かごの中=3等。(dtb_bloc参照) |
bloc_row |
カラム内でのブロックの表示優先順位。0は非表示で、target_idに5(未使用ブロック)が選択されている場合に設定可能。 |
filename |
カテゴリー=1、利用ガイド=2、かごの中=3等。(dtb_bloc参照)bloc_idと対応している。 |
つまり、上記の文では、トップページでは、カテゴリーブロックが未使用、ということ。
自分で、決めたレイアウトどおりにブロックの配列を記載しておくとよい。
新規ページを作成した場合、そのブロックの設定は、データベースのdtb_blocpositionに保存されるので、テンプレが更新されてもリセットはされない。デフォルトの各ページのみこのSQLの影響を受ける。もちろん新規ページについても同SQL内で設定しておくことも可能。