Ehh, nie rozumiesz troche.
Zobacz:
w
init() w
kontrolerze zapisujesz coś takiego:
$contextSwitch = $this->_helper->getHelper('contextSwitch');
$contextSwitch->addActionContext('glosuj', 'json')
->initContext();
// glosuj to nazwa akcji dla jakiej dodajemy contentswitch,
//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
$data = $this->getRequest()->getPost(); // pobranie przesyłanych danych
// nie będę tego opisywać, ale w tym miejscu robisz zapis do bazy danych
'result' => $result, // wynik operacji na bazie danych
'plusy' => $plusy, // liczba głosów na plus pobrana po aktualizacji
'minusy'=>$minusy // liczba głosów na minus pobrana po aktualizacji
);
$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
<div class="tresc">Lorem ipsum ...
</div> <div style="display: none;" class="ukryte_id">11
</div> <span class="ilosc_plus">15
</span> <a href="#" class="glosuj_plus glosowanie_odn">+
</a> <span class="ilosc_minus">5
</span> <a href="#" class="glosuj_minus glosowanie_odn">-
</a>
Teraz czas na odpowiedni kod w jquery:
$(document).ready(function()
{
$("a.glosowanie_odn").click(function()
{
container = $(this).parents("div.glosy");
post_id = container.find(".ukryte_id").html();
if($(this).hasClass("glosuj_plus"))
typ = 'plus';
else
typ = 'minus';
$.ajax({
type : 'post',
url : 'index/glosuj?format=json',
data : {
'post_id' : post_id,
'typ' : typ
},
dataType: 'json',
success: function(data)
{
if(data.wynik.result == 1)
{
// jeśli poprawnie zapisano głos
container.find(".ilosc_plus").html(data.wynik.plusy);
container.find(".ilosc_minus").html(data.wynik.minusy);
}
else
{
alert("Wystąpił błąd podczas przesyłania danych. Spróbuj ponownie.");
container.find(".ilosc_plus").html(data.wynik.plusy);
container.find(".ilosc_minus").html(data.wynik.minusy);
}
}
});
});
});
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