SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webアプリケーションフレームワーク「Catalyst」入門

初めてのCatalyst入門(8)
Catalystのビュープログラミング

Catalystのビューを使って統一的なサイトを構築する


簡単なサイトアプリケーション

 TTSiteヘルパを使用して、簡単なサイトを構築する例を紹介します。

アプリケーションスケルトン作成

 最初にSiteSampleアプリケーションを作成します。今回のサンプルではTTSiteヘルパクラスを使用してビューを作成します。またコード類はすべてUTF-8で保存しています。

[リスト15]SiteSampleアプリケーションを作成
$ catalyst.pl SiteSample
$ ./SiteSample/script/sitesample_create.pl view TT TTSite

 今回用意するアクションでは、単純にメッセージを表示するだけなので、詳細は記事添付のサンプルファイルをご覧ください。

メニューの作成

 ヘッダ部分に各アクションへのリンクを表示するようにします。また自分自身が表示されている場合にはリンクを作成しないようにします。

 メニューの一覧を定義する、config/menulistを作成し、config/mainから読み込むようにします。

[リスト16]config/menulist
[%
   site.menulist = [ 'home', 'service', 'about', 'contact' ]
-%]

 サイト全体から参照される配列として、site.menulistを定義しています。ここでは、4つのメニューを登録しています。このメニューに対応するURLをconfig/urlにも登録しています。このメニューはヘッダ部で表示するので、site/headerファイルに次のような処理を実装しました。

[リスト17]site/header
<!-- BEGIN site/header -->
<h1 class="title">[% template.title or site.title %]</h1>
<div id="menubar" align="center">
[% # (1)FOREACHでsite.menulistに登録された値を1つずつ取得 %]
[% FOREACH menu = site.menulist %]
  [% IF menu == template.menu %]
  [% # (2)表示されているテンプレートと同じならば文字列のみを表示 %]
    <span>[% menu %]</span>
  [% ELSE %]
  [% # (3)表示されているテンプレート以外ならばリンクを作成 %]
    <a href="[% site.url.$menu %]">[% menu %]</a>
  [% END # end of IF %]
[% END # end of FOREACH %]
</div>
<!-- END site/header -->

 (1)のFOREACHでsite.menulistに登録された配列の値を1つずつ取得し、(2)で現在表示されているテンプレートと同じであればメニュー名をそのまま表示し、(3)で表示されているテンプレート以外であれば、リンクを作成しています。

 このとき、site.urlに登録されたハッシュからメニュー名をキーとしてURLを取得しています。

ページテンプレート

 各ページのテンプレートは次のように定義しました。

[リスト18]src/about.tt2
[% META title = 'About' %]
[% META menu = 'about' %]
<p>SiteSampleのAbout画面</p>

 METAディレクティブで、メニューを識別するための名前を「menu」という名前で登録しています。ここで登録した名前は上記のsite/headerで、現在表示されているメニューかどうかを判定するのに使っています。

サンプルアプリケーションの実行

 それでは作成したSiteSampleアプリケーションを実行させてみましょう。次のURLをWebブラウザで表示させてください。

  • http://<ホスト名またはIPアドレス><:Port>/about
Aboutページ表示画面
Aboutページ表示画面

まとめ

 本記事では、CatalystのビュークラスであるCatalyst::View::TTを例に取り、統一的なサイトを構築する方法を紹介しました。

 これでCatalystの主要なクラスについては紹介できたと思います。さて、次回ではCatalystでテストを行う方法についてサンプルを交えつつ紹介していく予定です。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Webアプリケーションフレームワーク「Catalyst」入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 花田 善仁(ハナダ ヨシヒト)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4952 2010/06/22 12:59

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー