Warning: リポジトリと同期できません (サポートされていないバージョンコントロールシステム "svn です。 Python のライブラリに "svn" が正しくインストールされているか確認してください。)
- 更新日時:
-
2006/07/17 11:17:06 (19 年 前)
- 更新者:
-
weekbuild (IP アドレス: 218.41.79.69)
- コメント:
-
--
-
v4
|
v5
|
|
1 | 1 | {{{ |
2 | 2 | #!trachtml |
3 | | <h1 id="Cook even better eggs">Cook even better eggs</h1> <br /> [http://trac-hacks.org/wiki/EggCookingTutorial/AdvancedEggCooking 原文] [[VisitCounter(TracDoc/AdvancedEggCookingja)]]<br /><p><strike> </strike>[wiki:TracDoc/BasicEggCookingJa TracDoc/BasicEggCookingJa] を読んで、ファーストeggをつくったのなら、<br /> 次はちょっと難しいことにチャレンジしましょう。<br /> </p> <p>まず、他のTracの画面のように、表示に!ClearSilver のテンプレートをつかうよう改良しましょう。<br /> </p> <h2 id="1. テンプレートを追加するには">1. テンプレートを追加するには</h2> <p>テンプレートを使うには、テンプレート用のディレクトリが必要です。<br /> 同じく単純に"Hello world!"という文字を表示するけど、今度はTracのレイアウトに載せるように改良します。<br /> </p> <p>まず、以下のディレクトリを追加で作成してください:<br /> </p> <pre class="tmtrac">./helloworld-plugin/helloworld/templates/<br /></pre> <p>このディレクトリには、新しいファイルhelloworld.csを作成します:<br /> </p> <pre class="tmtrac">#!text/html<br /><?cs include "header.cs" ?><br /><?cs include "macros.cs" ?><br /><br /><div id="content" class="helloworld"><br /> <h1>Hello world!</h1><br /></div><br /><br /><?cs include "footer.cs" ?><br /></pre> <p>これで、プラグインのためのテンプレートができました。<br /> </p> <h2 id="2. Tracにテンプレートの場所を通知する。">2. Tracにテンプレートの場所を通知する。</h2> <p>このままでは、Tracはテンプレートがどこあるか気づきません。教えてあげましょう。これをやるには、helloworld.pyにITemplageProviderインタフェースを実装します。<br /> </p><p>4行目を以下のように変更します。<br /> </p> <pre class="tmtrac">#!python<br />from trac.web.chrome import INavigationContributor<br /></pre> <p> ↓<br /> </p> <pre class="tmtrac">#!python<br />from trac.web.chrome import INavigationContributor, ITemplateProvider<br /></pre> <p>続けて、9行目を以下のように変更します。<br /> </p> <pre class="tmtrac">#!python<br /> implements(INavigationContributor, IRequestHandler)<br /></pre> <p> ↓<br /> </p> <pre class="tmtrac">#!python<br /> implements(INavigationContributor, IRequestHandler, ITemplateProvider)<br /></pre> <p>23行目以降のprocess_requestメソッドは、以下の2行に入れ替えます。<br /> </p> <pre class="tmtrac">#!python<br /> def process_request(self, req):<br /> return 'helloworld.cs', None<br /></pre> <p> ファイルの最後で、テンプレートの場所を指示します。<br /> </p> <pre class="tmtrac">#!python<br /> # ITemplateProvider methods<br /> def get_templates_dirs(self):<br /> """<br /> Return the absolute path of the directory containing the provided<br /> ClearSilver templates.<br /> """<br /> from pkg_resources import resource_filename<br /> return [resource_filename(__name__, 'templates')]<br /></pre> <p> 以下はheloworld.pyの完成版です:[[FootNote(訳注:このサンプルではget_htdocs_dirsを実装しませんが、この場合他のプラグインでget_htdocs_dirsを使う場合に異常動作するようです。[70]を参考にして空を返す実装をして下さい。)]] </p> <pre class="tmtrac">#!python<br /># Helloworld plugin<br /><br />from trac.core import *<br />from trac.web.chrome import INavigationContributor, ITemplateProvider<br />from trac.web.main import IRequestHandler<br />from trac.util import escape, Markup<br /><br />class UserbaseModule(Component):<br /> implements(INavigationContributor, IRequestHandler, ITemplateProvider)<br /> <br /> # INavigationContributor methods<br /> def get_active_navigation_item(self, req):<br /> return 'helloworld'<br /> <br /> def get_navigation_items(self, req):<br /> yield 'mainnav', 'helloworld', Markup('<a xhref="%s">Hello</a>', self.env.href.helloworld())<br /> <br /> # IRequestHandler methods<br /> def match_request(self, req):<br /> return req.path_info == '/helloworld'<br /> <br /> def process_request(self, req):<br /> return 'helloworld.cs', None<br /> <br /> # ITemplateProvider methods<br /> def get_templates_dirs(self):<br /> """<br /> Return the absolute path of the directory containing the provided<br /> ClearSilver templates.<br /> """<br /> from pkg_resources import resource_filename<br /> return [resource_filename(__name__, 'templates')]<br /></pre> <h2 id="3. eggにテンプレートをコピーする">3. eggにテンプレートをコピーする</h2> <p> 最後に、作成したテンプレートのディレクトリをeggに含める手続きを行います。<br /><br /> setup.pyを以下のように変更してください:<br /> (訳注:これ0.9.2のころと比べて変更されてますね。)<br /> </p> <pre class="tmtrac">#!python<br />from setuptools import setup<br /><br />PACKAGE = 'TracHelloworld'<br />VERSION = '0.1'<br /><br />setup(name=PACKAGE,<br /> version=VERSION,<br /> packages=['helloworld'],<br /> package_data={'helloworld' : ['templates/*.cs']},<br /> entry_points={'trac.plugins': '%s = helloworld' % PACKAGE},<br />)<br /></pre> <h2 id="4. ビルドと配布">4. ビルドと配布</h2> <p> ビルド等は [wiki:TracDoc/BasicEggCookingJa TracDoc/BasicEggCookingJa] と完全に同じです。 </p> <p>今回は、メインナビゲーションバーのボタンを押すと、Tracのレイアウトに従った大きな"Hello world!"が表示されることでしょう。<br /> </p> <h2 id="5. 次は">5. 次は</h2> <p>基本的なテンプレートの追加を行ったので、サイトにひねりを加えましょう。スタイルシートやイメージのような静的コンテンツを追加します。<br /> <span class="missing wiki">続きは、</span>[wiki:TracDoc/AdvancedEggCooking2Ja TracDoc/AdvancedEggCooking2Ja] を読んでください。 </p> <p> </p> <p> [[FootNote]]</p> |
| 3 | <h1 id="Cook even better eggs">Cook even better eggs</h1> <br /> [http://trac-hacks.org/wiki/EggCookingTutorial/AdvancedEggCooking 原文] [[VisitCounter(TracDoc/AdvancedEggCookingja)]]<br /><p><strike> </strike>[wiki:TracDoc/BasicEggCookingJa TracDoc/BasicEggCookingJa] を読んで、ファーストeggをつくったのなら、<br /> 次はちょっと難しいことにチャレンジしましょう。<br /> </p> <p>まず、他のTracの画面のように、表示に!ClearSilver のテンプレートをつかうよう改良しましょう。<br /> </p> <h2 id="1. テンプレートを追加するには">1. テンプレートを追加するには</h2> <p>テンプレートを使うには、テンプレート用のディレクトリが必要です。<br /> 同じく単純に"Hello world!"という文字を表示するけど、今度はTracのレイアウトに載せるように改良します。<br /> </p> <p>まず、以下のディレクトリを追加で作成してください:<br /> </p> <pre class="tmtrac">./helloworld-plugin/helloworld/templates/<br /></pre> <p>このディレクトリには、新しいファイルhelloworld.csを作成します:<br /> </p> <pre class="tmtrac">#!text/html<br /><?cs include "header.cs" ?><br /><?cs include "macros.cs" ?><br /><br /><div id="content" class="helloworld"><br /> <h1>Hello world!</h1><br /></div><br /><br /><?cs include "footer.cs" ?><br /></pre> <p>これで、プラグインのためのテンプレートができました。<br /> </p> <h2 id="2. Tracにテンプレートの場所を通知する。">2. Tracにテンプレートの場所を通知する。</h2> <p>このままでは、Tracはテンプレートがどこあるか気づきません。教えてあげましょう。これをやるには、helloworld.pyにITemplageProviderインタフェースを実装します。<br /> </p><p>4行目を以下のように変更します。<br /> </p> <pre class="tmtrac">#!python<br />from trac.web.chrome import INavigationContributor<br /></pre> <p> ↓<br /> </p> <pre class="tmtrac">#!python<br />from trac.web.chrome import INavigationContributor, ITemplateProvider<br /></pre> <p>続けて、9行目を以下のように変更します。<br /> </p> <pre class="tmtrac">#!python<br /> implements(INavigationContributor, IRequestHandler)<br /></pre> <p> ↓<br /> </p> <pre class="tmtrac">#!python<br /> implements(INavigationContributor, IRequestHandler, ITemplateProvider)<br /></pre> <p>23行目以降のprocess_requestメソッドは、以下の2行に入れ替えます。<br /> </p> <pre class="tmtrac">#!python<br /> def process_request(self, req):<br /> return 'helloworld.cs', None<br /></pre> <p> ファイルの最後で、テンプレートの場所を指示します。<br /> </p> <pre class="tmtrac">#!python<br /> # ITemplateProvider methods<br /> def get_templates_dirs(self):<br /> """<br /> Return the absolute path of the directory containing the provided<br /> ClearSilver templates.<br /> """<br /> from pkg_resources import resource_filename<br /> return [resource_filename(__name__, 'templates')]<br /></pre> <p> 以下はheloworld.pyの完成版です:[[FootNote(訳注:このサンプルではget_htdocs_dirsを実装しませんが、この場合他のプラグインでget_htdocs_dirsを使う場合に異常動作するようです。[72]を参考にして空を返す実装をして下さい。)]] </p> <pre class="tmtrac">#!python<br /># Helloworld plugin<br /><br />from trac.core import *<br />from trac.web.chrome import INavigationContributor, ITemplateProvider<br />from trac.web.main import IRequestHandler<br />from trac.util import escape, Markup<br /><br />class UserbaseModule(Component):<br /> implements(INavigationContributor, IRequestHandler, ITemplateProvider)<br /> <br /> # INavigationContributor methods<br /> def get_active_navigation_item(self, req):<br /> return 'helloworld'<br /> <br /> def get_navigation_items(self, req):<br /> yield 'mainnav', 'helloworld', Markup('<a xhref="%s">Hello</a>', self.env.href.helloworld())<br /> <br /> # IRequestHandler methods<br /> def match_request(self, req):<br /> return req.path_info == '/helloworld'<br /> <br /> def process_request(self, req):<br /> return 'helloworld.cs', None<br /> <br /> # ITemplateProvider methods<br /> def get_templates_dirs(self):<br /> """<br /> Return the absolute path of the directory containing the provided<br /> ClearSilver templates.<br /> """<br /> from pkg_resources import resource_filename<br /> return [resource_filename(__name__, 'templates')]<br /></pre> <h2 id="3. eggにテンプレートをコピーする">3. eggにテンプレートをコピーする</h2> <p> 最後に、作成したテンプレートのディレクトリをeggに含める手続きを行います。<br /><br /> setup.pyを以下のように変更してください:<br /> (訳注:これ0.9.2のころと比べて変更されてますね。)<br /> </p> <pre class="tmtrac">#!python<br />from setuptools import setup<br /><br />PACKAGE = 'TracHelloworld'<br />VERSION = '0.1'<br /><br />setup(name=PACKAGE,<br /> version=VERSION,<br /> packages=['helloworld'],<br /> package_data={'helloworld' : ['templates/*.cs']},<br /> entry_points={'trac.plugins': '%s = helloworld' % PACKAGE},<br />)<br /></pre> <h2 id="4. ビルドと配布">4. ビルドと配布</h2> <p> ビルド等は [wiki:TracDoc/BasicEggCookingJa TracDoc/BasicEggCookingJa] と完全に同じです。 </p> <p>今回は、メインナビゲーションバーのボタンを押すと、Tracのレイアウトに従った大きな"Hello world!"が表示されることでしょう。<br /> </p> <h2 id="5. 次は">5. 次は</h2> <p>基本的なテンプレートの追加を行ったので、サイトにひねりを加えましょう。スタイルシートやイメージのような静的コンテンツを追加します。<br /> <span class="missing wiki">続きは、</span>[wiki:TracDoc/AdvancedEggCooking2Ja TracDoc/AdvancedEggCooking2Ja] を読んでください。 </p> <p> </p> <p> [[FootNote]]</p> |
4 | 4 | }}} |