Changes between Initial Version and Version 1 of TracInterfaceCustomization


Ignore:
Timestamp:
Apr 10, 2015, 1:03:53 PM (10 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TracInterfaceCustomization

    v1 v1  
     1= Trac のインタフェースをカスタマイズする = #CustomizingtheTracInterface
     2[[TracGuideToc]]
     3[[PageOutline]]
     4
     5== イントロダクション == #Introduction
     6このページは Trac の外観をカスタマイズする方法をユーザに提案するために書きました。主要な話題は HTML テンプレートと CSS ファイルであり、プログラムコードではありません。ユーザ自身の特定のニーズを満たすために Trac の外観を変更する方法を、ユーザに示すことを意図しています。 Trac の全てのユーザにとって有益な、インタフェース変更の提案は、このページに書くのではなくチケットを使用してください。 [[BR]] '''(訳注: 本家サイトのチケットの話です)'''
     7
     8== プロジェクトのロゴとアイコン == #ProjectLogoandIcon
     9Trac のインタフェースをカスタマイズする中で、最も簡単なのは、ロゴとサイトアイコンです。両方とも [wiki:TracIni trac.ini] に設定するだけで構成できます。
     10
     11ロゴやアイコンのイメージは、 Trac Environment フォルダの中の "htdocs" というフォルダに置かなければいけません。 (''Note: バージョン 0.9 以前の Trac で作成したプロジェクトでは、このフォルダを自分で作成する必要があります'')
     12
     13 ''Note: 実際は、ロゴとアイコンはサーバのどこのパスにおいてもかまいません(Web サーバがアクセスできるところならですが)。設定の中でそれらの絶対またはサーバの相対 URL を使用します。''
     14
     15[wiki:TracIni trac.ini] の適切なセクションの構成は以下の通りです:
     16
     17=== ロゴ === #Logo
     18`src` の設定を `site/` に続く画像ファイルの名前に変更してください。 `width` と `height` は画像ファイルにあわせて設定を変更してください。(Trac の chrome ハンドラはプロジェクトのディレクトリ `htdocs` の中のファイル用に "`site/`" を使用し、Trac インストール時に作成された共通のディレクトリ `htdocs` 用に "`common/`" を使用します。) Note: 'site/' はプロジェクト名の代わりに使っているのではなく、文字通り使用されるべき実際のプレフィクスです。例えば、プロジェクトに 'sandbox' という名前を付け、イメージファイルが 'red_logo.gif' である場合、 'src' には 'sandbox/red_logo.gif' ではなく、 'site/red_logo.gif' を設定します。
     19
     20{{{
     21[header_logo]
     22src = site/my_logo.gif
     23alt = My Project
     24width = 300
     25height = 100
     26}}}
     27
     28=== アイコン === #Icon
     29アイコンは `.gif` か `.ico` 形式の 32x32 の画像である必要があります。 `icon` の設定を `site/` に続くアイコンファイルの名前に変更してください。アイコンは通常、サイトの URL の横や、 `ブックマーク` メニューに表示されます。
     30
     31{{{
     32[project]
     33icon = site/my_icon.ico
     34}}}
     35
     36Note: Internet Explorer では、ホストのルートディレクトリにある ``favicon.ico`` という名前のファイルしか許容しないため、このアイコンは無視されます。プロジェクトアイコンを IE と他のブラウザで共用したい場合、アイコンをホストのドキュメントルートに配置し、 ``trac.ini`` から以下のように参照します:
     37
     38{{{
     39[project]
     40icon = /favicon.ico
     41}}}
     42
     43ブラウザのアドレスバーでのアイコン表示に問題がある場合、アイコンのファイル拡張子の後に "?" (クエスチョンマーク) を置くと回避できることがあります。
     44
     45{{{
     46[project]
     47icon = /favicon.ico?
     48}}}
     49
     50== ナビゲーション項目のカスタマイズ == #CustomNavigationEntries
     51[mainnav] と [metanav] を使用すると、ナビゲーション項目に使用されるテキストとリンクをカスタマイズしたり、無効化することができます (新規項目を追加することはできません)。
     52
     53以下の例では、 Wiki のスタートページへのリンク名を "Home" に変更して、 "!Help/Guide" を非表示にします。さらに、 "View Tickets" エントリを特定のレポートにリンクさせます。
     54{{{
     55[mainnav]
     56wiki.label = Home
     57tickets.href = /report/24
     58
     59[metanav]
     60help = disabled
     61}}}
     62
     63mainnav と metanav についての、より詳細な記述は TracNavigation を参照してください。
     64
     65== サイトの外観 == #SiteAppearance
     66
     67Trac はテンプレートエンジンに [http://genshi.edgewall.org Genshi] を使用しています。ドキュメントはまだ書かれていませんが、次の tip は動くはずです。
     68
     69カスタムスタイルシートへのリンクや、独自のヘッダやフッタを追加したい場合、
     70以下のようなの内容ファイルを、プロジェクトの `templates/` ディレクトリに `site.html` という名前で作成してください (各 Trac プロジェクトは独自の内容の `site.html` を持つことができます)。{{{/path/to/env/templates/site.html}}} の例:
     71
     72{{{
     73#!xml
     74<html xmlns="http://www.w3.org/1999/xhtml"
     75      xmlns:py="http://genshi.edgewall.org/"
     76      py:strip="">
     77
     78  <!--! Add site-specific style sheet -->
     79  <head py:match="head" py:attrs="select('@*')">
     80    ${select('*|comment()|text()')}
     81    <link rel="stylesheet" type="text/css"
     82          href="${href.chrome('site/style.css')}" />
     83  </head>
     84
     85  <body py:match="body" py:attrs="select('@*')">
     86    <!--! Add site-specific header -->
     87    <div id="siteheader">
     88      <!--! Place your header content here... -->
     89    </div>
     90
     91    ${select('*|text()')}
     92
     93    <!--! Add site-specific footer -->
     94    <div id="sitefooter">
     95      <!--! Place your footer content here... -->
     96    </div>
     97  </body>
     98</html>
     99}}}
     100
     101XSLT に慣れ親しんだ人であれば、 Genshi テンプレートには類似点があるのに気付くかもしれません。しかしながら Trac 固有の機能もあります。例えば `${href.chrome('site/style.css')}` は Environment に含まれる `htdocs/` にある CSS ファイルへの参照の属性に置き換えられます。 同様に、 `${chrome.htdocs_location}` は Trac インストール時に作成された共通の `htdocs/` ディレクトリを指定するために使用します。しかし [[TracIni#trac-config|[trac] htdocs_location]] のコンフィグを設定することで、ディレクトリ位置を指定しなおすことができます。
     102
     103`site.html` はサイト固有のすべての変更を含んでいる一つのファイルです。通常は、特定のセクション上で `py:match` を要素 (element) または属性 (attribute) として使用することで、カスタマイズしようとしているページを
     104思い通りにレンダリングすることができます。
     105[http://groups.google.com/group/trac-users/browse_thread/thread/70487fb2c406c937/ メーリングリスト] には上記の例の `site.html` について解説されていますので、参照してください。
     106`site.html` には変更を行うための `py:match` セクションをいくつでも記載することができます。これらはすべて Genshi の文法に沿って行います。[http://genshi.edgewall.org/wiki/Documentation/xml-templates.htmlドキュメントや詳細なシンタックス] を参考にしてください。
     107
     108
     109チケット登録のフォームに導入テキストを表示する (プレビューが非表示のとき) 場合は、次の例を追加してください:
     110
     111{{{#!xml
     112<form py:match="div[@id='content' and @class='ticket']/form" py:attrs="select('@*')">
     113  <py:if test="req.environ['PATH_INFO'] == '/newticket' and (not 'preview' in req.args)">
     114    <p>Please make sure to search for existing tickets before reporting a new one!</p>
     115  </py:if>
     116  ${select('*')}
     117</form>
     118}}}
     119
     120この例では `req.environ['PATH_INFO']` を使用して、特定のビューだけで変更が行われるようにスコープを限定しています。例えば `site.html` でタイムラインだけで変更を行い、他のセクションには影響を及ぼしたくない場合は、 `req.environ['PATH_INFO'] == '/timelime'` を `<py:if>` の test 属性に記載します。
     121
     122より多くの `site.html` の例が [trac:CookBook/SiteHtml CookBook/SiteHtml] で見ることができます。
     123
     124`style.css` の例は [trac:CookBook/SiteStyleCss CookBook/SiteStyleCss] で見ることができます。
     125
     1260.10 からアップグレードされた Environment で、かつ `site_newticket.cs` ファイルが既に存在している場合は、ワークアラウンドすることによってテンプレートをロードすることができます - !ClearSilver の処理が含まれていない場合に限ります (訳注: `<?cs?>` が含まれていない場合) 。また、この場合はただ一つの要素 (element) だけがインポートされるので、コンテンツはある種のラッパー (`<div>` ブロックやそれに似た親コンテナ) を必要とします。インクルードするためには XInclude の名前空間を指定しなければなりませんが、ドキュメントルート以外にも置くことができます:
     127{{{
     128#!xml
     129<form py:match="div[@id='content' and @class='ticket']/form" py:attrs="select('@*')"
     130        xmlns:xi="http://www.w3.org/2001/XInclude">
     131  <py:if test="req.environ['PATH_INFO'] == '/newticket' and (not 'preview' in req.args)">
     132    <xi:include href="site_newticket.cs"><xi:fallback /></xi:include>
     133  </py:if>
     134  ${select('*')}
     135</form>
     136}}}
     137
     138また、共通のテンプレートディレクトリに、 `site.html` (その名前にも関わらず) を置くことができます - [[TracIni#inherit-section|[inherit] templates_dir]] オプションを参照してください。新しく、一個のグローバルな `site.html` ファイルに、ヘッダ, フッタ, チケット作成時の tips を組み込むことで、簡単なメンテナンス (および、大きなインストールを行った 0.10 からのバージョンアップのための移行パス) を提供しています。
     139
     140== プロジェクトリスト == #ProjectList
     141
     142複数の Trac プロジェクトを動かしているときに、カスタマイズした Genshi テンプレートを使用して、プロジェクトの一覧を表示することができます。
     143
     144以下に示すのは Trac が使用している、ホストするプロジェクトへのリンクのリストを表示するための基本のテンプレートです。ロードできないプロジェクトについては、エラーメッセージを表示します。これをあなた自身のインデックステンプレートのスタートポイントとして使用することができます。
     145
     146{{{
     147#!text/html
     148<!DOCTYPE html
     149    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     150    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     151<html xmlns="http://www.w3.org/1999/xhtml"
     152      xmlns:py="http://genshi.edgewall.org/"
     153      xmlns:xi="http://www.w3.org/2001/XInclude">
     154  <head>
     155    <title>プロジェクト一覧</title>
     156  </head>
     157  <body>
     158    <h1>プロジェクト一覧</h1>
     159    <ul>
     160      <li py:for="project in projects" py:choose="">
     161        <a py:when="project.href" href="$project.href"
     162           title="$project.description">$project.name</a>
     163        <py:otherwise>
     164          <small>$project.name: <em>エラー</em> <br /> ($project.description)</small>
     165        </py:otherwise>
     166      </li>
     167    </ul>
     168  </body>
     169</html>
     170}}}
     171
     172カスタムテンプレートを使用する場合、 Web サーバにテンプレートのロケーションの設定を読み込ませる必要があります (確かめてみてください ... まだ 0.11 向けに変更していません):
     173
     174[wiki:TracModWSGI mod_wsgi] 用:
     175{{{
     176os.environ['TRAC_ENV_INDEX_TEMPLATE'] = '/path/to/template'
     177}}}
     178
     179[wiki:TracFastCgi FastCGI] 用:
     180{{{
     181FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/parent/dir/of/projects \
     182              -initial-env TRAC_ENV_INDEX_TEMPLATE=/path/to/template
     183}}}
     184
     185[wiki:TracModPython mod_python] 用:
     186{{{
     187PythonOption TracEnvParentDir /parent/dir/of/projects
     188PythonOption TracEnvIndexTemplate /path/to/template
     189}}}
     190
     191[wiki:TracCgi CGI] 用:
     192{{{
     193SetEnv TRAC_ENV_INDEX_TEMPLATE /path/to/template
     194}}}
     195
     196[wiki:TracStandalone] の tracd を動かすのに使用するシェルの中で `TRAC_ENV_INDEX_TEMPLATE` の環境変数を設定する必要があるでしょう:
     197 - Unix
     198   {{{
     199#!sh
     200$ export TRAC_ENV_INDEX_TEMPLATE=/path/to/template
     201   }}}
     202 - Windows
     203   {{{
     204#!sh
     205$ set TRAC_ENV_INDEX_TEMPLATE=/path/to/template
     206   }}}
     207
     208== プロジェクトテンプレート == #ProjectTemplates
     209
     210個々の Trac Environment (プロジェクトのインスタンス) の外観は、同じサーバにホストされている他のプロジェクトとは独立してカスタマイズできます。推奨するのは `site.html` テンプレート ([#SiteAppearance サイトの外観] 参照) を使う方法です。どのような場合でも可能な限り、この方法にしてください。 `site.html` を使う場合、変更はオリジナルのテンプレートがレンダリングした結果に対して適用されるので、 Trac を今後アップグレードした後も、通常はカスタマイズをそのまま使い続けることができます。 `theme.html` や他の Trac のテンプレートのコピーを作成する方法の場合、新しい Trac の機能追加や不具合修正の結果、動かなくなってしまったカスタマイズを新しいバージョンに移行する必要があるかもしれません。
     211
     212リスクを許容して扱う必要はありますが、 Trac テンプレートはコピーしてカスタマイズすることもできます。デフォルトの Trac テンプレートはインストールされた Trac egg (`/usr/lib/pythonVERSION/site-packages/Trac-VERSION.egg/trac/templates, .../trac/ticket/templates, .../trac/wiki/templates, ++`) 内に配置されています。 [#ProjectList プロジェクトリスト] のテンプレートファイルは `index.html` が使用されており、各ページに共通する主要なレイアウトを提供するテンプレートは `theme.html` が使用されます。画像や CSS スタイルシートなどのページの部品は、 egg の `trac/htdocs` ディレクトリに配置されています。
     213
     214しかし、 Trac egg 内部のテンプレートやサイトのリソースは編集しないでください。 Trac を再インストールしたときに、カスタマイズの内容が完全に失われてしまいます。代わりに、以下に挙げる方法のいずれかを使ってください:
     215 * カスタマイズが単独のプロジェクトに閉じているのであれば、テンプレートをプロジェクトの `templates` ディレクトリにコピーしてください
     216 * カスタマイズが複数のプロジェクトに渡るものであるなら、テンプレートを共有のロケーションにコピーし、各プロジェクトからは trac.ini の `[inherit] templates_dir =` オプションで、その位置を指定してください
     217
     218Trac は以下の順序で、テンプレートファイルを探します。まず、プロジェクトの内部を探し、存在しなければ inherit で指定された場所、最後に Trac egg の内部を探します。
     219
     220Trac は通常、パフォーマンスを向上させるために、テンプレートをメモリ上にキャッシュします。変更したテンプレートを適用するためには、 サーバプロセスの再起動が必要です。
     221
     222----
     223See also: TracGuide, TracIni