CompleteLister

CompleteLister class extends the functionality of default lister by allowing it to have a more comprehensive template. If default Lister will repeat it's own template as many times as necessary, CompleteLister will look for tag "row" cache it and will render it into "rows" tag after emptying it's contents. Here is a sample template for CompleteLister:

<?MyLister?>
<ul>
  <?rows?>
  <?row?>
    <li><?name?>John Smith<?/?></li>
  <?/?>
    <li>Peter Oink</li>
    <li>Steven Jobs</li>
  <?/rows?>
</ul>
<?/MyLister?>

With this template, it's possible to preserve the existing HTML too. CompleteLister will clone template inside "row" and then delete contents of "rows" region, therefore Peter and Steven entries will be simply deleted. John's entry will be re-used but the "name" tag will be populated from the model.

In terms of data sources, CompleteLister can use all the same sources as Lister does.

It might be a good idea for you to extend CompleteLister into your own classes such as "ClientLister" or "OrderLister" which will perform necessary formatting or other tweaks. CompleteLister is also a view therefore you can add tags around "rows" tags and set them explicitly.