電子書籍の厳選無料作品が豊富!

Smartyを使ったホームページがあり、更新を頼まれています。
サイト内でjavascriptを使用し、ページごとに振り分けをしたいと思い if を使いたいのですが
イマイチわかりませんのでアドバイスをお願いします。

ヘッダーテンプレート内の<head></head>内の<script>タグをページとディレクトリに分けたいのですが、

<script type="text/javascript" src="http://www.***.com/data/js/jquery.js" charset="UTF-8"></script>
{if ($smarty.server.REQUEST_URI == '/')}
<script type="text/javascript" src="http://www.***.com/data/js/*****.js" charset="UTF-8"></script>
<script type="text/javascript" src="http://www.***.com/data/js/*****.js" charset="UTF-8"></script>
{elseif ($smarty.server.REQUEST_URI == '/guide/')}
<script type="text/javascript" src="http://www.***.com/data/js/*****.js" charset="UTF-8"></script>
{elseif ($smarty.server.REQUEST_URI == '/contact/')}
<script type="text/javascript" src="http://www.***.com/data/js/*****.js" charset="UTF-8"></script>
<script type="text/javascript" src="http://www.***.com/data/js/*****.js" charset="UTF-8"></script>
{elseif ($smarty.server.REQUEST_URI == '/item/')}
<script type="text/javascript" src="http://www.***.com/data/js/*****.js" charset="UTF-8"></script>
{else}
{/if}

と、記述しました。

{if ($smarty.server.REQUEST_URI == '/')}
は、トップページにのみ適用。
{elseif ($smarty.server.REQUEST_URI == '/guide/')}
は、ガイドフォルダ内に適用。
{elseif ($smarty.server.REQUEST_URI == '/contact/')}
は、コンタクトフォルダ内に適用。
{elseif ($smarty.server.REQUEST_URI == '/item/')}
は、ガイドフォルダ内に適用。

としたいのですが、どれも ***.com/index.php ***.com/guide/index.php ~には
適用されるものの ***.com/guide/info.php には /guide/としているのに適用されません。
/guide/ は、 ***.com/guide/フォルダ内のページ表示に対しての指示ではないのでしょうか?
これらフォルダ内に適用するにはどう言った書き方をすれば宜しいのでしょうか?

アドバイスをお願いします。

A 回答 (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}
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。

strposについて調べつつ試行錯誤行やったところようやく出来ました(汗
お礼にお時間が掛かり申し訳ありませんでした。

まだまだ色々弄っている最中ですがまたわからなくなり質問をするかもしれませんが
その際には宜しくお願いします。

この度はとっても参考になり大変参考になりました。
本当にありがとうございました。

お礼日時:2011/06/28 15:33

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