Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rotacja ogłoszeń
Forum PHP.pl > Forum > PHP
m-dom
Witam.

Chciałbym zrobić na swojej stronie głównej aby wyświetlały się tylko ogłoszenia promowane przez użytkowników.

Może ktoś pomoże mi przerobić poniższy kod, aby na stronie głównej wyświetlane były tylko oferty promowane, ale rotacyjnie to znaczy przy każdym odświeżeniu strony mają się pojawiać losowo ogłoszenia promowane. Coś takiego jak jest na stronie oferty-dom.pl

Kod
<?php

    
  
   if(!empty($this->advertisements)) {
  
      echo '<table class="advTop" cellspacing="0" cellpadding="0" border="0">
               <tr>
                  <td class="advTopCam"><center>&nbsp;&nbsp;<img src="public/images/camera.gif" alt=""/></center></td>
                  <td class="advTopType">&nbsp;<b>typ nieruchomości</b><br/>&nbsp;typ ogłoszenia</td>
                  <td class="advTopSize"><b>powierzchnia</b></td>
                  <td class="advTopPrice"><b>cena</b></td>
                  <td class="advTopPro">&nbsp;&nbsp;<b>województwo</b><br/>&nbsp;&nbsp;miasto</td>
                  <td class="advTopDate">&nbsp;&nbsp;<b>data dodania</b></td>
                
               </tr>
            </table>
            
            <table style="margin-top:5px;" cellpadding="0" cellspacing="0">';
            
            foreach($this->advertisements as $advertisement) {
      
               if($advertisement->promo) { ///////////////////////////////////////////////////////////////// promo advertise
              
               echo '<tr >
                        <td>
                           <a href="adv/show/'.StringModifier::FriendlyUrl($advertisement->advertisementType).'/'.StringModifier::FriendlyUrl($advertisement->propertyType).'/'.StringModifier::FriendlyUrl($advertisement->province).'/'.$advertisement->id.'.html"><img src="public/images/';
      
                           if(!empty($advertisement->image))
                              echo 'advertisements/'.$advertisement->image.'_thumb.jpg';
                           else
                              echo 'photo.gif';
      
                           echo '" class="photoPromo" alt=""/></a>
                         </td>
                         <td style="padding-top:5px;" valign="top">
                           <table cellspacing="0" cellpadding="0" border="0">
                              <tr>
                                 <td class="offerTypePromo">
                                    <img src="public/images/p.gif" style="float:left;margin-right:5px;" alt=""/> <a href="adv/show/'.StringModifier::FriendlyUrl($advertisement->advertisementType).'/'.StringModifier::FriendlyUrl($advertisement->propertyType).'/'.StringModifier::FriendlyUrl($advertisement->province).'/'.$advertisement->id.'.html"><b>'.mb_strtoupper($advertisement->propertyType, "UTF-8").'</b><br/>'.$advertisement->advertisementType.'</a>
                                 </td>
                                 <td class="offerSizePromo">
'.$advertisement->areaSize.' m<sup><small>2</small></sup>
                                 </td>
                                 <td class="offerPricePromo">';

                                    if($advertisement->price > 0)
                                       echo $advertisement->price.' zł';
                                    else
                                       echo 'b/d';

                                 echo '</td>
                                 <td class="offerProvincePromo">
                                    <b>'.$advertisement->province.'</b><br/>
                                    '.$advertisement->city.'
                                 </td>

                                 <td class="offerDatePromo">
'.$advertisement->announceDate.'
                                 </td>
                              </tr>

                              <tr>
                                 <td colspan="4" class="offerDescPromo" valign="top">
'.StringModifier::Cut($advertisement->description, 40).' (...)
                                 </td>
                                 <td class="offerMorePromo" valign="top">
                                    <a href="adv/show/'.StringModifier::FriendlyUrl($advertisement->advertisementType).'/'.StringModifier::FriendlyUrl($advertisement->propertyType).'/'.StringModifier::FriendlyUrl($advertisement->province).'/'.$advertisement->id.'.html"><img src="public/images/more.gif" alt="" style="margin-top:2px;padding:0px;"/></a><br/>';

                                    if($this->user->admin) // admin menu
                                       echo ' <a href="account/edit/'.$advertisement->id.'"><img src="public/images/edit.gif" alt="" style="margin-top:2px;padding:0px;"/></a><br/> <a href="account/delete/'.$advertisement->id.'"><img src="public/images/delete.gif" alt=""  style="margin-top:2px;padding:0px;"/></a><br/>';
            
                                 echo '</td>
                              </tr>
                           </table>
                        </td>
                     </tr>';
              
               } else {  ///////////////////////////////////////////////////////////////// none
      
      echo '';
                      }
         }
           echo '</table>';
          
   }
