(佐賀→熊本)マークアップエンジニアのググる生活

地方のWEB制作会社で働く、フロントエンドエンジニア。
HTML、CSS、JavaScript(jQuery)、PHP、Smary、EC-CUBE、WordPress、Movable Type等々で解らない時に、Googleで検索したら解決した話や、「閃いた!」などをほとんど自分用にメモとして残すブログです。

※URLがあったら元記事を参照推奨です!
※ほとんどの事は検証はしていますが、あくまでも参考程度にお願い致します!
※記載が不正確であったことにより生じたいかなる損害に関しても、当ブログは責任を負いかねます。自己責任でよろしくおねがいいたします。

タグ:smarty

今回も2系の話になります。

EC-CUBEはSmartyというテンプレートエンジンを使用しています。
基本的にはurlなどの見た目通りの場所にtplが存在しているので、
作業の前にどこの階層のどのフォルダにあるな、ということが容易に想像することができます。

しかし、プラグイン等ではその当てがたまに外れることがあります。
特にファイルをいくつか複製する処理が入るタイプのものは、
同じ内容のtplファイルが3つぐらいサーバー上に生成される場合も…。

そのため、
編集したのに反映されない!
→そこのファイルじゃないよ…。
キャッシュファイルの影響かな?
→templates_c内のtpl.phpを削除しても微動だにせず。
という作業を繰り返す羽目になったり。

1つだけならどこを編集したらよいか、
すぐにわかりますが、複数だと非常に混乱します…。

そんなときに、どのファイルを編集するとよいかは、
templates_c内のtpl.phpファイルを見てみると本来のファイルパスが一目でわかります!

templates_c内のtpl.phpファイルをエディタで開くと、
phpのコメントで2行目に「compiled from」と書かれています。
~からコンパイル…とのことで、その横にファイルパスが書かれています。
つまりそのファイルパスのtplを元にしてtpl.phpを作ってますよといことです。

ということでそのファイルパスを辿って、編集するべきtplを簡単に特定することが可能になります!

これでもう迷わない…はず…。

ほぼ一年前の記事
(MTバージョン:ヾ【MT】ノ n回繰り返しのエントリーをdivとかで囲む、包む!
のSmartyのtplでの書き方のメモです。

プログラム的なことは分からないのですが、これぐらいならやってみようと思い、考えてみました。

section関数などはhttp://www.hazymoon.jp/php/Smarty/05.htmlのサイト様を参考に致しました。
大変ありがとうございました!

{section name=entry loop=ループ回数を決定する値}
	{if $smarty.section.entry.first}<div class="entryCover">{/if}
		~中身~
	{if $smarty.section.entry.last}</div>{else}{if $smarty.section.entry.iteration % 3 == "0"}</div><div class="entryCover">{/if}{/if}
{sectionelse}
	<p class="noentry">エントリーありません。</p>
{/section}

こんな感じです。
上は3回繰り返すとdivで包むようになっています。

まず、sectionの名前を決めます。nameですね。

{section name=entry loop=$arrEntry}

とりあえず、entryにしました。(なんでもいいんです。)

すると次に、

{if $smarty.section.entry.first}<div class="entryCover">{/if}

ループの最初だけに実行されるfirstを記述することで、始めのdivを出力できます。

同じく次に、

{if $smarty.section.entry.last}</div>{/if}

ループの最後だけに実行されるlastを記述することで、最後のdivを出力できます。

次に最後ではない場合、の処理を設定します。

最後ではない、なので、lastのif文にelseを置き、

{if $smarty.section.entry.iteration % 3 == "0"}</div><div class="entryCover">{/if}

現在のループ数(iteration)をn回繰り返し後に包みたいdivの数字で割り算します。

割り算した結果、それが0ならば閉じdivと、次の始めのdivを出力するようになります。

今のところ、これで問題ないのですが、何か問題がありましたらご教授お願いしたいと思います!

section関数などはhttp://www.hazymoon.jp/php/Smarty/05.htmlのサイト様を参考に致しました。
大変ありがとうございました!

このページのトップヘ