プロが教えるわが家の防犯対策術!

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では可能でしょうか?

A 回答 (2件)

別に時間が掛かる事でもないんだから、実験してみりゃいいじゃん。


少なくとも、5割程は可能だろうって予測してるんでしょ。
やってみてできたら、聞いてやるよりも身に付きますよ。
と思ってしまいましたが。

結論から言うと、できますよ。

私であれば
<div class="madIdea" style="background-color: {$abc};">
と変化するものだけは、タグに直接書きますが。
    • good
    • 0

ものぐさに書いちゃうと{$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>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!