【最大10000ポイント】当たる!!質問投稿キャンペーン!

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qforeachで回った数を表示したい

単純な質問ですみません。
====
//getTestlistは別ファイルで定義済み。
<?
$testlist=getTestlist();
foreach($testlist as $test){
?>


<? } ?>
====
例えば↑こんなふうにforeachで$testlistが存在するだけ回したとします。
そのときに何回まわったか?($testが何件あったか?)だけを表示したいのですが、そんなことってできますか?
表示したい位置は<? } ?>の外側にと考えています。
あさってな質問でしたらすみません。
phpVer 4.3

よろしくお願いいたします。

Aベストアンサー

<?
$testlist=getTestlist();
$n=0;
foreach($testlist as $test){
$n++;
?>
<?}?>

<?=$n?>回
とかでよいかと思います。

途中でbreakなどが無ければ
<? echo count($testlist) ?>でも良いかも知れません。

Q【Smarty】foreach関数やsection関数のループを途中で終了させることはできますか?

Smarty初心者です。
環境は、
Smarty2.6.18 PHP5 レンタルサーバー
です。
foreach関数やsection関数のループを途中で終了させたい場合どうすればいいのでしょうか?
PHPの break; 相当の関数はないのでしょうか。
そんなものはない!という回答でも結構です。
お詳しい方、よろしくお願いいたします。

Aベストアンサー

よく考えてみてください。
なぜ途中で止める必要があるのでしょうか?

なにかしらの条件があり、そこでループをとめて表示したい ということですよね?
であれば、Smartyにアサインする前にPHP側で条件に応じて条件に一致した後の配列を消すなりすれば良いだけでは?
そうすれば、Smarty側はなにも手をつけずにすみます。

Smartyは多機能すぎて本来の目的以外の事もできてしまいますが、あくまでもテンプレートエンジンです。
ロジックとなる部分を記述すべきではありません。
見た目を変更するときはSmartyで。条件が変わったりしたときはPHP側のソースで対応する
というきっちりと線引きしないと、なんのためにSmartyを使ってテンプレートとロジック(PHP側)を分離しているのか意味が薄くなります。


ちなみに、
Smartyではsectionは古くからあり、互換性を保つためにのみ今現在も存在しています。
foreachを推奨します。


人気Q&Aランキング