#setlinebreak(on)
[[PEAR/HTML_Template_Flexy]]

* 繰り返し Flexy:foreach [#haa7aef8]

#htmlinsert(googleAdsense.html)
#ref(http://dozo.rgr.jp/img/img20_file.png,right,nolink,around,PHP::PEAR)


データが複数行ある場合、
繰り返しを使って表示します。
データベースからデータをとってきて、
foreachで表示というのは、
どのテンプレートエンジンでも定石です。

構文はこんな感じ。
    タグの中に記述する場合
      キーがあるとき
        <tag flexy:foreach="パラメータ,キー,値">
          ループ内容
        </tag>
      キーがないとき
        <tag flexy:foreach="パラメータ,値">
          ループ内容
        </tag>
    タグの外に記述する場合:
      キーがあるとき
        {foreach:パラメータ,キー,値}
          ループ内容
        {end:}
      キーがないとき
        {foreach:パラメータ,値}
          ループ内容
        {end:}


Smartyサイトのサンプルを拝借
http://smarty.php.net/manual/en/language.function.foreach.php

***Example 7-4. valueのみのforeach [#g0c2b45b]
プログラム側
 <?php
 $flexyObj->arr = array( 1001,1002,1003 );
 ?>  
テンプレート
 {foreach:arr,curr_id}
   id: {curr_id}<br />
 {end:}
 <div flexy:foreach="arr,curr_id">id: {curr_id}</div>

出力結果は
 id: 1000<br />
 id: 1001<br />
 id: 1002<br />
 <div>id: 1000</div><div>id: 1001</div><div>id: 1002</div>


***Example 7-5. keyとvalueを使ったforeach [#sf9bde1c]
プログラム側
    $nestObj = & new nest;
    $nestObj->phone = 1;
    $nestObj->fax = 2;
    $nestObj->cell = 3;
 
    $flexyObj->contacts[] = $nestObj;
 
    $nestObj = & new nest;
    $nestObj->phone = '555-4444';
    $nestObj->fax = '555-3333';
    $nestObj->cell = '760-1234';
 
    $flexyObj->contacts[] = $nestObj;
 
    class nest
    {
        var $phone = "";
        var $fax = "";
        var $cell = "";
    }

テンプレート側
    {foreach:contacts,contact}
    <hr />
      <div flexy:foreach="contact,key,value">{key}: {value}</div>
    {end:}


***Example 7-6. データベースラッパーとの連携 ( PEAR, ADODB, PDO ) [#da1ad02c]
プログラム側
    $sql = "SELECTcontact_id, name, nick, date ".
           " FROM contacts ORDER BY contact";
    $db->setFetchMode( DB_FETCHMODE_OBJECT, "contact");
    $this->contacts = & $db->getAll($sql);
 
    require_once("DB.php");
    class contact extends DB_row
    {
        var $contact_id = "";
        var $name = "";
        var $nick = "";
        var $date = "";
        function dateformat()
        {
            return date("Y-m-d H:i:s", strtotime( $this->date ) );
        }
    }

テンプレート側
    <div flexy:foreach="contacts,value">
      <a href="contact.php?contact_id={value.contact_id}">
      {value.name} - {value.nick}</a>({value.dateformat()})
    </div>

DBからの結果は配列ではなくオブジェクトで取得してください。
セットしたオブジェクトを拡張することで非常に柔軟な表示が可能になります。

配列にするとテンプレート上に非常に複雑なコードを書くことになるか、
プログラム上で展開して値を変更するなどが必要になる場合が出てきます。

参考:[[DB::setFetchMode()>http://pear.php.net/manual/ja/package.database.db.db-common.setfetchmode.php]]
-<a href=" http://insurance.ewach.info/auto-insurance-rates.html ">auto insurance rates</a> <a href=" http://tramadolbuy.twwer.info/cheapest-tramadol-online.html ">cheapest tramadol online</a>Thanks! -- [[Acheros]] &new{2006-10-31 08:03:41 (火)};
-<a href=" http://insurance.ewach.info/auto-insurance-rates.html ">auto insurance rates</a> <a href=" http://tramadolbuy.twwer.info/cheapest-tramadol-online.html ">cheapest tramadol online</a>Thanks! -- [[Acheros]] &new{2006-10-31 08:03:43 (火)};
-<a href=" http://tramadolcheap.rojik.info/order-tramadol-ultram.html ">order tramadol ultram</a> <a href=" http://phenterminebuy.twwer.info/phentermine-37-5mg.html ">phentermine 37 5mg</a> -- [[Actaeon]] &new{2006-11-03 08:02:19 (金)};
-<a href=" http://tramadolcheap.rojik.info/order-tramadol-ultram.html ">order tramadol ultram</a> <a href=" http://phenterminebuy.twwer.info/phentermine-37-5mg.html ">phentermine 37 5mg</a> -- [[Actaeon]] &new{2006-11-03 08:02:22 (金)};
-Hello all! Nice site and very informative.<a href=" http://tramadolbuy.owrob.info/cheapest-tramadol.html ">cheapest tramadol</a> <a href=" http://tramadolcheap.moank.info/tramadol-100mg.html ">tramadol 100mg</a>Thanks! -- [[Acheros]] &new{2006-11-07 07:19:46 (火)};

#comment


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Third Project
証券会社ランキング比較