Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Dzielenie kodu na części, Szukam sposobu na większą elastyczność
Dual Jack
post 5.02.2013, 23:23:11
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 9.08.2010

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


Witam!
Pracuję w PHP od ponad roku i dopiero niedawno ujrzałem potrzebę dzielenia kodu na części, aby był bardziej zrozumiały.

Mój problem polega na tym, że potrzebuję wykorzystywać bardzo duże partie kodu PHP w layoucie strony, wykonanej w HTML.

Moja witryna składa się z ogromnych ilości plików( każdy plik jest osobną aplikacją do czegoś), tak jak blog jest właśnie includowany do istniejącej strony.

Kawałek pliku blog.php:

  1. <table cellspacing="0" class="blog-notepad">
  2. <tr>
  3. <td class="blog-notepad-left">
  4.  
  5. </td>
  6. <td class="blog-notepad-middle">
  7.  
  8. <?php blog_entry();?>
  9.  
  10. </td>
  11. <td class="blog-notepad-right">
  12.  
  13. <?php blog_panel();?>
  14.  
  15. </td>
  16. </tr>
  17. <tr>
  18. <td class="blog-notepad-bottom-1">
  19.  
  20. </td>
  21. <td class="blog-notepad-bottom-2">
  22.  
  23. <?php blog_navi();?>
  24.  
  25. </td>
  26. <td class="blog-notepad-bottom-3">
  27.  
  28. </td>
  29. </tr>
  30.  
  31. .... reszta kodu PHP
  32.  



Jak widać, layout jest zbudowany z tabelki, a w poszczególne komórki wstawiam funkcje, które są napisane poniżej tabelki.

Problem w tym, że funkcje są mało relatywne z sobą... Wykonują tylko jakąś czynność, a nie mogą ze sobą współgrać.




Pytanie:

W jaki sposób mógłbym zawrzeć kod PHP w bloku i wywoływać go w określonym miejscu, tak, aby wszystkie zmienne ze sobą współgrały.

Innymi słowy chodzi mi o coś, w stylu "include", ale nie z pliku, tylko z tej samej partii kodu.



-- kod 1 --
blah blah blach... duuużo kodu
-- / kod 1 --



Jakiś HTML >

-- wstaw kod 1 --

Jakiś HTML >
Go to the top of the page
+Quote Post
Rysh
post 5.02.2013, 23:38:17
Post #2





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Proponowałbym Ci zaprzyjaźnić się z systemem szablonów lub od razu całym frameworkiem. Na początku troszeczkę topornie ta wiedza wchodzi (przynajmniej tak było w moim przypadku), ale jak już się załapie, to praca staję się o wiele bardziej przyjemna.

Kod php jest oddzielony od kodu html.


--------------------
Go to the top of the page
+Quote Post
7furik7
post 5.02.2013, 23:39:18
Post #3





Grupa: Zarejestrowani
Postów: 61
Pomógł: 1
Dołączył: 23.06.2012

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


mvc?

zaczynasz od tego:
http://www.youtube.com/watch?v=Aw28-krO7ZM
i lecisz do part 10 wink.gif
Go to the top of the page
+Quote Post
Dual Jack
post 5.02.2013, 23:55:07
Post #4





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 9.08.2010

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


Dobra, widzę, że chyba się nie zrozumieliśmy wink.gif

Nie mam zamiaru uczyć się na nowo PHP.