?>



Pozdrawiam i z góry dziękuję za wszelką pomoc.
Damiankossek
Witaj, nie wiem czy Ci pomogę ale ja na Twoim miejscu zrobiłbym tak:

- Połączył się z bazą i zaznaczył wszystkie ogłoszenia
- Zliczył wszystkie ogłoszenia
- Następnie funkcją RAND wylosował jakiś numer zgłoszenia
- Połączył się z bazą i wybrał wylosowane przez RAND ogłoszenie

Powinno wyglądać to mniej więcej tak za pomocą biblioteki PDO

  1. $this -> pdo = $pdo = new PDO('mysql:host=adres;dbname=nazwabazy', 'login', 'pw');
  2. $request = $this -> pdo -> query("SELECT `jakiespole` FROM `nazwatableli`");
  3. $number_of_rows = $request -> rowCount();
  4. $wylosowane = rand(0, $number_of_rows);
  5. unset($request);
  6. $request = $this -> pdo -> query("SELECT * FROM `nazwatabeli` WHERE `id`='$wylosowane'");
  7.  
  8. $result = request -> fetch(PDO::FETCH_ASSOC);
  9.  
  10. $advertisement-> image = $result['nazwa_kolumny'];
  11. $advertisement-> price = $result['nazwa_kolumnby'];
  12. ...
  13.  


Ale być może któryś ze specjalstów poda Ci lepszą wskazówke smile.gif Ja dopiero zaczynam z obiektówką ...
Pozdrawiam
m-dom
A mógł by ktoś napisać mi jak powinien wyglądać ten mój plik po przeróbce, bo zupełnie nie wiem jak by miało to wyglądać ?
krowal
Pierwsza sprawa: szukasz w złym miejscu! Sprawdzż w którym pliku inicjalizowana jest zmienna '$this->advertisements' i tam kombinuj.

@Damiankossek
Cytat
- Połączył się z bazą i zaznaczył wszystkie ogłoszenia
- Zliczył wszystkie ogłoszenia
- Następnie funkcją RAND wylosował jakiś numer zgłoszenia
- Połączył się z bazą i wybrał wylosowane przez RAND ogłoszenie

Czemu potrzebne Ci do tego aż dwa zapytania ? smile.gif

Nie lepiej:
  1. SELECT * FROM tabela ORDER BY RAND() LIMIT 1;
thek
Sam do rand() w zapytaniu bym sę skłaniał... Tyle że niedawno czytając artykuł "Czego powinno się unikać w celu optymalizacji zapytań?" natknąłem się, oprócz takich standardowych jak unikanie SELECT *, także na rand(). Z artykułu wynikało, że obciąża bazę bardziej niż powinien.
krowal
Tak racja, znam to, ale... co innego używanie RAND() do sortowania iluś tam wybranych rekordów a co innego gdy wyciąga się tylko jeden rekord smile.gif
Wyobraź sobie, że miałbyś wybrać jeden przypadkowy rekord z bazy danych za pomocą RAND() (i jednego zapytania) i za pomocą dwóch zapytań i foreach/for pomiędzy nimi gdyby w tabeli bylo powiedzmy ... 3 mln rekordów. W sumie łatwo sprawdzić co by było wydajniejsze smile.gif
m-dom
Wszystko fajnie, ale może ktoś mi napisze jak przerobić ten mój kod i zastosować ten rand().
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.