TabControl & VisualPaginator
- JakubKohout
- Člen | 92
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
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)
- JakubKohout
- Člen | 92
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
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
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