ご注意ください

このWikiに書かれた情報は、Risoluto1.x系に関するものです。 Risoluto1.x系は開発が終了しており、現在Risoluto2.x系の開発が進められています。

最近の更新

2012-10-11
2012-04-05
2012-03-27

Neueste Datei-Release

risoluto (1.3.1)2011-09-27 15:41
risoluto-upgrade (1.3.0 to 1.3.1)2011-10-24 15:51
simpleblog (1.4.0)2011-10-19 14:50
simpleblog-upgrade (1.2.0 to 1.3.0)2011-07-21 23:13
simplepage (1.3.0)2011-10-19 14:45
simplepage-upgrade (1.1.0 to 1.2.0)2011-07-21 23:15

Wikiガイド

サイドバー

戻る

Step4:2画面間で画面遷移させてみる

このチュートリアルを行う前に……

  • Risolutoのセットアップが終了している必要があります
  • これまでのチュートリアルを理解している必要があります

Risolutoで画面遷移を行う方法

Step3までは単一画面でのチュートリアルでした。しかし、実際のWebアプリケーションでは1画面のみであることは皆無であり、複数画面で構成されていることでしょう。そこで、ちょっとRisolutoとは無関係*1になってしまいますが、複数画面で画面遷移を行ってみましょう。

では、実際のコードを見てみましょう。まずは最初の画面から見ていきます。これを「sample04_01.php」として保存してください*2

  1. <?php
  2. require_once( 'Smarty.class.php' );
  3. class sample04_01
  4. {
  5. private $smarty;
  6. public function init()
  7. {
  8. $this->smarty = new Smarty;
  9. $this->smarty->template_dir = RISOLUTO_USERLAND . "samples";
  10. $this->smarty->config_dir = RISOLUTO_USERLAND . "samples";
  11. $this->smarty->compile_dir = RISOLUTO_CACHE;
  12. $this->smarty->cache_dir = RISOLUTO_CACHE;
  13. $this->smarty->caching = false;
  14. $this->smarty->debugging = false;
  15. $this->smarty->force_compile = true;
  16. $this->smarty->compile_check = true;
  17. }
  18. public function model()
  19. {
  20. }
  21. public function view()
  22. {
  23. $this->smarty->display( 'sample04_01.tpl' );
  24. }
  25. public function errHandler()
  26. {
  27. }
  28. public function clean()
  29. {
  30. unset( $this->smarty );
  31. }
  32. }
  33. ?>

続いて最初の画面のテンプレートについても、実際のコードを見てみることにしましょう。こちらの方は、「sample04_01.tpl」として保存してください*3

  1. <HTML>
  2. <HEAD>
  3. <TITLE>sample04_01</TITLE>
  4. </HEAD>
  5. <BODY>
  6. Go to <a href="?cage=samples&amp;act=sample04_02">sample04_02</a>!
  7. </BODY>
  8. </HTML>

続いて遷移先画面のコードも見てみましょう。これを「sample04_02.php」として保存してください。

  1. <?php
  2. require_once( 'Smarty.class.php' );
  3. class sample04_02
  4. {
  5. private $smarty;
  6. public function init()
  7. {
  8. $this->smarty = new Smarty;
  9. $this->smarty->template_dir = RISOLUTO_USERLAND . "samples";
  10. $this->smarty->config_dir = RISOLUTO_USERLAND . "samples";
  11. $this->smarty->compile_dir = RISOLUTO_CACHE;
  12. $this->smarty->cache_dir = RISOLUTO_CACHE;
  13. $this->smarty->caching = false;
  14. $this->smarty->debugging = false;
  15. $this->smarty->force_compile = true;
  16. $this->smarty->compile_check = true;
  17. }
  18. public function model()
  19. {
  20. }
  21. public function view()
  22. {
  23. $this->smarty->display( 'sample04_02.tpl' );
  24. }
  25. public function errHandler()
  26. {
  27. }
  28. public function clean()
  29. {
  30. unset( $this->smarty );
  31. }
  32. }
  33. ?>