Napisałem taki oto system bloga:

  1. <div class="major-container rounded-5px" style="width:590px; float:left;">
  2.  
  3. <?php
  4.  
  5. require_once('elements/functions/month_id_to_name.php'); // Id miesiąca do nazwy
  6.  
  7. if(!isset($_GET['p']) && !isset($_GET['c'])) { // ####################
  8.  
  9. // Znajduje najświeższy rok i id miesiąca w którym dodano jakiś post na blog'u
  10. $query = "SELECT MAX(entry_month_id), entry_year FROM blog WHERE
  11. entry_year IN (SELECT MAX(entry_year) FROM blog) ";
  12. $result = mysql_query($query) or die(mysql_error());
  13. $row = mysql_fetch_array($result);
  14.  
  15. // jeśli nie jest określony miesiąc i rok (w adresie) w których
  16. // dodano najświeższy post na blogu, określ domyślne za pomocą zmiennych
  17. // wynikowych z funkcji powyżej.
  18. if(!isset($_GET['month']) or !isset($_GET['year']))
  19. { $month = $row[0];
  20. $year = $row[entry_year];
  21. // jeśli zmienne są w adresie
  22. ;} else {
  23. $month = $_GET['month']; # zmienna z adresu
  24. $year = $_GET['year']; # zmienna z adresu
  25. }
  26.  
  27. // Pobierz dane z tabeli
  28. $query = "SELECT * FROM blog WHERE entry_month_id = '".$month."' AND entry_year = '".$year."' ORDER BY entry_day DESC, entry_id DESC";
  29. // Wykonaj $query
  30. $results = mysql_query($query) or die(mysql_error());
  31.  
  32.  
  33. // Wykonaj pętlę dla wszystkich znalezionych wierszy
  34. // ( Stwórz jeden obiekt notatki z dnia )
  35. while($row = mysql_fetch_array($results)) {
  36. extract($row); // Wydziubdziaj mi tu zmienne z bazy danych biggrin.gif
  37. $entry_month = m($month); // Nazwa miesiąca
  38.  
  39. // Pobierz info o kategorii
  40. $result = mysql_query("SELECT cat_title , cat_color FROM categories WHERE cat_id = $entry_cat ");
  41.  
  42. // Wykonaj post wpis dla każdego wiersza z tabeli
  43. echo <<<ENTRY
  44. <div style="position:relative;">
  45. <div $admin_yes id="blog_post_edit" class="rounded-5px">
  46. <a href="?id=blog_post_remove&menu=small&ent_id=$entry_id">usuń</a>
  47. /
  48. <a href="?id=blog_post_update&menu=small&ent_id=$entry_id">edytuj</a>
  49. </div>
  50.  
  51. ... i tak dalej ....
  52.  
  53. </div>





A teraz stwierdziłem, że wygodniej pracowałoby mi się, gdybym miał poszczególne partie kodu PHP w osobnych sekcjach, ale już nie w plikach, ponieważ mam ich za dużo.


Staram się przerobić mój kod na coś w stylu:

  1. <table cellspacing="0" class="blog-notepad">
  2. <tr>
  3. <td class="blog-notepad-left">
  4.  
  5. </td>
  6. <td class="blog-notepad-middle">
  7.  
  8. <?php blog_entry();?>
  9.  
  10. </td>
  11. <td class="blog-notepad-right">
  12.  
  13. <?php blog_panel();?>
  14.  
  15. </td>
  16. </tr>
  17. <tr>
  18. <td class="blog-notepad-bottom-1">
  19.  
  20. </td>
  21. <td class="blog-notepad-bottom-2">
  22.  
  23. <?php blog_navi();?>
  24.  
  25. </td>
  26. <td class="blog-notepad-bottom-3">
  27.  
  28. </td>
  29. </tr>
  30. </table>
  31.  
  32.  
  33. <?php
  34.  
  35. function blog_entry(){
  36.  
  37. global $admin_yes, $admin_no, $a_y, $a_n; // bierz zmienne z poza funkcji
  38.  
  39. // Znajduje najświeższy rok i id miesiąca w którym dodano jakiś post na blog'u
  40. $query = "SELECT MAX(entry_month_id), entry_year FROM blog WHERE
  41. entry_year IN (SELECT MAX(entry_year) FROM blog) ";
  42. $result = mysql_query($query) or die(mysql_error());
  43. $row = mysql_fetch_array($result);
  44.  
  45. // jeśli nie jest określony miesiąc i rok (w adresie) w których
  46. // dodano najświeższy post na blogu, określ domyślne za pomocą zmiennych
  47. // wynikowych z funkcji powyżej.
  48. if(!isset($_GET['month']) or !isset($_GET['year']))
  49. {
  50. $month = $row[0];
  51. $year = $row[entry_year];
  52. // jeśli zmienne są w adresie
  53. }
  54. else
  55. {
  56. $month = $_GET['month']; # zmienna z adresu
  57. $year = $_GET['year']; # zmienna z adresu
  58. }
  59.  
  60. if(isset($_GET['p'])) // Rodzaj pobierania danych ( cały miesiąc, czy tylko jeden post )
  61. {
  62. // Pobierz dane z tabeli
  63. $query = "SELECT * FROM blog WHERE entry_id = '".$_GET['p']."' ";
  64. // Wykonuj $query
  65. $results = mysql_query($query) or die(mysql_error());
  66. }
  67. else
  68. {
  69. // Pobierz dane z tabeli
  70. $query = "SELECT * FROM blog WHERE entry_month_id = '".$month."' AND entry_year = '".$year."' ORDER BY entry_day DESC, entry_id DESC";
  71. // Wykonaj $query
  72. $results = mysql_query($query) or die(mysql_error());
  73. }
  74.  
  75.  
  76. // Wykonaj pętlę dla wszystkich znalezionych wierszy
  77. // ( Stwórz jeden obiekt notatki z dnia )
  78. while($row = mysql_fetch_array($results)) {
  79. extract($row); // Wydziubdziaj mi tu zmienne z bazy danych biggrin.gif
  80. $entry_month = m($entry_month_id); // Nazwa miesiąca
  81.  
  82. // Pobierz info o kategorii
  83. $result = mysql_query("SELECT cat_title , cat_color FROM categories WHERE cat_id = $entry_cat ");
  84.  
  85.  
  86. echo <<<EBC
  87. <div class="blog-notepad-entry">
  88. <div class="header">
  89. <div class="day rounded-5px">
  90. <span style="font-size:12px;font-weight:bold">
  91. $entry_day
  92. </span>
  93. <span style="font-size:12px">
  94. $entry_month
  95. </span>
  96. <span style="font-size:12px">
  97. $entry_year
  98. </span>
  99. </div>
  100.  
  101. <div class="category">
  102. kategoria:
  103. <img src="elements/images/cat.png" width="10" height="10" style="background-color:$cat_color;dislay:inline;">
  104. <a href="?c=$entry_cat" style="color:black;">$cat_title</a>
  105. </div>
  106.  
  107. ..... i tak dalej .....
  108.  
  109. ?>
  110.  




Tylko, że tworząc funkcje, tworzone w nich zmienne nie wychodzą an zewnątrz, a nie chcę się bawić w "return" i ładowanie zwróconych argumentów do kolejnych funkcji ( function zjedz_ciastko(jeden,dwa,trzy){} ).

Potrzebuję ładnego rozwiązania do umieszczania kodu w obiektach i ładowanie ich w dane miejsce.
Go to the top of the page
+Quote Post
Damonsson
post 5.02.2013, 23:57:25
Post #5





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Cytat
Nie mam zamiaru uczyć się na nowo PHP.

Cytat
Potrzebuję ładnego rozwiązania do umieszczania kodu w obiektach i ładowanie ich w dane miejsce.


Te 2 zdania nie mogą ze sobą współżyć, przykro mi wink.gif

Ten post edytował Damonsson 5.02.2013, 23:57:58
Go to the top of the page
+Quote Post
Dual Jack
post 6.02.2013, 00:02:51
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 9.08.2010

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


Tak, wiem, brzmi to jak paradoks, ale nie wiem, w jaki sposób wytłumaczyć Wam, że nie widzę potrzeby oglądania całych poradników o tworzeniu aplikacji w PHP, napotykając tylko jeden, nieestetyczny problem.

Nie wierzę, że nie ma możliwości importowania kodu w inne miejsce, jak tylko korzystając z funkcji include, require, etc.

Musi być na to jakiś sposób.
Go to the top of the page
+Quote Post
Damonsson
post 6.02.2013, 00:12:38
Post #7





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Możesz stworzyć może jakiś autoloader(słowo klucz do google) itp, ale robienie tego w twoim kodzie, to trochę jak rzeźbienie sam wiesz w czym. Z drugiej strony przepisywać to na obiektowo, to też nie lada wyczyn, dla kogoś kto pisze strukturalnie.

Ten post edytował Damonsson 6.02.2013, 00:13:11
Go to the top of the page
+Quote Post
Dual Jack
post 6.02.2013, 00:25:16
Post #8





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 9.08.2010

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


Cóż, chyba pozostaje mi includowanie tych kawałków kodu z zewnętrznych plików.

Najwyżej utonę w dużej ilości plików i folderów.

Chciałem się od tego ustrzec, ponieważ moim zdaniem ciężko pracuje się na kilkunastu otwartych jednocześnie dokumentach, a mówiąc młodzieżowo: nie ogarniam programowania obiektowego w PHP. Jest dla mnie za trudne, jak na moje zapotrzebowania, co do programowania w tym języku.


Dziękuję za wszystkie odpowiedzi i zainteresowanie się tematem.
Pozdrawiam!

Go to the top of the page
+Quote Post
7furik7
post 6.02.2013, 00:42:08
Post #9





Grupa: Zarejestrowani
Postów: 61
Pomógł: 1
Dołączył: 23.06.2012

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


Cytat
Pracuję w PHP od ponad roku i dopiero niedawno ujrzałem potrzebę dzielenia kodu na części, aby był bardziej zrozumiały.

1. myślałem że sie uczysz php na tym przykladzie. kolejnym krokiem byłoby wg mnie obiektowka i własnie mvc.
2. nie mówi się że coś jest za trudne. Nigdy biggrin.gif

pzdr smile.gif

Go to the top of the page
+Quote Post
Dual Jack
post 6.02.2013, 01:15:18
Post #10





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 9.08.2010

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


Cytat
myślałem że sie uczysz php na tym przykladzie. kolejnym krokiem byłoby wg mnie obiektowka i własnie mvc.


Nie, nie, programować potrafię już od dawna, a aplikacja jest napisana przeze mnie w całości, tylko wstyd jest mi się przyznać, że właśnie odpuściłem naukę obiektowego programowania i myślałem, że jest na to jakieś inne, estetyczne rozwiązanie.

Coś jak kod zamknięty w kapsułce, którą mogę otworzyć w dowolnym miejscu. Coś jak funkcja "include", ale z wykorzystaniem kodu z tego samego pliku, a nie z zewnątrz. Coś jak skrót, który pozwoli mi na utrzymanie większego porządku w kodzie.

Nie chcę mieszać html'a z php w jednej sekcji, jak tutaj:

<div>
<div>tekst tekst tekst</div>
<div>

<?php --- BARDZO obszerny kod PHP ?>
</div>
</div>




Wolałbym tak:

<div>
<div>tekst tekst tekst</div>
<div>

<?php <- wklej tutaj kod nr. 1 ?>
</div>
</div>


<?php

kod nr. 1 {

--- BARDZO obszerny kod PHP

}


?>
Go to the top of the page
+Quote Post
CuteOne
post 6.02.2013, 02:21:19
Post #11





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Rozdziel kod na wykonywalny (czysty PHP) i statyczny - szablony HTML

np. za pomocą SMARTY
  1. {foreach from=$rows item=item}
  2. <tr>
  3. <td>{$item.title}</td>
  4. <td>{$item.text}</td>
  5. </tr>

  1. $query = mysql_query("SELECT `title`, `text` FROM tabela WHERE x = 1");
  2.  
  3. $array = array();
  4. while($row = mysql_fetch_array($query)) {
  5.  
  6. $array[] = $row;
  7. }
  8.  
  9. $smarty -> assign('rows', $array);


Chociaż i to rozwiązanie ma wiele wad, o których przekonasz się podczas próby edycji czegokolwiek smile.gif


Ten post edytował CuteOne 6.02.2013, 02:22:58
Go to the top of the page
+Quote Post
Posio
post 6.02.2013, 11:22:02
Post #12





Grupa: Zarejestrowani
Postów: 417
Pomógł: 44
Dołączył: 23.06.2011

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


ja nie wiem, dlaczego nie chcesz ogarnąć jakiegos FW ? myślę, że powinno to rozwiązać wszystkie twoje problemy z kodem.
Go to the top of the page
+Quote Post
!*!
post 7.02.2013, 17:18:52
Post #13





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Dual Jack - to jest właśnie ta chwila w której musisz podjąć decyzję, czy uczysz się OOP, czy olewasz PHP i zostajesz z tym co masz bez możliwości rozwoju.
Jak wybierzesz wariant pierwszy, to może skorzystaj z http://ellislab.com/codeigniter jest banalny do zrozumienia.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
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: 5.06.2025 - 21:31