Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Rotacja ogłoszeń
m-dom
post 12.12.2009, 12:47:50
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 9.11.2009

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


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.

Ten post edytował m-dom 12.12.2009, 20:15:56


--------------------
Zapraszam do serwisu z ofertami nieruchomości m-dom.pl
Go to the top of the page
+Quote Post
Damiankossek
post 12.12.2009, 14:27:55
Post #2





Grupa: Zarejestrowani
Postów: 118
Pomógł: 8
Dołączył: 10.12.2009

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


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

Ten post edytował Damiankossek 12.12.2009, 14:58:52
Go to the top of the page
+Quote Post
m-dom
post 12.12.2009, 21:12:49
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 9.11.2009

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


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ć ?


--------------------
Zapraszam do serwisu z ofertami nieruchomości m-dom.pl
Go to the top of the page
+Quote Post
krowal
post 13.12.2009, 10:30:37
Post #4





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

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


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;


--------------------
Nawet świnka może wejść na drzewo kiedy jest chwalona :)
Go to the top of the page
+Quote Post
thek
post 13.12.2009, 11:13:36
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
krowal
post 13.12.2009, 21:45:08
Post #6





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

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


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


--------------------
Nawet świnka może wejść na drzewo kiedy jest chwalona :)
Go to the top of the page
+Quote Post
m-dom
post 13.12.2009, 21:58:15
Post #7





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 9.11.2009

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


Wszystko fajnie, ale może ktoś mi napisze jak przerobić ten mój kod i zastosować ten rand().


--------------------
Zapraszam do serwisu z ofertami nieruchomości m-dom.pl
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: 14.08.2025 - 15:08