Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyświetlenie 3 ostatnich "news`ow"
fraksipon
post
Post #1





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 18.12.2005

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


Cześć,
Czy ktoś potrafiłby dla mnie wyciągnąc z tego skryptu aktualności możliwość wyświetlenia np: tylko 3 ostatnich wpisów?
Prosze o napisania kodu.

  1. <?php
  2.  
  3.  
  4. require 'config.php';
  5.  
  6. function VerifyTxtFile(){
  7. if(!is_dir("content")) mkdir("content", "0777", true);
  8. if(!file_exists("content/news.txt")) {
  9. $file = fopen("content/coments.txt", "w");
  10. fwrite($file, "");
  11. fclose($file);
  12. }
  13. return true;
  14. }
  15.  
  16.  
  17. function ReadNews(){
  18. VerifyTxtFile();
  19. $fh = fopen("content/news.txt", 'r');
  20. $theData = fgets($fh);
  21. fclose($fh);
  22. return ExplodeNews($theData);
  23. }
  24.  
  25. function ExplodeNews($NewsArray){
  26. $list = array(array());
  27. if($NewsArray == "") return 0;
  28. $Coments = explode("<X-_-X>", $NewsArray);
  29. for($i=0; $i!=sizeof($Coments)-1; $i++){
  30. $Coment = explode("<XXX_>", $Coments[$i]);
  31. $list[$i]['title'] = $Coment[0];
  32. $list[$i]['date'] = $Coment[1];
  33. $list[$i]['resumo'] = $Coment[2];
  34. }
  35. return $list;
  36. }
  37.  
  38. function FindNew($id_new){
  39. VerifyTxtFile();
  40. $fh = fopen("content/news.txt", 'r');
  41. $theData = fgets($fh);
  42. fclose($fh);
  43. $new = array();
  44. $Coments = explode("<X-_-X>", $theData);
  45.  
  46. if($id_new < sizeof($Coments)-1 and $id_new >= 0){
  47.  
  48. $Coment = explode("<XXX_>", $Coments[$id_new]);
  49. $new['title'] = $Coment[0];
  50. $new['date'] = $Coment[1];
  51. $new['completo'] = $Coment[3];
  52. if($Coment[4] != ""){
  53. $new['image'] = $Coment[4];
  54. $new['align'] = $Coment[5];
  55. }
  56.  
  57. }else{
  58. return 0;
  59.  
  60. }
  61.  
  62. return $new;
  63. }
  64.  
  65. ?>
  66. <link rel="stylesheet" type="text/css" href="images/style.css" />
  67. <?php
  68.  
  69. if(isset($_GET['view'])){
  70. $new_c = FindNew($_GET['id']);
  71. if($new_c != 0){
  72. echo "<table width=\"100%\" border=\"0\">
  73. <tr>
  74. <td height=\"20\"><strong><p class=\"NewsTitle\">".$new_c['title']."</p></strong></td>
  75. </tr>
  76. <tr>
  77. <td height=\"20\" class=\"NewsBody\"><strong>".$new_c['date']."</strong></td>
  78. </tr>
  79. <tr>";
  80.  
  81. if(isset($new_c['image'])){
  82. $size = RedimensionaImagem("images/".$new_c['image']);
  83. echo "<td><img style=\"margin-left: 5px; margin-right: 5px;\" src=\"images/".$new_c['image']."\" align=\"".$new_c['align']."\" width=\"".$size['largura']."\" height=\"".$size['altura']."\" class=\"images\" ><span class=\"NewsBody\">".$new_c['completo']."</span></td>";
  84. }else
  85. echo "<td><span class=\"NewsBody\">".$new_c['completo']."</span></td>";
  86.  
  87. echo "</tr>
  88. </table>
  89. <p>&nbsp;</p>";
  90.  
  91. }else{
  92. echo "ERROR, no new found with id ".$_GET['id'];
  93. }
  94.  
  95.  
  96. }else{
  97. echo "<table width=\"100%\" border=\"0\"><tr> <td valign=\"top\">";
  98.  
  99. $all_news = ReadNews();
  100.  
  101. if($all_news != 0){
  102. for($i = sizeof($all_news)-1; $i >= 0; $i--){
  103. echo "<table width=\"100%\" border=\"0\" align=\"center\">
  104. <tr>
  105. <td height=\"15\" class=\"NewsTitle\"><strong><a href=\"?view&id=".$i."\">".$all_news[$i]['title']."</a></strong></td>
  106. </tr>
  107. <tr>
  108. <td height=\"15\" class=\"NewsBody\"><strong>".$all_news[$i]['date']."</strong></td>
  109. </tr>
  110. <tr>
  111. <td class=\"NewsBody\">".$all_news[$i]['resumo']."</td>
  112. </tr>
  113. </table><p>&nbsp;</p>";
  114. }
  115.  
  116. }else{
  117.  
  118. echo "No news yet";
  119.  
  120. }
  121. echo "</td></tr></table>";
  122. }
  123.  
  124. function RedimensionaImagem($imagem){
  125. if(is_file($imagem)){
  126. $size = getimagesize($imagem);
  127. $height = $size[1];
  128. $width = $size[0];
  129. $tamanho = array();
  130.  
  131. if ($height > __MAXHEIGHT)
  132. {
  133. $height = __MAXHEIGHT;
  134. $percent = ($size[1] / $height);
  135. $width = ($size[0] / $percent);
  136. }
  137. else if ($width > __MAXWIDTH)
  138. {
  139. $width = __MAXWIDTH;
  140. $percent = ($size[0] / $width);
  141. $height = ($size[1] / $percent);
  142. }
  143.  
  144. $tamanho['largura'] = (int) $width;
  145. $tamanho['altura'] = (int) $height;
  146. }
  147. return $tamanho;
  148. }
  149.  
  150. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
