Witam!

Mam pytanie odnośnie klas widokowych we wzorcu MVC. Otóż załóżmy że posiadam kilka klas, dokładniej:

ProductModel.class <= zawiera pola odpowiadające kolumnom w DB, oraz funkcje ustawiające i pobierające,
ProductMapper.class <= zawiera funkcje operujące na ProductModel, takie jak zapis, aktualizacja, kasowanie, itp.
ProductView.class <= tutaj metody które umożliwiają np. przygotowanie do wyświetlenia tablicy produktów , oraz do wyświetlania np. stopki.

1. Czy "humanitarnie&" jest przekazywać w ten sposób np. $rs ( zestaw rekordów zwrócony przez funkcje getAllProducts() z klasy ProductMapper)?
  1. <?php
  2. public function buildProductTable() {
  3. $rs = ProductsMapper::getAllProducts();
  4. $this->tpl->setVar('rs', $rs);
  5. return $this->tpl->fetch('productList.tpl.php');
  6. }
  7. ?>


Co w efekcie prowadzi do następującego kodu pliku szablonu który zwracam w buildProductTable()
  1. <b>Lista produktow</b>
  2. <? 
  3. while(!$rs->EOF) {
  4. echo $rs->fields['productName'];
  5. echo $rs->fields['productAddDate'];
  6. $rs->MoveNext();
  7. }
  8. ?>


Testując:
  1. <?php
  2. ...
  3. $tpl = new Template('./themes/4');
  4. $tpl->setVar('title', 'Yahoo.PL'); // nie zwracajcie na to uwagi:D 
  5. $tpl->setVar('path', $tpl->templatePath); 
  6.  
  7. $product = ProductsMapper::getProductByName('Orange Striaghtener 5.1 oz');
  8. $productView = new ProductView($tpl, $product);
  9. $tpl->setVar('product', $product);
  10.  
  11. echo $productView->buildTop();
  12. echo $tpl->fetch('contentCenter.tpl.php');
  13. echo $productView->buildProductTable();
  14. echo $productView->buildBottom();
  15. ...
  16. ?>

2. Rozwiązanie może nie najefektywniejsze , ale już teraz pomalutku przestaje mi się podobać. Rozchodzi się o te fragmenty kodu:
  1. <?php
  2. echo $productView->buildTop();
  3. echo $tpl->fetch('contentCenter.tpl.php');
  4. echo $productView->buildProductTable();
  5. echo $productView->buildBottom();
  6. ?>

Powstaje szablon bardzo słabo modyfikowalny, nie można tutaj przestawiać w rożne segmenty strony, tabelki produktów zbudowanej za pomocą buildProductTable(); , wiec wpadłem na pomysł (odkrywczy..., bądź nie..) aby zrobić taki trik

Kod
$tpl->setVar('listaProduktow', $productView->buildProductTable());

a następnie w dowolnym pliku szablonu , np. w 'contentCenter.tpl.php' wywołać <?=$listaProduktow;?>

Czy to jest sensowne posunięcie? Pomijając fakt, że na razie nie działa...

Pozdrawiam i czekam na konstruktywne odpowiedzi:)

moze ktos sie zainteresuje mym skromnym postem?
cos jest w nim nie tak?smile.gif

EDIT Usuncie ten temat, widac ze nie ma zainteresowanych do konwersacji, a zbednie zawala mniejsce;)