W jaki sposób przekazać zmienną z jednego widoku do drugiego podczas żądania ajax?

0

Tworzę funkcjonalność, której zadaniem jest po kliknięciu pokaż wiecej załadować kolejną dawkę jakiś informacji. Wszystko w zasadzie już działa, ale ręcznie muszę ustawiać zmienną total_pages co przy dynamicznie zmieniającej się ilości newsów jest niemożliwe do wykonania. Zastanawiam się w jaki sposób przekazać zmienną $pageCount = $paginator->count(); z akcji listAction do akcji indexAction podczas rządania.

Ustawienie zmiennej klasowej i wysłanie jej do widoku index nic nie da, bo zmienna jest ustawiana w momencie wywołania akcji list, a strona index nie jest pozniej odswiezana... wiec odpada. Probowalem jakos inaczej (tak jak widac ponizej) to przekazac, ale tez nic z tego.

Może w list.phtml przypisać zmienną pageCount do jakiegoś atrybutu data i w indexie to odczytac, ale nie wiem czy to jest poprawne rozwiazanie.

Korzystam z frameworka Zend Framework.

NewsController

<?php
/**
 * Created by PhpStorm.
 * User: fi3rce
 * Date: 6/27/15
 * Time: 1:36 PM
 */

class NewsController extends BV_Controller_Abstract
{

    protected $_model;

    public function init () {
        $this ->_model = new Core_Model_News();
        $this ->view-> site_name = 'news' ;
    }

    public function indexAction () {
//        $this ->_helper-> layout->setLayout ('layout_unsigned');
        $this ->_helper-> layout()->disableLayout ();
    }

    public function listAction () {
        $this ->_helper-> layout()->disableLayout ();
        $newsList = $this ->_model-> fetchNews(array('publication_date DESC' , 'id DESC' ),true,true);
        $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array ($newsList));
        $paginator ->setItemCountPerPage(4)
            ->setCurrentPageNumber($this-> _getParam('page'));

        $pageCount = $paginator->count();
        $this->view->pageCount = $pageCount;
        $this ->view-> paginator = $paginator;
    }
}

news/index.phtml

<h2>Aktualnosci</h2>
<?php echo $this->pageCount; ?>
<div id="results"></div>
<div align="center">
    <button class="load_more" id="load_more_button">load More</button>
    <div class="animation_image" style="display:none;"><img src="/images/design/ajax_loader_blue_32.gif"></div>
</div>
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>

<script>
    $(document).ready(function() {

    var track_click = 1;

        $('#results').load("http://hbp.dev/default/news/list", {'page':track_click}, function() {track_click++;});

        var total_pages = 4; // <?php echo $this->pageCount; ?> czy cokolwiek w ten desen wydawało sie nie działać

        $(".load_more").click(function (e) { 

            $(this).hide(); 
            $('.animation_image').show(); 

            if(track_click <= total_pages) 
            {
                $.post('http://hbp.dev/default/news/list',{'page': track_click}, function(data) {

                    $(".load_more").show(); 

                    $("#results").append(data); 

                    $("html, body").animate({scrollTop: $("#load_more_button").offset().top}, 500);

                    $('.animation_image').hide(); 

                    track_click++; 

                }).fail(function(xhr, ajaxOptions, thrownError) { 
                    alert(thrownError); 
                    $(".load_more").show(); 
                    $('.animation_image').hide(); 
                });


                if(track_click >= total_pages) 
                {
                    $(".load_more").attr("disabled", "disabled");
                }
            }

        });
    });
</script>

news/list.phtml

<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<?php
foreach($this->paginator as $key => $single_news) {
    echo 'ID: ' . $single_news->id . "<br> Subject: " . $single_news->subject . "<br> <br>";
}
//echo $this->pageCount; (tutaj mam zdostęp do tej zmiennej)
?>
0

Może komuś się przyda, oto jak to rozwiązałem:

W widoku news/list dodałem warunek, który przypisuje do atrybutu liczbę stron. Domyślnie ten atrybut wynosi 0, dzięki czemu później to jeszcze wykorzystuje do pokazywania/ukrywania pokaż więcej itd.

    <?php if($this->paginator->getCurrentPageNumber() == 1) : ?>
        <script>$('div#results').attr('data-page-count', <?php echo $this->pageCount; ?>);</script>
    <?php endif; ?>

1 użytkowników online, w tym zalogowanych: 0, gości: 1