Blame
post
Post #2





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Linijka 102:
  1. for($i = sizeof($all_news)-1; $i >= 0; $i--){

Musisz tak zmodyfikować tą linijkę, aby pętla wykonała się tylko 3 razy (IMG:style_emoticons/default/smile.gif)
Podpowiedzi:
1. for
2. $all_news ci w tej linijce nie potrzebne (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
fraksipon
post
Post #3





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 18.12.2005

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


Czy moglbys napisać mi jak ta linijka ma wygladac?
Ja użyłem
  1. for($i = 2; $i >= 0; $i--){

ale to mi pokazuje pierwsze 3 wiadomosci.
Prosze o napisanie gotowego dzialania, gdyz nie znam sie na programowaniu.
Dziekuje
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Daj sobie w takim razie przed tą pętlą:
  1. $all_news = array_reverse($all_news);

i powinno pomóc.

Aha - wtedy wystarczy taka pętla:
  1. for($i=0; $i<3; $i++)


Ten post edytował phpion 13.01.2010, 10:05:47
Go to the top of the page
+Quote Post
fraksipon
post
Post #5





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 18.12.2005

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


Posortował dobrze, ale niepełnie.
tzn.
w kolejności 3 ostatnie wiadomości po rozwinięciu pokazują 3 pierwsze wiadomości.

Jak to naprawić?
Go to the top of the page
+Quote Post
Blame
post
Post #6





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Rozwinięciu? Nie sortuj nic, napisz tak jak poradził phpion za drugim razem czyli:
  1. for($i=0; $i<3; $i++)

Jak dalej nie działa to opisz bardziej szczegółowo bo nie wiem o co ci chodzi.
Go to the top of the page
+Quote Post
fraksipon
post
Post #7





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 18.12.2005

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


Już wyjaśniam.
Po zastosowaniu kodu phpion`a
  1. echo "<table width=\"100%\" border=\"0\"><tr> <td valign=\"top\">";
  2.  
  3. $all_news = ReadNews();
  4.  
  5. $all_news = array_reverse($all_news);
  6. if($all_news != 0){
  7. for($i=0; $i<3; $i++){
  8. echo "<table width=\"100%\" border=\"0\" align=\"center\">

Jest to skrypt news`ow
Skrypt pokazuje mi wiadomości od końca tak jak chciałem.
Tylko ten sam skrypt umożliwia rozwinięcie wiadomości gdy ta jest za długa.

Problem polega na tym ze skrypt wyświetla mi ostatnią wiadomość a po rozwinięciu jej zawartość jest z pierwszej. Analogicznie z kolejymi wiadomościami. Wyświetla przedostatnią a po rozwinięciu drugą.

Jeśli niezrozumiale napisałem proszę pisać.
Co w takim razie trzeba zrobić i jak?
Go to the top of the page
+Quote Post
Blame
post
Post #8





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Sory, nie doczytałem się. Możesz zamiast tego:
  1. $all_news = array_reverse($all_news);

po linijce 34 dać:
  1. $list = array_reverse($list);

Bo jeśli dobrze rozumiem to funkcja ExplodeNews zwraca tablicę z newsami dla funkcji wyświetlających więc powinno działać.

Ten post edytował Blame 13.01.2010, 18:18:24
Go to the top of the page
+Quote Post
fraksipon
post
Post #9





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 18.12.2005

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


Zastosowałem i działa nawet po rozwinięciu news`a.
Tylko że pokazuje 3 pierwsze a nie 3 ostatnie news`y (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
Blame
post
Post #10





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


To już zagmatwałeś całkiem, najpierw piszesz, że wyświetla dobrze a potem że źle. Jak wyświetla trzy pierwsze to usuń w ogóle tą linijkę z array_reverse
Go to the top of the page
+Quote Post
fraksipon
post
Post #11





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 18.12.2005

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


No nie chodzi tak jak powinien.
Czy mógłbym prosić abyś zobacz sam jak się kod zachowuje?
Tutaj link do skryptu surowego
Go to the top of the page
+Quote Post
Blame
post
Post #12





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Proszę, oto gotowy plik news.php, wystarczy podmienić: http://wrzucacz.pl/file/4051263452756

Problem był w tej właśnie pętli for nad którą się głowiliśmy, powinno to wyglądać tak:

  1. $all_news = ReadNews();
  2.  
  3. $all_news = array_reverse($all_news);
  4.  
  5. $ile_news = count($all_news);
  6.  
  7. $ile = $ile_news - 3;
  8.  
  9. if($all_news != 0){
  10. for($i = $ile_news; $i >= $ile ; $i--){

Bo chociaż dobrze się wyświetlały to id było przepisywane na odwrót.

Ten post edytował Blame 14.01.2010, 08:09:29
Go to the top of the page
+Quote Post
phpion
post
Post #13





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@Blame:
A nie prościej (w celu zachowania kluczy) dodać TRUE jako drugi parametr do array_reverse?
Go to the top of the page
+Quote Post
Blame
post
Post #14





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Masz rację. Nie jestem jeszcze po prostu na tyle dobry, żeby znać parametry każdej klasy. Miałem problem i go rozwiązałem, ale jak widać można prościej.
Go to the top of the page
+Quote Post
phpion
post
Post #15





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(Blame @ 14.01.2010, 15:14:53 ) *
Masz rację. Nie jestem jeszcze po prostu na tyle dobry, żeby znać parametry każdej klasy.

Ja również nie znam parametrów wszystkich funkcji, ale od tego jest dokumentacja by z niej korzystać. Zawsze najpierw warto zapoznać się z możliwościami danej funkcji by nie wymyślać koła na nowo (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Blame
post
Post #16





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Wiem, wiem, przyznaję się do błędu. Na swoje usprawiedliwienie mam tylko edycję skryptu w godzinach porannych i na szybko (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
fraksipon
post
Post #17





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 18.12.2005

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


Cytat(Blame @ 14.01.2010, 08:09:14 ) *
Proszę, oto gotowy plik news.php, wystarczy podmienić: http://wrzucacz.pl/file/4051263452756

Problem był w tej właśnie pętli for nad którą się głowiliśmy, powinno to wyglądać tak:

  1. $all_news = ReadNews();
  2.  
  3. $all_news = array_reverse($all_news);
  4.  
  5. $ile_news = count($all_news);
  6.  
  7. $ile = $ile_news - 3;
  8.  
  9. if($all_news != 0){
  10. for($i = $ile_news; $i >= $ile ; $i--){

Bo chociaż dobrze się wyświetlały to id było przepisywane na odwrót.


Dzięki.
Czy da się zmodyfikować kod tak aby nie wyświetlała się pusta ramka nad wiadomością `test1`?
(IMG:http://img42.imageshack.us/img42/5636/kasuj2.jpg)
Tu chyba chodzi o kod
  1. for($i = $ile_news; $i >= $ile ; $i--){
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 23:47