Komponenta notifikacna ikona ktora sa bude neustale invalidovat

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
duskohu
Člen | 778
+
0
-

Caute snazim sa urobit notifikacnu ikonku ktora bude informovat o nejakom pocte. Len neviem aka je najvhodnejcia cesta, resp. ako urobit aby sa mi neustale invalidovala. Nejaka pomoc?

class OrderNotificationControl extends BaseControl
{

	/** @var OrderRepository */
	private $orderRepository;


	/**
	 * @param OrderRepository $orderRepository
	 */
	public function __construct(OrderRepository $orderRepository)
	{
		parent::__construct();
		$this->orderRepository = $orderRepository;
	}


	/**
	 * @return int
	 */
	private function checkNewOrderCount()
	{
		$newOrdersList = $this->orderRepository->findAll()
			->where('status', OrderRepository::PROCESSING);
		return $newOrdersList->count();
	}


	public function render()
	{
		$this->template->newOrdersCount = $this->checkNewOrderCount();
		$this->template->render();
	}

}

sablona:

<span n:snippet="orderNotificationControl">
		<span class="badge badge-important">{$newOrdersCount}</span>
</span>
frosty22
Člen | 373
+
0
-

Snippety jsou sice fajn, ale na tohle bych je zrovna nepoužil – osobně bych to řešil nejjednodušeji nějakým handle v presenteru:

<?php
class FooPresenter extends Presenter {

   public function handleCount()
   {
      $newOrdersList = $this->orderRepository->findAll()
            ->where('status', OrderRepository::PROCESSING);
      $this->payload->count = $newOrdersList->count();
      $this->sendPayload();
   }

}
?>

a potom na straně JS, pokud používáš jQuery:

<script>
$(document).ready(function(){
   if ($("#counter").length) {
       window.setInterval(function(){
         var elm = $("#counter");
         $.getJSON(elm.attr("data-url"), function(data){ elm.text(data.count); });
       }, 5000);
   }
});
</script>

a v šabloně:

<div id="counter" data-url="{link count!}"></div>

Je to jen nástřel nevím zda-li tam není překlep, ale takto cca bych to řešil já ..

duskohu
Člen | 778
+
0
-

@frosty22 dik, presne takto som to riesil, len som chcel vediet ci neje aj nejaka ina moznost, napr. invalidovanie snippetu pomocou JS. Akurat som pouzil nette.ajax.js

Editoval duskohu (28. 4. 2013 11:21)

akadlec
Člen | 1326
+
0
-

A ty to chceš invalidovat v nějakém intervalu nebo jen při requestu? Pokud interval tak cca tak jak je ten příklad od frosty22 a pokud při requestu tak bych to asi nechal těma snippetama, jen si tam pak přidej invalidaci.