TabControl & VisualPaginator

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

Už opravdu nevím proč to nefunguje, ale používám TabControl a v něm VisualPaginator…
Když to zkusim s vypnutym javascriptem tak to funguje, ale jakmile se zapne javascript tak ten ajax neprojde
požadavek

visualPaginator-page	3

odpověď

{"state":{"visualPaginator-page":3}}

Zde jsou zdrojáky

Presenter

class Front_MessagePresenter extends BasePresenter{

	private $id;

	public function renderDefault(){

		  $this->id = Environment::getUser()->getIdentity()->id;

	}


	function createComponentMessagesMain($name) {
        $tc = new TabControl($this,$name);
        $tc->mode = TabControl::MODE_LAZY;
        $tc->sortable = true;
        $tc->jQueryTabsOptions = "{ fx: { height: 'toggle',opacity:'toggle',marginTop:'toggle',marginBottom:'toggle',paddingTop:'toggle',paddingBottom:'toggle'} }";
		$tc->handlerComponent = $this; // Is automatic

        $t = $tc->addTab("in");
        $t->header = "Přichozí";
        $t->contentFactory = array($this,"createInbox");
        $t->hasSnippets = true;

		$t = $tc->addTab("out");
        $t->header = "Odchozí zprávy";
        $t->contentFactory = array($this,"createOutbox");
		$t->hasSnippets = true;

        $t = $tc->addTab("saved");
        $t->header = "Uložené zprávy";
        $t->contentFactory = array($this,"createSaved");
        $t->hasSnippets = true;

        $t = $tc->addTab("new");
        $t->header = "Nová zpráva";
        $t->contentFactory = array($this,"createNew");

        return $tc;
    }

    function createInbox($name, Tab $tab) {
        $tmpl = $this->createTemplate();
        $tmpl->registerHelper('timeAgoInWords', 'Helpers::timeAgoInWords');
        $tmpl->messages = MessageModel::getInbox($this->id);
		$this['visualPaginator']->paginator->itemsPerPage    = 10; //nastavíme zobrazení deseti položek na stránku
        $this['visualPaginator']->paginator->itemCount       = $tmpl->messages->count(); //řekneme paginátoru kolik máme celkem položek
        $tmpl->messages = $tmpl->messages->Limit($this['visualPaginator']->paginator->offset . ','. $this['visualPaginator']->paginator->itemsPerPage)
        									->fetchAll(); //získáme požadovaná data
        									//->test();
        $tmpl->setFile(Environment::expand("%appDir%/templates/components/Message.box.phtml"));
        return $tmpl;
    }

	function createOutbox($name, Tab $tab) {
    }

	function createSaved($name, Tab $tab) {

    }

	function createNew($name, Tab $tab) {

    }

	public function createComponentVisualPaginator($name){
    	$vp = new VisualPaginator($this,$name);
    }
}

Template presenter

@{extends $layout}
{block #title}Soukromé zprávy{/block}

@{block #content}
		@{control messagesMain}
@{/block}

Message.box.phtml

<div class="full-div">
<table style="width: 80%;text-align: left" align="center" >
  <tr>
    <th style="width: 40px;"></th>
    <th>Předmět</th>
    <th>Odesílatel</th>
    <th>Datum</th>
  </tr>
  {foreach (array)$messages as $message}
      <tr>
        <td><a href="{link delete! $message->id}"><img src="/layout/button/close.png" alt="Smazat" /></a></td>
        <td><a href="#" onclick="return false;" id="messageButtonId-{$message->id}">{$message->subject}</a></td>
        <td>{$message->nick}</td>
        <td>{$message->date|date:'%d.%m.%Y'}</td>
      </tr>
    {/foreach}
</table>
</div>
<div class="full-div">
	@{control visualPaginator}
</div>
Honza Kuchař
Člen | 1662
+
0
-

To bude chtít asi nějaké podrobnější zkoumání. Na první pohled v tom chybu nevidím.

ale jakmile se zapne javascript tak ten ajax neprojde požadavek

Trošku více info prosím.

Editoval honzakuchar (13. 10. 2009 22:51)

lucass
Člen | 89
+
0
-
@{extends $layout}
{block #title}Soukromé zprávy{/block}

@{block #content}
                @{control messagesMain}
@{/block}

Nechybí ti zavináče u block #title na začátku i na konci?

JakubKohout
Člen | 92
+
0
-

Tím @ u title to nebude, block title neobsahuje žádnej snippet

HonzaKuchar: mám poupravený VisualPaginator aby pracoval i s ajaxem, stačilo jenom přidat invalidování snippetu…

public function loadState(array $params)
	{
		debug::fireDump($params,'bla');
		parent::loadState($params);
		$this->getPaginator()->page = $this->page;
		$this->invalidateControl();
	}

V pořádku to funguje na všech componentách, jenom kromě TabControlu.
Data do týhle metody normálně projdou ale nereloadne se ten snippet :/

Honza Kuchař
Člen | 1662
+
0
-

Já se na to podívám, ale dneska to asi nestihnu. Odešel mi disk v serveru, takže musím sehnat nový a obnovit RAID pole.

Honza Kuchař
Člen | 1662
+
0
-

Nechybí ti zavináče u block #title na začátku i na konci?

Jak říkal David: A skončilo to tím, že se zavináče začali dávat všude. :D

JakubKohout
Člen | 92
+
0
-

Tak jak teda ? :) nějak sem na to nepřišel a to téma zapadlo …