Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework] głosowanie jquery
przemo91r
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.09.2011

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


Witam,
Chcę zrobić głosowanie mocne/słabe na swojej stronie jednak nie rozumiem jak to mam zrobić, czytam manual ale cięzko mi to zrozumieć.
Jak mam to rozpocząć.

Mam przykładowo IndexController a w nim indexAction w niej pobieram posty z bazy. W index.phtml mam pod kazdym postem
  1. <p class="glosuj" id="1>GŁOSUJ: <span style="color: green">MOCNE </span>/ <span style="color: red">SŁABE</span></p>
  2. <p class="ocena" id="1">ocena: 0 (głosów: 0)</p>

oczywiscie id="" jest wartością zmienną każdy post ma inny. Jak ma zacząć bo wnioskuje, że muszę zrobić clase w /view/helpers ?
  1. <?php
  2. class Vote extends Zend_View_Helper_Abstract
  3. {
  4.  
  5.  
  6.  
  7. }


? proszę o jak najwięcej wskazówek ponieważ zależy mi żeby napisać ten skrypt a przy okazji się czegoś nauczyć.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
k_@_m_i_l
post
Post #2





Grupa: Zarejestrowani
Postów: 349
Pomógł: 72
Dołączył: 22.01.2008
Skąd: Wadowice/Oświęcim

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


Ehh, nie rozumiesz troche.
Zobacz:
w init() w kontrolerze zapisujesz coś takiego:

  1. $contextSwitch = $this->_helper->getHelper('contextSwitch');
  2. $contextSwitch->addActionContext('glosuj', 'json')
  3. ->initContext();
  4. // glosuj to nazwa akcji dla jakiej dodajemy contentswitch,
  5. //a json to typ danych na jakich będziemy operować (nie wiem czy to dobrze wyjaśniłem, ale zakładam że rozumiesz o co chodzi)


Teraz w akcji glosujAction() trzeba zapisać głos do bazy danych i odebrać aktualny stan głosów
  1. $data = $this->getRequest()->getPost(); // pobranie przesyłanych danych
  2. // nie będę tego opisywać, ale w tym miejscu robisz zapis do bazy danych
  3.  
  4. $result_data = array(
  5. 'result' => $result, // wynik operacji na bazie danych
  6. 'plusy' => $plusy, // liczba głosów na plus pobrana po aktualizacji
  7. 'minusy'=>$minusy // liczba głosów na minus pobrana po aktualizacji
  8.  
  9. );
  10. $this->view->wynik = $result_data;

i to jest koniec tej metody. Wszystkie zmienne, które chcesz żeby zostały przekazane zapisujesz do widoku. Z racji tego, iż dla naszej akcji glosuj użyliśmy contentswitch z typem json, to zend zwróci dane z tej akcji jako tablicę zakodowaną w jsonie.

Teraz pozostaje już tylko napisać skrypt w jquery, który połączy się z akcją.
Powiedzmy, że mamy taki kod html
  1. <div class="post">
  2. <div class="tresc">Lorem ipsum ...</div>
  3. <div class="glosy">
  4. <div style="display: none;" class="ukryte_id">11</div>
  5. <div class="plusy">
  6. <span class="ilosc_plus">15</span> <a href="#" class="glosuj_plus glosowanie_odn">+</a>
  7. </div>
  8. <div class="minusy">
  9. <span class="ilosc_minus">5</span> <a href="#" class="glosuj_minus glosowanie_odn">-</a>
  10. </div>
  11. </div>
  12. </div>


Teraz czas na odpowiedni kod w jquery:
  1. $(document).ready(function()
  2. {
  3. $("a.glosowanie_odn").click(function()
  4. {
  5. container = $(this).parents("div.glosy");
  6. post_id = container.find(".ukryte_id").html();
  7. if($(this).hasClass("glosuj_plus"))
  8. typ = 'plus';
  9. else
  10. typ = 'minus';
  11. $.ajax({
  12. type : 'post',
  13. url : 'index/glosuj?format=json',
  14. data : {
  15. 'post_id' : post_id,
  16. 'typ' : typ
  17. },
  18. dataType: 'json',
  19. success: function(data)
  20. {
  21. if(data.wynik.result == 1)
  22. {
  23. // jeśli poprawnie zapisano głos
  24. container.find(".ilosc_plus").html(data.wynik.plusy);
  25. container.find(".ilosc_minus").html(data.wynik.minusy);
  26. }
  27. else
  28. {
  29. alert("Wystąpił błąd podczas przesyłania danych. Spróbuj ponownie.");
  30. container.find(".ilosc_plus").html(data.wynik.plusy);
  31. container.find(".ilosc_minus").html(data.wynik.minusy);
  32. }
  33. }
  34.  
  35. });
  36. });
  37. });


O jQuery i html nie będę nic pisać, dostałeś gotowca więc teraz czas na ruch z Twojej strony i przeanalizowanie kodu. Kod działa, bo sprawdzałem;p

Ten post edytował k_@_m_i_l 24.09.2011, 09:39:09
Go to the top of the page
+Quote Post

Posty w temacie


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: 3.10.2025 - 23:58