SHOEISHA iD

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

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

Zend Framework入門

プログレスバーを表示しよう - Zend_ProgressBar -

Zend Frameworkによる実践的なPHPアプリケーション開発 29

  • X ポスト
  • このエントリーをはてなブックマークに追加

処理の実行と進捗の更新

 Progressアクションは実際の処理と、処理の進捗の送信を行います。

リスト3 処理の実行と進捗の送信(IndexController.php)
class IndexController extends Zend_Controller_Action
{
...
    public function progressAction()
    {
        /* (1)HTMLの出力はしない */
        $this->_helper->viewRenderer->setNoRender();

        /* 必要なコンポーネントの読み込み */
        require_once('Zend/ProgressBar.php');
        require_once('Zend/ProgressBar/Adapter/JsPush.php');

        /* (2)アダプタの作成 */
        $adapter = new Zend_ProgressBar_Adapter_JsPush();
        /* (3)本体の作成 */
        $progressbar = new Zend_ProgressBar($adapter, 0, 10);

        /* 次のループを実行している間にプログレスバーが進む */
        for ($i = 1; $i < 11; $i++) {
           /* (4)ここで処理を行う */
           sleep(1);
           /* (5)進捗の送信 */
           $progressbar->update($i);
	}

        /* (6)処理の終了の送信 */
        $progressbar->finish();
    }
}

 このProgressアクションは通常のアクションのようにHTMLファイルを出力するのではなく、進捗に応じてJSONを出力します。そこでまず(1)で通常のようにHTMLの出力は行わないことを指定しています。

 この後の流れはコンソールアプリと同じように(2)(3)Zend_ProgressBarのアダプタと本体を作成し、(5)進捗を送信し、(6)処理の終了を送信する処理の流れになっています。前のサンプルと違う点としては(2)で作成しているアダプタがZend_ProgressBar_Adapter_JsPushクラスになっていることくらいです。

 ここの(5)でZend_ProgressBarのupdateメソッドが呼び出されると、サーバ側からクライアント側に次のようなJSON形式のデータで進捗が送信されます。

リスト4 送信されるデータの例
<script type="text/javascript">parent.Zend_ProgressBar_Update({"current":9,"max":10,"percent":90,"timeTaken":8,"timeRemaining":1,"text":null});</script><br />

 次は、このデータを受け取って表示する仕組みを見てみます。

文字による進捗の表示

 リスト4にあるように、iframeの親ページ(つまり表示されているページ)のZend_ProgressBar_Update関数に進捗状況が渡されます。それではまず、ここで渡されている情報をそのままテキストとして表示してみましょう。

リスト5 進捗の表示(index.phtml)
<script type="text/javascript">
<!--
function Zend_ProgressBar_Update(data)
{
  //(1)zend-progressbar-info の内容を更新
  document.getElementById('zend-progressbar-info').value =
    data.percent + "% " +
    data.current + "/" + data.max + " " +
    data.timeTaken +  "s elapsed (" +
    data.timeRemaining + "s remaining)"
    ;
}
-->
</script>
...
<!-- (2)進捗状況を表示するためのスペース -->
<input id="zend-progressbar-info" type="text"
       value="progress" size="40">

 (1)では、Zend_ProgressBarから受け取った情報が格納されているdata変数を利用して、ページ内にあるフォームのテキストボックス(2)の内容を更新しています。表示されている内容は次のとおりです:

送信されるデータの中身
要素名 意味
current 進捗の値
max 進捗の値の最大値
percent 進捗の%表示(100*current/max)
timeTaken 経過時間
timeRemaining 予想される終了までの時間
text 進捗に関するコメント(指定されている場合のみ)

 これを画面に表示したものが図2です。

図2 文字だけで表示されたプログレスバー
図2 文字だけで表示されたプログレスバー

 これで進捗を受け取って表示することができました。

次のページ
簡単なプログレスバーの表示

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
Zend Framework入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5464 2010/10/14 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング