![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 1 Dołączył: 15.07.2008 Ostrzeżenie: (0%)
|
W jednym za artykułów przeczytałem o takim tworzeniu widoku:
Kod class WebPage{ private $pageController; private $controllerStyle; private $page=''; public function __construct(PageController $pageController){ $this->pageController=$pageController; $this->controllerStyle=$pageController->getStyle(); } public function doHeader(){ $this->page='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><link rel="stylesheet" href="defaultstyle.css" type="text/css" /><title>Sample Web Page</title></head>'; } public function doBody(){ $this->page.='<body><div id="header"><h1>Header section</h1></div><div id="navbar"><ul><li><a href="#" title="Link 1">Link 1</a></li><li><a href="#" title="Link 2">Link 2</a></li><li><a href="#" title="Link 3">Link 3</a></li><li><a href="#" title="Link 4">Link 4</a></li><li><a href="#" title="Link 5">Link 5</a></li><li><a href="#" title="Link 6">Link 6</a></li></ul></div><div id="leftcol"><h1>Left column</h1></div><div id="centercol"><h1>Center column</h1></div><div id="rightcol"><h1>Right column</h1></div>'; } public function doFooter(){ $this->page.='<div id="footer"><h1>Footer section</h1></div></body></html>'; } public function getPage(){ return $this->page; } public function getControllerStyle(){ return $this->controllerStyle; } } Czy tak powinno się tworzyć klasy widoku czy jest na to może inny lepszy sposób? |
|
|
|
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 1 657 Pomógł: 125 Dołączył: 29.04.2006 Ostrzeżenie: (0%)
|
to NIE jest widok, tylko klasa do obsługi layoutu/widoku.
Ten post edytował radex_p 15.07.2008, 18:53:12 |
|
|
|
Post
#3
|
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 |
1. popraw bbcode, ponieważ teraz nie da się tego przeczytać. Zamiast code użyj php.
2. Bardzo słaby przykład. Szukaj dalej. 3. IMHO powinno to wyglądać mniej więcej tak. Zapis jest w znacznej mierze koncepcyjny, więc nie bierz go dosłownie.
A plik widoku, to zwykły html, do którego przekazujesz odpowiednie zmienne. |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 6 Dołączył: 23.03.2008 Skąd: Szczecin Ostrzeżenie: (0%)
|
Najlepiej zajrzeć jak to działa w przykładowym frameworku (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . To bardzo pomaga w zrozumieniu tych mechanizmów (nie mówię, że od razu zaczniesz stukać pięknie kod, ale załapiesz podstawy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ). Aha, polecam Kohana (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
|
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 1 Dołączył: 15.07.2008 Ostrzeżenie: (0%)
|
Czyli sam widok ma wyglądać jak plik html z małymi (choć licznymi w tym przypadku) kawałkami kodu php który już ma przypisaną wartość?
|
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%)
|
ciach @batmanie, spierałbym się - sama klasa widoku nie powinna udostępniać takich metod - powinna się skupić raczej na wybieraniu szablonów, przyjmowaniu zmiennych etc. działań istotnych dla Widoku jako takiego. Natomiast klasy dziedziczące to inna sprawa, one mogą być już wyspecjalizowane. Czyli:
Oczywiście to w kontekście bardzo prostej implementacji MVC. Ten post edytował LBO 15.07.2008, 20:17:14 |
|
|
|
Post
#7
|
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 |
Cytat @batmanie, spierałbym się (...) Oczywiście to w kontekście bardzo prostej implementacji MVC. MVC można interpretować na wiele sposobów i każdy z nich będzie dobry (oczywiście w granicach rozsądku). Podejść do jednego problemu może być wiele. Poza tym kod, który podałem, nie jest wyznacznikiem jak klasa widoku powinna wyglądać, a jedynie luźną propozycją. Mimo to, pozostawiłbym w tej klasie takie metody jak dodawanie skryptów, czy stylów.
|
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 18 Dołączył: 19.04.2008 Ostrzeżenie: (10%)
|
Sposob w Smarty jest absolutnie wystarczajacy i wygodny, takze polecam sie wzorowac na nim, jesli juz.
A o przykladzie jaki znalazles z kodem: doBody(){ $this->page.='<body><div .... po prostu ZAPOMNIJ. Tak samo kod powyzej z function setTitle() , addScript() itd, no chyba nie bede do kazdego nowego elementu na stronie robil sobie funkcji hehe, takze przyjmuje to jako zart. Ten post edytował cbagov 15.07.2008, 22:18:11 |
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%)
|
Mimo to, pozostawiłbym w tej klasie takie metody jak dodawanie skryptów, czy stylów. A wyjaśnij mi po co mi, w CSV, XML czy podobnych, skrypt lub style? Chyba zbyt się uzależniłeś, że widok, to html. Do tego nie wiem czy u mnie bym przekonał grafika aby zaglądał do kodu PHP, aby zmienić sobie style... (chyba że inaczej byś to rozwiązał niż wydaje się mi że jest) EDIT dodałem dwa przecinki dla poprawienia czytelności. Ten post edytował Sedziwoj 16.07.2008, 12:45:56 |
|
|
|
Post
#10
|
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 1 Dołączył: 15.07.2008 Ostrzeżenie: (0%)
|
Nie chcę być nieuprzejmy ale po waszej rozmowie już nic nie rozumiem.
|
|
|
|
Post
#11
|
|
|
Grupa: Zarejestrowani Postów: 662 Pomógł: 45 Dołączył: 26.03.2007 Skąd: Warszawa Ostrzeżenie: (0%)
|
@Sedziwoj - Dodawanie tych metod w klasie nie jest dobrym pomysłem. W końcu po to oddziela się widok od modelu czy kontrolera. Ale danie w widoku np.:
Kod <?php $html->js('nazwa'); ?> czy np. na systemie szablonów Kod {html js='nazwa'} Nie jest utrudnieniem nawet dla grafika, a ułatwia pracę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Nie trzeba podawać ścieżki do pliku itp. Ja u siebie w widoku mam do obsługi html tylko 3 funkcje - doctype,base,style,js. Te które używa się w każdym projekcie a nie chce się za każdym razem pisać tego samego. |
|
|
|
Post
#12
|
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%)
|
@moli, ale tu nie o to chodzi w dyskusji. Rzecz w tym, żeby nie tworzyć podstawowego Widoku zorientowanego na HTML.
Ja nie mam nic przeciwko, tylko, żeby była możliwość posiadać widoki innych typów (Json, XML etc). |
|
|
|
Post
#13
|
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%)
|
Nie jest utrudnieniem nawet dla grafika, a ułatwia pracę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Nie trzeba podawać ścieżki do pliku itp. Dokładnie, to co należy do konkretnej specyfikacji wypada do niej, można stosować władowanie js/css w PHP ale to też muszą być szablony (w sensie pliki zewnętrzne), aby grafik bez problemu mógł je sobie zmieniać, a nie mnie ciągle męczyć. To właśnie doskonale widać co jest dobrym rozwiązaniem, a co nie, kiedy widok, prezentację danych tworzy inna osoba, która nie wsadza nosa w to co my robimy. Bo o to chodzi w tej idei, rozdzielenie warstw, aby ułatwić. |
|
|
|
Post
#14
|
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 |
Cytat A wyjaśnij mi po co mi, w CSV, XML czy podobnych, skrypt lub style? Zawsze można nieco zmodyfikować mój przykład
Analogicznie można utworzyć klasy XmlView, czy CsvView, które będą posiadały odpowiednie metody. Cytat Nie jest utrudnieniem nawet dla grafika, a ułatwia pracę Dokładnie o to mi chodziło. Metody przyjmowałyby jedynie nazwy plików, a nie ich zawartość. Wówczas edycja styli nie sprawi problemów grafikowi. Cytat Nie chcę być nieuprzejmy ale po waszej rozmowie już nic nie rozumiem. Trochę się zapędziliśmy w dyskusji (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Ogólnie chodzi o to, by klasa widoku nie zawierała kodu html. Jest to najgorsze z możliwych rozwiązań. Klasa taka powinna umożliwiać dodawanie zmiennych do widoku, które zostaną w nim wyświetlone lub dołączanie stylów, czy js. A sam plik widoku to, w najprostszej wersji, najzwyklejszy plik html z instrukcjami echo $jakas_zmienna. |
|
|
|
Post
#15
|
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. |
Warstwa prezentacji dzieli się moim zdaniem na dwa etapy:
1. Logika prezentacji 2. Treść widoku Pierwszy to właśnie jakaś klasa View, z której wyprowadza się pochodne HtmlView, XmlView itd. Dostarcza metody takiej jak np, setTitle(), setMetaTag() My jednak nie koniecznie używamy ich sami O ile to możliwe, powinien sie tym zająć jakiś ViewManager, który po konsultacji z wpisami w konfiguracji, wypełni je automatycznie. Oczywiście powinniśmy mieć możliwość zmiany tych ustawień w dowolnym momencie (przed samym procesem generowania rzecz jasna). Tu kwestia istotna - systemy takie jak np. Smarty, czy OPT nie należą do logiki prezentacji - one obsługują treść widoku, a więc sam szablon, do którego podstawia się dane. Treść widoku, to jak przed chwila wspomniałem - szablon, najlepiej pasywny, czyli taki, który nie komunikuje się z resztą systemu (ale lepiej mieć możliwość - na wszelki wypadek), a jedynie wyświetla przekazane mu przez logikę prezentacji dane. Czy to będą obiekty, ich kolekcje, czy typy proste - nie ma znaczenia. Gdzie tu miejsce na Smarty? To proste - HtmlView wybiera typ renderingu strony, albo zostaje mu narzucony przez konfigurację (za pośrednictwem ViewManagera) O, jeszcze obrazek - tylko sie nie czepiajcie szczegółów, bo robiłem na szybko (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pozdrawiam. (IMG:http://img294.imageshack.us/img294/929/woooot2.png) Aha, żeby nie było - wiem, że tekst i obrazek nie pokrywają się, ale siła i kierunek powiązań między klasami bywają różne. Ważni są uczestnicy procesu. |
|
|
|
Post
#16
|
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%)
|
Dołączę się do tematu gdyż sam napotkałem na tym etapie pewien problem odnośnie widoku moja classa view:
Chodzi dokładnie o funkcję show() przekazuje do niej przez setContent() treść którą ma wyświetlić z innych klas (news itp.). Jednak w template.tpl będzie jeszcze menu którego struktura jest zależna od danych w bazie, jak przekazać to do show() te dane? Chyba rozumiecie w czym problem? Ten post edytował wlamywacz 16.07.2008, 15:36:27 |
|
|
|
![]() ![]() |
|
Aktualny czas: 21.12.2025 - 18:18 |