Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Klasa - problem z wstawianiem danych z zmiennych
Forum PHP.pl > Forum > Przedszkole
henio
Utworzyłem klasę:
Fragment kodu:
  1. <?php
  2.  
  3. class strona_szkielet {
  4.  
  5. // Atrybuty klasy strona_szkielet
  6. public $zawartosc;
  7. public $tytul;
  8. public $slowa_kluczowe;
  9. public $meta_opis;
  10.  
  11. // Operacje klasy Strona
  12. public function __set($nazwa, $wartosc)
  13. {
  14. $this->$nazwa = $wartosc;
  15. }
  16.  
  17. // Główna funkcja, odpowiadaj&plusmn;ca za wy&para;wietlenie cało&para;ci
  18. public function wyswietl()
  19. {
  20. ?>
  21. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  22. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  23. <html xmlns="http://www.w3.org/1999/xhtml">
  24. <head>
  25. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  26. <meta name="robots" content="index, follow" />
  27. <meta name="author" content="Content Management System created by ------" />
  28. <meta name="copyright" content="Copyright (c) 2008. All rights reserved!" />
  29. <?php
  30. echo " <meta name=\"description\" content=\"".$this->meta_opis."\" />\n";
  31. echo " <meta name=\"keywords\" content=\"".$this->slowa_kluczowe."\" />\n";
  32. $this->wyswietl_style();
  33. $this->wyswietl_javascript();
  34. echo " <title>".$this->tytul."</title>\n";
  35. ?>
  36. </head>
  37. <body>
  38. <?php
  39. $this->wyswietl_logo();
  40. $this->wyswietl_menu();
  41. ?>
  42. <div id="documentContent">
  43. <?php
  44. $this->wyswietl_lewa_strona();
  45. echo $this->zawartosc;
  46. $this->wyswietl_prawa_strona();
  47. ?>
  48. </div>
  49. <?php
  50. $this->wyswietl_stopka();
  51. ?>
  52. </body>
  53. </html>
  54. <?php
  55. }


I potem ją wywołuje:

  1. <?php
  2. // Zał&plusmn;czenie klasy odpowiedzialnej za szkielet strony
  3. require("strona_szkielet.class.php");
  4.  
  5. // Zał&plusmn;czenie pliku odpowiadaj&plusmn;cego za poł&plusmn;czenie z baz&plusmn; danych MySQL
  6. require("baza.php");
  7.  
  8. $stronaglowna = new strona_szkielet();
  9.  
  10. $stronaglowna->tytul = "ble";
  11.  
  12. $stronaglowna->meta_opis = "ble.";
  13.  
  14. $stronaglowna->slowa_kluczowe = "ble";
  15.  
  16. $stronaglowna->zawartosc = "cos";
  17. ?>

I tu pojawia się problem bo chce do tego fragmentu zawartość wrzucić dane z bazy danych no i z tym jest problem bo wyskakuje błąd T_CLASS gdy to wklejam miedzy cudzysłow tam gdzie jest napis cos. Pytanie jak to zrobić, aby działało.

  1. <?php
  2. $zapytanie = mysqli_query($mysql, "SELECT tytul, tresc, data, id_uzytkownik, zrodlo, obrazek
  3.  FROM newsy
  4.  WHERE rodzaj_newsa = \"wydarzenie\"
  5.  ORDER BY data DESC
  6.  LIMIT 1")
  7.  or die("Zapytanie jest błędne");
  8.  
  9. while($rekord = mysqli_fetch_assoc($zapytanie))
  10. {
  11. <div class=&#092;"docBlock\">
  12. <div class=&#092;"blockHeader\">.Wydarzenie dnia</div>
  13. <div class=&#092;"blockContent\">
  14. <div class=&#092;"newsOfDay\">
  15.  <div class=&#092;"newsTitle\">".stripslashes(trim($rekord['tytul']))."</div>
  16. <div class=&#092;"newsInfo\">Dodany ".trim($rekord['data'])." przez ".$rekord['id_uzytkownik']."</div>
  17.  <div class=&#092;"newsSource\">(".trim($rekord['zrodlo']).")</div>
  18. </div>
  19. </div>
  20. </div>
  21. <div class=&#092;"contentData1\">
  22. <div class=&#092;"news\">
  23. <img src=&#092;"".$rekord['obrazek']."\" alt=\"\" />
  24. ".stripslashes(trim($rekord['tresc']))."
  25. <a href=&#092;"#\" class=\"more\">[czytaj&nbsp;więcej]</a>
  26. </div>
  27. </div>
  28. }
  29. ?>


Oczywiście zawartość jest znacznie dłuższa niż napis cos
dadexix
  1. <?php
  2. // Zał&plusmn;czenie klasy odpowiedzialnej za szkielet strony
  3. require("strona_szkielet.class.php");
  4.  
  5. // Zał&plusmn;czenie pliku odpowiadaj&plusmn;cego za poł&plusmn;czenie z baz&plusmn; danych MySQL
  6. require("baza.php");
  7.  
  8. $stronaglowna = new strona_szkielet();
  9.  
  10. $stronaglowna->tytul = "ble";
  11.  
  12. $stronaglowna->meta_opis = "ble.";
  13.  
  14. $stronaglowna->slowa_kluczowe = "ble";
  15. $var = pobieramy_dane_z_bazy();
  16. $stronaglowna->zawartosc = $var;
  17. ?>
.radex
Kompletnie nie mam pojęcia po co ci __set, skoro wykonujesz w nim takie same operacje, jakby tego __set nie było. Może czegoś nie zaczaiłem (nie będę analizował całej klasy w poszukiwaniu jakichś kwiatków tongue.gif), ale wydaje mi się ta funkcja składowa (metoda) zbędna.
Crozin
Wewnątrz klasy nie możesz przerwać bloku PHP.

Możesz to zrobić tak:
1) Do osobnego pliku .txt (np.: szkielet_stron.txt) wstawić:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  6. <meta name="robots" content="index, follow" />
  7. <meta name="author" content="Content Management System created by ------" />
  8. <meta name="copyright" content="Copyright (c) 2008. All rights reserved!" />
  9. <meta name="description" content="%s" />
  10. <meta name="keywords" content="%s" />
  11. %s
  12. %s
  13. <title>%s</title>
  14. </head>
  15. <body>
  16. %s
  17. %s
  18. <div id="documentContent">
  19. %s
  20. %s
  21. %s
  22. </div>
  23. %s
  24. </body>
  25. </html>
A w klasie:
  1. <?
  2. public function wyswietl(){
  3. $contents = file_get_contents('szkielet_stron.txt');
  4. $contents = vsprintf($contents, array(
  5. $this->meta_opis,
  6. $this->slowa_kluczowe,
  7. $this->wyswietl_style(),
  8. $this->wyswietl_javascript(),
  9. $this->tytul,
  10. $this->wyswietl_logo(),
  11. $this->wyswietl_menu(),
  12. $this->wyswietl_lewa_strona(),
  13. $this->zawartosc,
  14. $this->wyswietl_prawa_strona(),
  15. $this->wyswietl_stopka()
  16. ));
  17. }
  18. ?>
Z tym, że wszystkie Twoje motody jak rozumiem mają mniej-więcej taką formę:
  1. <?
  2. [public|protected|private] function wyswietl_stopka(){
  3. echo 'jakies_tam_wraznie' . $laczace_zmienne . ' - wiesz o co chodzi biggrin.gif';
  4. }
  5. ?>
No to zamieniasz tylko echo na return.
henio
Troche popracowałem:
I mam taki kłopot:
  1. <?php
  2. function pobierz_bd()
  3. {
  4.  
  5. // Zał&plusmn;czenie pliku odpowiadaj&plusmn;cego za poł&plusmn;czenie z baz&plusmn; danych MySQL
  6. require("baza.php");
  7.  
  8. $zapytanie01 = mysqli_query($mysql, "SELECT id_menu_1, link, napis, czy_ma_2_poziom
  9.  FROM menu_1_poziom
  10.  ORDER BY kolejnosc ASC")
  11.  or die ("Zapytanie jest błędne");
  12.  
  13. while($rekord01 = mysqli_fetch_assoc($zapytanie01))
  14. {
  15.  
  16. if($rekord01['czy_ma_2_poziom'] == "TAK")
  17. {
  18. echo " <li id=\"poziom1\">\n";
  19. echo " ".$rekord01['napis']."\n";
  20. echo " <ul>\n";
  21.  
  22.  $zapytanie02 = mysqli_query($mysql, "SELECT id_menu_2, link, napis, czy_ma_3_poziom
  23. FROM menu_2_poziom
  24. WHERE id_menu_1 = \"".$rekord01['id_menu_1']."\"
  25. ORDER BY kolejnosc ASC")
  26. or die ("Zapytanie jest błędne");
  27.  
  28.  while($rekord02 = mysqli_fetch_assoc($zapytanie02))
  29.  {
  30.  
  31.  if($rekord02['czy_ma_3_poziom'] == "TAK")
  32.  {
  33. echo " <li>\n";
  34. echo "  ".$rekord02['napis']."\n";
  35. echo " <ul>\n";
  36.  
  37.  $zapytanie03 = mysqli_query($mysql, "SELECT id_menu_3, link, napis, czy_ma_4_poziom
  38. FROM menu_3_poziom
  39. WHERE id_menu_2 = \"".$rekord02['id_menu_2']."\"
  40. ORDER BY kolejnosc ASC")
  41. or die ("Zapytanie jest błędne");
  42.  
  43.  while($rekord03 = mysqli_fetch_assoc($zapytanie03))
  44.  {
  45.  
  46.  if($rekord03['czy_ma_4_poziom'] == "TAK")
  47.  {
  48. echo " <li>\n";
  49. echo " ".$rekord03['napis']."\n";
  50. echo " <ul>\n";
  51.  
  52.  $zapytanie04 = mysqli_query($mysql, "SELECT link, napis
  53. FROM menu_4_poziom
  54. WHERE id_menu_3 = \"".$rekord03['id_menu_3']."\"
  55. ORDER BY kolejnosc ASC")
  56. or die ("Zapytanie jest błędne");
  57.  
  58.  while($rekord04 = mysqli_fetch_assoc($zapytanie04))
  59.  {
  60. echo " <li>\n";
  61. echo " <a href=\"".$rekord04['link']."\">".$rekord04['napis']."</a>\n";
  62. echo " </li>\n";
  63.  }
  64. echo " </ul>\n";
  65. echo " </li>\n";
  66.  }
  67.  elseif($rekord03['czy_ma_4_poziom'] == "NIE")
  68.  {
  69. echo " <li>\n";
  70. echo " <a href=\"".$rekord03['link']."\">".$rekord03['napis']."</a>\n";
  71. echo " </li>\n";
  72.  }
  73.  }
  74. echo " </ul>\n";
  75. echo " </li>\n";
  76.  }
  77.  elseif($rekord02['czy_ma_3_poziom'] == "NIE")
  78.  {
  79. echo " <li>\n";
  80. echo " <a href=\"".$rekord02['link']."\">".$rekord02['napis']."</a>\n";
  81. echo " </li>\n";
  82.  }
  83.  }
  84. echo " </ul>\n";
  85. echo " </li>\n";
  86. }
  87. elseif($rekord01['czy_ma_2_poziom'] == "NIE")
  88. {
  89. echo " <li id=\"poziom1\">\n";
  90. echo " <a href=\"".$rekord01['link']."\">".$rekord01['napis']."</a>\n";
  91. echo " </li>\n";
  92. }
  93. }
  94. }
  95. ?>

Chciałbym aby ta funkcja wyświetlała się tu: $mapa->tresc_z_bd = "a";

  1. <?php
  2. $mapa = new strona_szkielet_2();
  3.  
  4. $mapa -> tytul = "Mapa strony";
  5.  
  6. $mapa -> tytul_podstrona = "Mapa strony - ArsenalLondyn.eu";
  7.  
  8. $mapa -> meta_opis = "Mapa strony ArsenalLondyn.eu jest miejscem, gdzie znajdują się linki do każ
    dego 
  9. iejsca serwisu.";
  10.  
  11. $mapa -> slowa_kluczowe = "Mapa strony, ArsenalLondyn.eu";
  12.  
  13. $mapa -> tresc_z_bd = "a";
  14.  
  15. $mapa -> wyswietl();
  16. ?>

Gdy zamiast "a" wpiszę pobierz_bd() to dane wyświetlają się nad stroną. Chodzi mi więc o pomoc w przerobieniu tej 'funkcji' tak aby nie wyświetlała danych wcześniej niż w tym miejscu co wskazuje.
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.