タグ: PHP

【EC-CUBE】SMARTYでマルチバイト文字を丸める(字数制限を利用する)

SMARTYのテンプレートで商品説明などを表示するときに、レイアウト上、前から10文字だけを表示してあとは、「…」という感じで表示する文字数を合わせたいときに利用する。

前から何文字目から何文字、といったように文字を丸めるわけだが、日本語の場合マルチバイトなので、PHPで本来の丸めにつかうtrancate()が利用できないので、mb_strimwidth()を使う。

それをSMARTY上で、利用することになる。

例:

{$hoge|mb_strimwidth:0:40:”…”|escape}

『$hogeの文字列の最初から(=0)、40字(=40)を表示し、一番最後は「…」と表示する。』という意味。
注意しておくのは、どうやら、この40字、マルチバイトは半角の2文字なので、つまりは、これで20文字ということになる模様。なるほど。

これ、結構使えるなぁ。

参考:
http://www.php-seed.net/blog/archives/118
http://www.phppro.jp/phpmanual/php/function.mb-strimwidth.html

【EC-CUBE】テンプレートの中に別のテンプレート(ブロック)を呼び込む記述

1)管理画面からブロック(tempA)を作る。 (※既存のテンプレブロックの場合は、これは不要)

2)読み込む側のテンプレのソースにインクルード用のコードを記述する。

<!–{assign var=tempA value=$smarty.const.USER_TEMPLATE_PATH|cat:”default/bloc/tempA.tpl“}–>
<!–{include file=$tempA}–>

重要!)先に変数にアサインしてから、インクルードすること。上記ソース参照。
下記でも可能。

<!–{include file=`$smarty.const.USER_TEMPLATE_PATH`default/bloc/tempA.tpl}–>

【EC-CUBE】テンプレを変更してもブロックレイアウト情報を設定したとおりに再現する

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→
  • 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内で設定しておくことも可能。

【EC-CUBE】入力欄の許可タグ

入力欄の許可タグ・・・

許可されてる種類が異様に少ない・・・

<li>は許可されて、<ol>とか<ul>入ってないって、どういうこと!?
<span>ないってどういうこと!?
<th>はあかんのか!?

・・・・・追加。

DBのmtb_allowed_tagに、追加したいタグのそれぞれ開始タグと終了タグを登録する。
PhpMyAdminでDBにアクセスして、mtb_allowed_tagを探してデータ編集。
IDとRANKは、データの一番後ろから連番で追加していくこと。

インストールのときから、増やしときたい場合は、インストールのところのプログラムをイジイジ。(とりあえず、今は、先にインストールされたEC-CUBEのカスタマイズのハナシなんで、こっちのハナシは一旦無視。)

登録できたら、/data/cache/の中の「mtb_allowed_tag.php」削除して、一応管理画面もログアウトしてから再ログイン。

これで、タグ許可の入力エリアに入力できるタグの種類が増えた♪

【EC-CUBE】ヘッダーにトップページだけメインビジュアルをででんと表示する

トップページに大きくメインビジュアルを表示させる場合(ホラ、あれよ、アレ。メインビジュアルどど~ん、ってやつよ。フラッシュとか。)site_main.tplやtop.tplにいれるとカラムの影響を受けてしまうので、header.tplへトップページの場合のみエリアを表示させる変更を入れることにする。

該当出力ページが、サイトのトップページ(/index.php)だったら、<div id=”mainvisual”></div>を表示。
それ以外だったら、この部分には何も表示しない。

<!–{if $smarty.server.PHP_SELF == “/index.php”}–>
<div id=”mainvisual”>(この中にフラッシュのソース他コンテンツを入れる)</div>
<!–{else}–><!–[if}–>

以上だす。