• 締切済み

smartyテンプレートの<style></style>の中身にsmarty変数記述は可能でしょうか

smartyのtmpファイルにスタイルシートの内容を書いた場合、{literal}{/literal}で囲う必要がありますが、逆に囲わない場合、たとえばスタイルシートの内容にsmarty変数を当てはめたることは可能でしょうか? たとえば、以下のような感じです。 <style type="text/css"> {literal} /* this is an intersting idea for this section */ .madIdea{ border: 3px outset #ffffff; margin: 2 3 4 5px; {/literal} background-color: {$abc}; {literal} } {/literal} </style> 例がしょぼいですが、上の例だと、 background-colorを{$abc}で当てはめています。 こんなことは通常smartyでは可能でしょうか?

みんなの回答

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

別に時間が掛かる事でもないんだから、実験してみりゃいいじゃん。 少なくとも、5割程は可能だろうって予測してるんでしょ。 やってみてできたら、聞いてやるよりも身に付きますよ。 と思ってしまいましたが。 結論から言うと、できますよ。 私であれば <div class="madIdea" style="background-color: {$abc};"> と変化するものだけは、タグに直接書きますが。

  • mizutaki
  • ベストアンサー率33% (111/333)
回答No.1

ものぐさに書いちゃうと{$abc}がエスケープされますから 対応策 ・{ldelim} {rdelim}でがんばる ・スタイルシートやjavascript部分は出来るだけscriptタグやlinkタグを使い、別のファイルとして管理する ・CSSやJavascript部分をまとめて出力したい文字としてソースコードなどに記述してしまう。  $cssLists = "td{ background-color: $tdBgcolor1 ; }";  $smarty->assign('setStyle1', $cssLists); // みたいな 出来るだけ外のファイルに記述するか {ldelim}あたりでがんばった方が、 HTMLソースがバラバラにならない気がします。 大技 デリミタそのものを変更してしまう。 $smarty->left_delimiter = '{{{'; // 後は({とか<!---とか $smarty->right_delimiter = '}}}'; -- 変更後の書き方↓ -- <style type="text/css"> {{{** 波括弧が3連続で現れてる場所だけがsmarty変数だと解釈される **}}} { /* this is an intersting idea for this section */ .madIdea{ border: 3px outset #ffffff; margin: 2 3 4 5px; background-color: {{{$abc}}}; } } </style>

関連するQ&A