Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Smarty i wyświetlanie klas
Maslav
post
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 6.02.2004

Ostrzeżenie: (0%)
-----


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

Ten post edytował Maslav 20.02.2006, 03:41:39


--------------------
generalfailure
fabrykadrobiu*dot*com
Go to the top of the page
+Quote Post
crash
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
anopak
post
Post #3





Grupa: Zarejestrowani
Postów: 124
Pomógł: 0
Dołączył: 26.10.2004
Skąd: Rybnik

Ostrzeżenie: (0%)
-----


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....


--------------------
Hardware: Celeron 3.06, 512 MB DDR
Software: Apache 2.0, MySQL 4.0, php 4.3.1, Zend 5.1, Firefox
Go to the top of the page
+Quote Post
Maslav
post
Post #4





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 6.02.2004

Ostrzeżenie: (0%)
-----


O faktycznie. To jest rozwiązanie. Dzięki serdeczne.


--------------------
generalfailure
fabrykadrobiu*dot*com
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 02:12