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