Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Smarty i wyświetlanie klas
Forum PHP.pl > Forum > PHP
Maslav
Postaram się nie pokręcić czegoś,więc będę pisał powolij.

Ze Smarty jestem już całkiem nieźle obyty, tylko że dotychczas pisałem wszystko proceduralnie. Niedawno zacząłem się zaznajamiać z OOP i na razie nie mam z samymi klasami problemu. Więc o co mi chodzi? Mianowicie, dotychczas jeśli chciałem wyświetlić newsa i komentarze do niego to robiłem tak (kod oczywiście przykładowy):

  1. <?
  2. $smarty->register_function("ShowNews", "shownews");
  3. function shownews() { $kod; }
  4. $smarty->register_function("ShowComm", "showcomm");
  5. function showcomm() { $kod;}
  6. if($cmd == "news") { $smarty->display('news.tpl'); } 
  7. ?>


  1. //news.tpl
  2. <div>{ShowNews}</div>
  3. <div>{ShowComm}</div>


Może nie jest to modelowe rozwiązanie ale się do niego przyzwyczaiłem. Dzięki temu mogę sobie wstawiać funkcje za pomocą Smarty do html'a gdzie chcę.

I teraz nadchodzi problem/właściwe zagadnienie. Narazie nie udało mi się rozgryźć podobnego rozwiązania jeśli idzie o wykożystanie klas.

Pierwsze moje rozwiązanie wyglądało tak;

  1. <?php
  2. $smarty->register_function("News", "news");
  3. function news() {
  4. include(newsclass.php);
  5.  $news = new News();
  6.  $news->showNews();
  7. }
  8. ?>


Oczywiście rozwiązanie nie jest zbyt fortunne bo nie poto tworzy się klasy żeby do każdą metodę odpowiedzialną za wyświetlanie czegoś pakować do funkcji. Drugie rozwiązanie też raczej złe :

  1. <?php
  2. $smarty->display(siteHeader.tpl);
  3. $news->showNews();
  4. $comm->showComm();
  5. $smarty->display(siteFooter.tpl);
  6. ?>


Tutaj teoretycznie to rozwiązanie mimo wad (rozwalenie indexu na dwie polowy) dalo by radę tylko w polowie. Bo gdybym chcial osadzić obydwie metody w osobnych divach tak jak w pierwszym przykładzie musiałbym nieziemsko kombinować w szablonach. Ale przeciez nie o to chodzi.

No i tutaj moja proźba, gyby ktoś mógł wskazać mi drogę która pewnie jest dość oczywista i prosta ale sam jakoś tego nie mogę wykombinować.

elo rap guitar.gif winksmiley.jpg
crash
Przypisz sobie utworzone obiekty do szablonu Smarty (assign) i odwołuj się do nich wewnątrz tego szablonu... Oczywiście Twoje klasy (np. News) nie generują same z siebie kodu HTML?
anopak
zgodnie z Manualem SMARTY

Kod
The php-function callback impl can be either

   1.

      a string containing the function name
   2.

      an array of the form array(&$object, $method) with &$object being a reference to an object and $method being a string containing the method-name
   3.

      an array of the form array(&$class, $method) with $class being a classname and $method being a class method of that class.


Czyli po Polskiemu:
  1. <?php
  2.  
  3. $smarty->register_function("ShowNews", array(&$news,"shownews"));
  4.  
  5. ?>



W ten sposób powinno to działać bez zarzutu....
Maslav
O faktycznie. To jest rozwiązanie. Dzięki serdeczne.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.