そう言えば、base タグってありましたね。
2009年08月11日 23:05
ポーランド人のプログラマの同僚にぼそってささやかれて、先日はっとしました。
と言うのは、物凄く基本的な話ですが、下記の様なタグの存在をこの世からすっかり忘れていました。
<head> <base href="http://www.convexstyle.com/" /> </head>
これがあることで、Zend Framework 内で
www.convexstyle.com/controller
www.convexstyle.com/controller/
www.convexstyle.com/controller/action
www.convexstyle.com/controller/action/
を同じ処理出来るんですよね。
2 番目と 4 番目がディレトトリと見なされて、アセット関連のパスがおかしくなるのが嫌だったのでこれまでは Zend Framework 内で Smarty をテンプレートとして使う際に base タグを使わずに、例えば、<img src="<% $homeUrl %>images/sample.jpg" /> とか物凄い効率悪いやり方をしてました。
なのでこれからは
<head> <base href="<% $homeUrl %>" /> </head>
にして <img src="images/sample.jpg" /> でいいじゃんと思いました。
基本を忘れちゃいけないなあ。
一点問題は、<a href="#top">top</a> の様な内部リンクに関しては $homeUrl が http://www.convexstyle.com/ の場合、絶えずリンク先が http://www.convexstyle.com/#top になってしまうんですよね。この場合現状のページトップに行きたいのに IndexController にアクセスしてしまうので、これを避ける際は、やはりこういう場合は controller 側で対応して、view 側に 現状の controller や action やスラッシュとかを <a href="<% $currentUrl %>#top">top</a> の様な形で渡さないといけないですね。 もともと自分は javascript でページ top への移動は内部リンクと JQuery の animate で対応してたんですが、知らない間に scrollTo という JQuery のプラグインが存在していたので、これもまた <a href="Javascript:void(0);" onClick="goTop();">top</a> 的にすれば全く Zend の URL 構造は依存せず対応出来ますね。知らないで効率悪かったという話です。
・・・・・
『参考サイト』
base タグ
scrollTo (JQuery Plugin)