続いて最初の画面のテンプレートについても、実際のコードを見てみることにしましょう。こちらの方は、「sample04_02.tpl」として保存してください。

  1. <HTML>
  2. <HEAD>
  3. <TITLE>sample04_02</TITLE>
  4. </HEAD>
  5. <BODY>
  6. sample04_02!
  7. </BODY>
  8. </HTML>

さて、これらのファイルをアップロードし、最初の画面にWebブラウザからアクセスすると、次画面へのリンクが表示されるはずです。そのリンクを押下すると、2画面目に遷移するのが確認できます。

「Baseをつかえ!ルーク!」

さて、画面遷移ができたところでちょっと考えてみましょう。テンプレート側はともかくとして、PHP側のコードを見てください。2つのPHPファイルに同じ内容が書かれてしまっていることにお気づきでしょうか。Smartyのクラスインスタンス作成やプロパティのセット、クラス変数の初期化などは全画面で共通の処理ですね。

2画面程度であればこれでも良いのですが、ちょっと凝ったアプリケーションを作ろうとすると、画面数だけでもそれなりの量になります。できれば、同じようなコードは何度も書きたくないと思うのが人情でしょう*4

Risolutoでは、このような場合は「Base」を使うことを推奨しています。今回のサンプルで、Baseを使った例を下記に示します。

はじめに、下記の内容を「samples_base.inc」として保存してください*5

  1. <?php
  2. require_once( 'Smarty.class.php' );
  3. abstract class samples_base
  4. {
  5. protected $smarty;
  6. abstract function model();
  7. abstract function view();
  8. public function __construct()
  9. {
  10. }
  11. public function __clone()
  12. {
  13. }
  14. public function init()
  15. {
  16. $this->smarty = new Smarty;
  17. $this->smarty->template_dir = RISOLUTO_USERLAND . "samples";
  18. $this->smarty->config_dir = RISOLUTO_USERLAND . "samples";
  19. $this->smarty->compile_dir = RISOLUTO_CACHE;
  20. $this->smarty->cache_dir = RISOLUTO_CACHE;
  21. $this->smarty->caching = false;
  22. $this->smarty->debugging = false;
  23. $this->smarty->force_compile = true;
  24. $this->smarty->compile_check = true;
  25. }
  26. public function errHandler()
  27. {
  28. }
  29. public function clean()
  30. {
  31. unset( $this->smarty );
  32. }
  33. }
  34. ?>

続いて、「sample04_01.php」と「sample04_02.php」を、それぞれ下記のように変更します。

  1. <?php
  2. require_once( 'samples_base.inc' );
  3. class sample04_01 extends samples_base
  4. {
  5. public function model()
  6. {
  7. }
  8. public function view()
  9. {
  10. $this->smarty->display( 'sample04_01.tpl' );
  11. }
  12. }
  13. ?>
  1. <?php
  2. require_once( 'samples_base.inc' );
  3. class sample04_02 extends samples_base
  4. {
  5. public function model()
  6. {
  7. }
  8. public function view()
  9. {
  10. $this->smarty->display( 'sample04_02.tpl' );
  11. }
  12. }
  13. ?>

変更したら、これらのファイルをアップロードし、Webブラウザからアクセスしてみると変更前と同一の結果となるはずです。

変更前と変更後でコードを見比べてみると、「sample04_01.php」と「sample04_02.php」のコードがすっきりしている事が分かるかと思います。このように、同一Cage内で共通の処理がある場合は、Baseを作成してその中にすべて押し込んでしまうと楽になります。

もし、特定画面でBaseに書いた処理とは別な事をしたくなった場合は、Logic*6でメソッドをオーバーライドすることで対応可能です*7

戻る


  1. *1HTMLレベルのお話です
  2. *2例によって、Risolutoのお約束に準拠している限りにおいて、ファイル名は任意です
  3. *3当然ながら名前は任意ですが、PHP側で指定した名称と同一のファイル名にしておいてください
  4. *4もし貴方がそう思わないなら、これ以降を読む必要はありません
  5. *5もちろん他の名前でもいいですが、拡張子だけは「.inc」にしておくことをオススメします
  6. *6この例ですと「sample04_01.php」と「sample04_02.php」が該当します
  7. *7もちろんBaseを2つ以上作成しても構いません