Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlenie 3 ostatnich "news`ow"
Forum PHP.pl > Forum > PHP
fraksipon
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. ?>
Blame
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 smile.gif
Podpowiedzi:
1. for
2. $all_news ci w tej linijce nie potrzebne winksmiley.jpg
fraksipon
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
phpion
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++)
fraksipon
Posortował dobrze, ale niepełnie.
tzn.
w kolejności 3 ostatnie wiadomości po rozwinięciu pokazują 3 pierwsze wiadomości.

Jak to naprawić?
Blame
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.
fraksipon
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?
Blame
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ć.
fraksipon
Zastosowałem i działa nawet po rozwinięciu news`a.
Tylko że pokazuje 3 pierwsze a nie 3 ostatnie news`y sad.gif
Blame
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
fraksipon
No nie chodzi tak jak powinien.
Czy mógłbym prosić abyś zobacz sam jak się kod zachowuje?
Tutaj link do skryptu surowego
Blame
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.
phpion
@Blame:
A nie prościej (w celu zachowania kluczy) dodać TRUE jako drugi parametr do array_reverse?
Blame
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.
phpion
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 winksmiley.jpg
Blame
Wiem, wiem, przyznaję się do błędu. Na swoje usprawiedliwienie mam tylko edycję skryptu w godzinach porannych i na szybko tongue.gif
fraksipon
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`?

Tu chyba chodzi o kod
  1. for($i = $ile_news; $i >= $ile ; $i--){
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.