Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]klasa gallery
devil-war
post 19.09.2008, 12:18:29
Post #1





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 1.08.2008

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


Czy ten kod wygląda na obiektowy

Prosze o opinie

  1. <?php
  2. class gallery{
  3.  
  4. private $baza;//Laczenie z baza
  5. public  $biblioteka = '1';
  6.  
  7.  
  8. function __construct(sqlcon $baza,$type,functions $fun,$biblioteka)
  9. {
  10. $this->db = $baza;
  11. $this->id_type = $type;
  12. $this->func = $fun;
  13. $this->libary = $biblioteka;
  14. }
  15.  
  16. public function show_folders($image){
  17.  
  18. $galeria = $this->db->query('SELECT * FROM '.DB_PREFIX.'gallery_folders WHERE `folder_id_type`= '.intval($this->id_type).'');
  19. WHILE($g = $this->db->fetch_assoc($galeria)){
  20.  
  21. $g_t = array('folder_id' => $g['id'],
  22. 'folder_nazwa' => $g['folder_nazwa'],
  23. 'folder_naz_t' => $this->func->utnij($g['folder_nazwa'],'12'));
  24.  
  25. echo' <div class="zdjecie">
  26. <a href="gallery.php?act=open_folder&folder_id='.$g['id'].'"><img src="'.$image.'"
  27.                border="0" alt="'.$g['folder_nazwa'].'"></a><br />
  28.               <a href="gallery.php?act=open_folder&folder_id='.$g['id'].'">'.$this->func->utnij($g['folder_nazwa'],'12').'</a>
  29.               </div>';
  30.  
  31.  
  32. }
  33. }
  34. public function show_photos($id){
  35.  
  36. $this->id = $id;
  37.  
  38. $query = $this->db->query('SELECT * FROM '.DB_PREFIX.'gallery WHERE `folder_id` = '.intval($this->id).'');
  39.  
  40. $q = $this->db->query('SELECT * FROM '.DB_PREFIX.'gallery_folders WHERE `id` = '.intval($this->id).'');
  41. while($qq=$this->db->fetch_assoc($q)){
  42. echo '<B>ť</B> <b>'.$qq['folder_nazwa'].'<b>';
  43. }
  44. echo '<br><br>';
  45.  
  46. while($g=$this->db->fetch_assoc($query)){
  47.  
  48. if($this->libary == '1')
  49. {
  50. $bib = 'lightbox[roadtrip]';
  51. }
  52. elseif($this->libary == '2')
  53. {
  54. $bib = 'lytebox[vacation]';
  55. }
  56. elseif($this->libary == '3')
  57. {
  58. $bib = 'lightbox[atomium]';
  59. }
  60.  
  61. elseif($this->libary == '4')
  62. {
  63. $bib = 'prettyPhoto[gallery]';
  64. }
  65.  
  66. echo '<a href="'.$g['big_image'].'" border="0" rel="'.$bib.'">
  67. <img border="0" src="'.$g['small_image'].'"  height="80" width="80"></a>';
  68.  
  69.  
  70. }
  71. }
  72. public function load_libary_photos(){
  73.  
  74. if($this->libary == '1')
  75. {
  76. echo'<link rel="stylesheet" href="./scripts/thickbox/css/lightbox.css" type="text/css" media="screen" />
  77. <script src="./scripts/thickbox/js/prototype.js" type="text/javascript"></script>
  78. <script src="./scripts/thickbox/js/scriptaculous.js?load=effects,builder" type="text/javascript"></script>
  79. <script src="./scripts/thickbox/js/lightbox.js" type="text/javascript"></script>';
  80. }
  81. elseif($this->libary == '2')
  82. {
  83. echo'<script type="text/javascript" language="javascript" src="./scripts/lytebox/lytebox.js"></script>
  84. <link rel="stylesheet" href="./scripts/lytebox/lytebox.css" type="text/css" media="screen" />';
  85. }
  86. elseif($this->libary == '3')
  87. {
  88. echo'<script type="text/javascript" src="./scripts/slimbox/js/mootools.js"></script>
  89. <script type="text/javascript" src="./scripts/slimbox/js/slimbox.js"></script>
  90. <link rel="stylesheet" href="./scripts/slimbox/css/slimbox.css" type="text/css" media="screen" />
  91. ';
  92. }
  93.  
  94. elseif($this->libary == '4')
  95. {
  96. echo'<script src="./scripts/bib4/js/jquery.js" type="text/javascript" charset="utf-8"></script>
  97. <link rel="stylesheet" href="./scripts/bib4/css/prettyPhoto.css" type="text/css"
  98. media="screen" title="prettyPhoto main stylesheet" charset="utf-8" />
  99. <script src="./scripts/bib4/js/prettyPhoto.js" type="text/javascript" charset="utf-8"></script>
  100. ';
  101.  
  102. }
  103. echo'<style>
  104. #wrapper {
  105.    widt: 100%;
  106.    clear: both;
  107. }
  108. .zdjecie {
  109.    floa: left;
  110.    text-alig: center;
  111.    paddin: 10px 0;
  112. }
  113. .zdjecie img {
  114.    displa: block;
  115.    margi: 0 10px;
  116. }
  117. </style>';
  118. }
  119.  
  120.  
  121. //Koniec klasy
  122. }
  123. ?>


