Top
3-11. パスを自動調整する


Documentation

3-11. パスを自動調整する

※この機能は 1.0.0-beta3 で実装されました。

コンポーネント機能レイアウト共有機能を使うときにテンプレートが別のディレクトリにあると、ブラウザで直接開く場合と実行時とで画像やスタイルシートなどのファイルパスが変わってしまう場合があります。そのような場合、パスを"./"で始めることで自動調整させることができます。

具体的な例

レイアウト共有機能を使う例で見てみましょう。次のようなファイル構成があるとします。hello.html は layout.html をレイアウトとして指定し、layout.html からは base.css を使っています。このままではファイルとしてプレビューはできても、実行時にはスタイルシートが読み込まれません。

コンテキストルート
  + css/
    - base.css
  + layouts/
    - layout.html
    - layout.mayaa
  - hello.html
  - hello.mayaa
hello.html
<html> <body> <h1>DummyTitleHello</h1> <div id="content">Hello Mayaa!</div> </body> </html>
hello.mayaa
<?xml version="1.0" encoding="ISO-8859-1"?> <m:mayaa xmlns:m="http://mayaa.seasar.org" extends="/layouts/layout.html"> <m:doRender id="content" name="contentBody" /> </m:mayaa>
layouts/layout.html
<html> <head> <link href="../css/base.css" rel="stylesheet" type="text/css"> </head> <body> <h1>Hello</h1> <div id="contentPosition">Dummy content</div> </body> </html>
layouts/layout.mayaa
<?xml version="1.0" encoding="ISO-8859-1"?> <m:mayaa xmlns:m="http://mayaa.seasar.org"> <m:insert id="contentPosition" name="contentBody" /> </m:mayaa>

ブラウザで http://localhost:8080/mayaa/hello.html にアクセスしてみましょう。

実行結果 (改行などは実際の実行結果と異なります)
<html> <head> <link href="../css/base.css" rel="stylesheet" type="text/css"> </head> <body> <h1>Hello</h1> Hello Mayaa! </body> </html>

このとき、http://localhost:8080/css/base.css というスタイルシートを探していることになりますが、このパスには存在しないためスタイルシートは適用されません。

ファイルとしてプレビューする場合と実行時とで、どちらでも同じファイルを指すようにするために layout.html を次のように書き換えます。この状態でもファイルとしてプレビューした場合にはスタイルシートは正しく読み込まれます。

layouts/layout.html
<html> <head> <link href="./../css/base.css" rel="stylesheet" type="text/css"> </head> <body> <h1>Hello</h1> <div id="contentPosition">Dummy content</div> </body> </html>

Mayaa はパスが"./"で始まっている場合、そのテンプレートからの相対パスと解釈して絶対パスに置き換えます。ブラウザで http://localhost:8080/mayaa/hello.html にアクセスしてみましょう。

実行結果 (改行などは実際の実行結果と異なります)
<html> <head> <link href="/mayaa/css/base.css" rel="stylesheet" type="text/css"> </head> <body> <h1>Hello</h1> Hello Mayaa! </body> </html>

スタイルシートのパスがコンテキストパスからの絶対パスに変換されているため、スタイルシートは正しく読み込まれます。

調整対象となるタグおよび属性

パスの調整は、HTML および XHTML の以下のタグの属性のみを対象とします。

タグ名
属性名
formaction
ahref
linkhref
areahref
basehref
imgsrc
scriptsrc
embedsrc
iframesrc
framesrc
longdesc
appletcode
objectdata

※attribute プロセッサで指定する場合は対象となりませんのでご注意ください。

調整対象となるプロセッサおよび属性

以下のプロセッサおよび属性も自動調整の対象となります。

タグ名
属性名
m:mayaaextends
m:insertpath
m:execsrc
Copyright (c) 2004-2006 the Seasar Foundation and others. all rights reserved.