Warning: リポジトリと同期できません (サポートされていないバージョンコントロールシステム "svn です。 Python のライブラリに "svn" が正しくインストールされているか確認してください。)

バージョン 4 から バージョン 5 における更新: TracDoc/AdvancedEggCookingja

差分発生行の前後
無視リスト:
更新日時:
2006/07/17 11:17:06 (18 年 前)
更新者:
weekbuild (IP アドレス: 218.41.79.69)
コメント:

--

凡例:

変更なし
追加
削除
変更
  • TracDoc/AdvancedEggCookingja

    v4 v5  
    11{{{ 
    22#!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 /> 同じく単純に&quot;Hello world!&quot;という文字を表示するけど、今度は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 />&lt;?cs include &quot;header.cs&quot; ?&gt;<br />&lt;?cs include &quot;macros.cs&quot; ?&gt;<br /><br />&lt;div id=&quot;content&quot; class=&quot;helloworld&quot;&gt;<br /> &lt;h1&gt;Hello world!&lt;/h1&gt;<br />&lt;/div&gt;<br /><br />&lt;?cs include &quot;footer.cs&quot; ?&gt;<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>    &darr;<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>    &darr;<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 />        &quot;&quot;&quot;<br />        Return the absolute path of the directory containing the provided<br />        ClearSilver templates.<br />        &quot;&quot;&quot;<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('&lt;a xhref=&quot;%s&quot;&gt;Hello&lt;/a&gt;', 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 />        &quot;&quot;&quot;<br />        Return the absolute path of the directory containing the provided<br />        ClearSilver templates.<br />        &quot;&quot;&quot;<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のレイアウトに従った大きな&quot;Hello world!&quot;が表示されることでしょう。<br />  </p> <h2 id="5. 次は">5. 次は</h2>   <p>基本的なテンプレートの追加を行ったので、サイトにひねりを加えましょう。スタイルシートやイメージのような静的コンテンツを追加します。<br /> <span class="missing wiki">続きは、</span>[wiki:TracDoc/AdvancedEggCooking2Ja TracDoc/AdvancedEggCooking2Ja]                 を読んでください。   </p>   <p>&nbsp;</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 /> 同じく単純に&quot;Hello world!&quot;という文字を表示するけど、今度は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 />&lt;?cs include &quot;header.cs&quot; ?&gt;<br />&lt;?cs include &quot;macros.cs&quot; ?&gt;<br /><br />&lt;div id=&quot;content&quot; class=&quot;helloworld&quot;&gt;<br /> &lt;h1&gt;Hello world!&lt;/h1&gt;<br />&lt;/div&gt;<br /><br />&lt;?cs include &quot;footer.cs&quot; ?&gt;<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>    &darr;<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>    &darr;<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 />        &quot;&quot;&quot;<br />        Return the absolute path of the directory containing the provided<br />        ClearSilver templates.<br />        &quot;&quot;&quot;<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('&lt;a xhref=&quot;%s&quot;&gt;Hello&lt;/a&gt;', 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 />        &quot;&quot;&quot;<br />        Return the absolute path of the directory containing the provided<br />        ClearSilver templates.<br />        &quot;&quot;&quot;<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のレイアウトに従った大きな&quot;Hello world!&quot;が表示されることでしょう。<br />  </p> <h2 id="5. 次は">5. 次は</h2>   <p>基本的なテンプレートの追加を行ったので、サイトにひねりを加えましょう。スタイルシートやイメージのような静的コンテンツを追加します。<br /> <span class="missing wiki">続きは、</span>[wiki:TracDoc/AdvancedEggCooking2Ja TracDoc/AdvancedEggCooking2Ja]                  を読んでください。   </p>   <p>&nbsp;</p>   <p> [[FootNote]]</p> 
    44}}}