Ten post edytował devil-war 19.09.2008, 13:28:24
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
guilty82
post 19.09.2008, 12:21:18
Post #2





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

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


Napewno wygląda "niebiesko" smile.gif

Sprobuj
  1. <?php
  2. class gallery{
  3.  
  4. private $baza;
  5. var $image;
  6. ...
  7. ?>
Go to the top of the page
+Quote Post
devil-war
post 19.09.2008, 12:25:32
Post #3





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 1.08.2008

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


jakos niewiem jak to zrobic ;p
Go to the top of the page
+Quote Post
tiraeth
post 19.09.2008, 12:27:55
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Dodaj tag [PHP] w swoim pierwszym poście. O to też chodzi w poście guilty82.

Poza tym, tak wygląda na obiektowy ale standardów się nie trzyma. Poza tym wymieszałeś PHP4 i PHP5. Po co te var?
Go to the top of the page
+Quote Post
guilty82
post 19.09.2008, 12:28:44
Post #5





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

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


tutaj jest odpowiedz smile.gif
Go to the top of the page
+Quote Post
devil-war
post 19.09.2008, 12:31:37
Post #6





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 1.08.2008

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


dziekuje za sugestie


hmmm

Var mam używać tylko jak zmienna znajduje się w konstruktorze questionmark.gif?
Go to the top of the page
+Quote Post
tiraeth
post 19.09.2008, 12:38:40
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


W PHP5 w ogóle nie używasz var. Od tego masz odpowiednie public, private oraz protected.
Go to the top of the page
+Quote Post
devil-war
post 19.09.2008, 12:42:43
Post #8





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 1.08.2008

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


acha dziękuje bardzo za pomoc

Kod poprawiłem

czy teraz ma jakieś lepsze standardy questionmark.gif

Ten post edytował devil-war 19.09.2008, 12:44:33
Go to the top of the page
+Quote Post
drPayton
post 19.09.2008, 12:52:07
Post #9





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


To oczywiście nie jest żaden wymóg, ale dobrym zwyczajem jest by metody klasy wykonywały jedynie pewne operacje, nie wyświetlały zaś treści. Twoja klasa może więc np zwrócić tablicę zawierającą wszelkie potrzebne elementy, a to osobny plik odpowiedzialny za widok niech te treści wyświetli korzystając z podanej tablicy smile.gif
Go to the top of the page
+Quote Post
devil-war
post 19.09.2008, 13:01:37
Post #10





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 1.08.2008

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


Czy mogę użyć zwykłego include();

bo innego pomysłu nie mam
Go to the top of the page
+Quote Post
Shili
post 19.09.2008, 13:05:02
Post #11





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Względnie, jak już ktoś się uprze, żeby cokolwiek wyświetlić, to niech to będzie jakaś jedna metoda show.

Class gallery, a nazwy właściwości, metod i zmiennych wszelakiego typu po polsku. Proponuję przenieść się jednak na ten angielski, w najgorszym przypadku konsekwentnie pisać po polsku. Wszystko.

Baza jak rozumiem jest to obiekt bazy danych?
Jeśli tak, to spokojnie możesz użyć konstrukcji: construct(nazwaKlasyBazyDanych $baza, ...) będziesz miał pewność, że obiekt zawsze i wszędzie bez względu na poziom zmęczenia będzie obiektem bazy danych.

  1. <?php
  2. if($this->biblioteka == '1')
  3. {
  4. $bib = 'lightbox[roadtrip]';
  5. }
  6. if($this->biblioteka == '2')
  7. {
  8. $bib = 'lytebox[vacation]';
  9. }
  10. if($this->biblioteka == '3')
  11. {
  12. $bib = 'lightbox[atomium]';
  13. }
  14.  
  15. if($this->biblioteka == '4')
  16. {
  17. $bib = 'prettyPhoto[gallery]';
  18. }
  19. ?>
Jeśli właściwość $this->biblioteka może być albo 1, albo 2, albo 3, albo 4, to nie stosuj czterech ifów po sobie. Lepiej jest zrobić elseif. W tym przypadku jeśli $this->biblioteka będzie 1 to i tak sprawdzi wszystkie inne warunki, które spokojnie mógłby sobie pominąć.

Poza tym w jakimś tam stopniu wygląda na obiektowy, ale jednocześnie wygląda na straszliwie zakręcony, trudny do modyfikacji i rozbudowy. A to wszystko przez ten spagettowaty kod html w środku.
Go to the top of the page
+Quote Post
drPayton
post 19.09.2008, 13:07:16
Post #12





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Jakiego includa? o_O

np masz jakiś plik sterujący galerią: gallery.php
W nim masz grafikę galerii (tzn html) i wywołujesz tam metody klasy galerii odpowiedzialne za zwrócenie tablicy zdjęć/kategorii etc
I w tym pliku (gallery.php) pętlą po ww tablicy wyświetlasz te foty/kategorie i co tam jeszcze smile.gif

Ma to na celu uporządkowanie kodu i oddzielenie (choćby tak podstawowe, skoro nie mvc) wartstw prezentacji i danych (w powyższym przykładzie na warstwie prezentacji jest kod html w pliku gallery.php a warstwa danych - to klas sterująca galerią. Jej zadaniem jest jedynie zwrócenie odpowiednich danych na podstawie zadanych parametrów [np id kategorii])
Go to the top of the page
+Quote Post
devil-war
post 19.09.2008, 13:18:02
Post #13





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 1.08.2008

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


Rzeczywiście ten if to nie był wspaniały pomysł ,Poprawione dzięki


Z tym widokiem mogę zrobić tablice
  1. <?php
  2. $g_t = array('folder_id' => $g['id'],
  3. 'folder_nazwa' => $g['folder_nazwa'],
  4. 'folder_naz_t' => $this->func->utnij($g['folder_nazwa'],'12'));
  5. ?>


no ale jak ja wykorzystac questionmark.gifquestionmark.gif
Go to the top of the page
+Quote Post
drPayton
post 19.09.2008, 13:30:25
Post #14





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Np tak (tylko idea, kodu pisać nie będę ;P):
W klasie galerii:
1. Metoda getFolders zwraca listę folderów do wyświetlenia juz posortowaną odpowiednio z ew dodatkowymi informacjami (podpis, ilość zdjęć w środku etc). W pliku gallery.php widzisz ją jako, np:
Kod
$aFoldersList = array(
[0] => array (
              [id] => '1',
              [name] => 'folder1',
              [photos] => '23'
           ),
[1] => array (
              [id] => '2',
              [name] => 'folder2',
              [photos] => '2'
           ),
[2] => array (
              [id] => '3',
              [name] => 'folder3',
              [photos] => '42'
           )
)


Iterując po niej wyświetlasz foldery, w analogiczny sposób zdjęcia (inna metoda je zwraca oczywiście winksmiley.jpg

  1. <?php
  2. foreach($aFoldersList AS $sFolder) {
  3.    echo '<a href="gallery.php?folder=' . $sFolder['id'] . '" title="' . $sFolder['name'] . '">' . $sFolder['name'] . ' (Zdjec: ' . $sFolder['photos'] . ')</a>';
  4. }
  5. ?>


etc

Ten post edytował drPayton 19.09.2008, 13:31:18
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 Wersja Lo-Fi Aktualny czas: 18.07.2025 - 02:05