Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]klasa gallery
Forum PHP.pl > Forum > Przedszkole
devil-war
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. ?>
guilty82
Napewno wygląda "niebiesko" smile.gif

Sprobuj
  1. <?php
  2. class gallery{
  3.  
  4. private $baza;
  5. var $image;
  6. ...
  7. ?>
devil-war
jakos niewiem jak to zrobic ;p
tiraeth
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?
guilty82
tutaj jest odpowiedz smile.gif
devil-war
dziekuje za sugestie


hmmm

Var mam używać tylko jak zmienna znajduje się w konstruktorze questionmark.gif?
tiraeth
W PHP5 w ogóle nie używasz var. Od tego masz odpowiednie public, private oraz protected.
devil-war
acha dziękuje bardzo za pomoc

Kod poprawiłem

czy teraz ma jakieś lepsze standardy questionmark.gif
drPayton
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
devil-war
Czy mogę użyć zwykłego include();

bo innego pomysłu nie mam
Shili
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.
drPayton
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])
devil-war
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
drPayton
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
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.