- ベストアンサー
Smarty tpl内のifの書き方について
- Smarty tpl内のifの書き方について相談があります。更新を頼まれたホームページで、ページごとにjavascriptを振り分けたいですが、イマイチわかりません。アドバイスをお願いします。
- ヘッダーテンプレート内の<script>タグをページとディレクトリに分けたいですが、適用されないページがあります。フォルダ内に適用するための書き方を教えてください。
- 質問: Smarty tpl内のifの書き方について ホームページの更新を頼まれた際、ページごとにjavascriptを振り分けたいと考えています。しかし、if文の使い方についてわからない部分があります。アドバイスをいただけますか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
$smarty.server.REQUEST_URI の値は、 URLのホスト名より後の部分になります。 フォルダだけでなくその後の部分も含みます。 http://www.***.com/ だと / です。 http://www.***.com/index.php だと /index.php です。 http://www.***.com/guide/info.php だと /guide/info.php です。 http://www.***.com/foo/bar.php?a=1 だと /foo/bar.php?a=1 です。 http://www.***.com/ のときは、/ なので、 ($smarty.server.REQUEST_URI == '/') が成立します。 http://www.***.com/guide/ のときは、/guide/ なので、 ($smarty.server.REQUEST_URI == '/guide/') が成立します。 http://www.***.com/guide/info.php のときは、/guide/info.php なので、 ($smarty.server.REQUEST_URI == '/guide/') は成立しません。 ただそうすると、***.com/index.php や ***.com/guide/index.php のときも 適用されないはずなんですが。。。 もしかすると index.php にアクセスすると ./ に転送するような処理が サーバーの設定か、PHP側で行われているのかもしれません。 で、対応案です。 PHPの stropos 関数を修飾子に使って、$smarty.server.REQUEST_URI が フォルダの名前で始まっているか(開始位置が 0 か)を調べると、 以下のような書き方ができるかと思います。 {if ($smarty.server.REQUEST_URI == '/')} {* トップページにのみ適用 *} {elseif ($smarty.server.REQUEST_URI|strpos:'/guide/' === 0)} {* ガイドフォルダ内に適用 *} {elseif ($smarty.server.REQUEST_URI|strpos:'/contact/' === 0)} {* コンタクトフォルダ内に適用 *} {elseif ($smarty.server.REQUEST_URI|strpos:'/item/' === 0)} {* アイテムフォルダ内に適用 *} {else} {/if}
お礼
アドバイスありがとうございます。 strposについて調べつつ試行錯誤行やったところようやく出来ました(汗 お礼にお時間が掛かり申し訳ありませんでした。 まだまだ色々弄っている最中ですがまたわからなくなり質問をするかもしれませんが その際には宜しくお願いします。 この度はとっても参考になり大変参考になりました。 本当にありがとうございました。