====== Data containers ====== All data containers used in Limb implement two interfaces: DataSource and Iterator. ===== UML charts ===== ==== Non-list data containter implementing DataSource ==== {{{ limb:architecture:limb3.0_datasources.png }}} ==== List data containter implementing DataSourceIterator ==== {{{ limb:architecture:limb3.0_iterators.png }}} ===== Examples ===== ==== Iteration ==== Let's define a small array of data, create an ArrayDataSet using this array and iterate over it using Iterator interface. $dataset = array ( array ('username'=>'jdoe','email'=>'jdoe@hotmail.com'), array ('username'=>'rsmith','email'=>'rsmith@cure.org'), array ('username'=>'nclark','email'=>'nclark@yahoo.com'), ); $rs = new ArrayDataSet($dataset); $str = ''; for($rs->rewind(); $rs->valid(); $rs->next()) { $record = $rs->current(); $str .= 'User: '. $record->get('username') . ' '; $str .= 'Email: '. $record->get('email') . "\n"; } Since Iterator interface is builtin in php5 you can simplify "foreach" usage a bit: $dataset = array ( array ('username'=>'jdoe','email'=>'jdoe@hotmail.com'), array ('username'=>'rsmith','email'=>'rsmith@cure.org'), array ('username'=>'nclark','email'=>'nclark@yahoo.com'), ); $rs = new ArrayDataSet($dataset); $str = ''; foreach($rs as $record) { $str .= 'User: '. $record->get('username') . ' '; $str .= 'Email: '. $record->get('email') . "\n"; } ==== Pagination ==== The following example will display only two first records. $dataset = array ( array ('username'=>'jdoe','email'=>'jdoe@hotmail.com'), array ('username'=>'rsmith','email'=>'rsmith@cure.org'), array ('username'=>'nclark','email'=>'nclark@yahoo.com'), ); $pager = new lmbPagerComponent(); $pager->setItemsPerPage(2); $rs = new PagedArrayDataSet($dataset); $rs->paginate($pager); $str = ''; foreach($rs as $record) { $str .= 'User: '. $record->get('username') . ' '; $str .= 'Email: '. $record->get('email') . "\n"; }