[addon tabcontrol] TabControl

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

Diskuse ke stránce TabControl


Ahoj, tak sem přidávám ten TabControl. Je to komponenta na „ztabovatění“ obsahu. Prosím zatím tuto stránku nepřidávejte do extras rozcestníku (jak je vidět, tak stránka není dopsaná). Návrhy na vylepšení jsou vítány. Tak testujte… ;)

Editoval honzakuchar (10. 8. 2009 22:09)

Jan Jakeš
Člen | 177
+
0
-

Paráda! Jen detail – asi bych tam nepsal, že vyžaduje nejnovější revizi – ta může být zítra jiná, než dnes.

Honza Kuchař
Člen | 1662
+
0
-

Jo, nad tím jsem taky přemýšlel, ale on je problém v tom, že ono to ani s tou současnou verzí nefunguje, protože Nette nepodporuje třídu HTML předanou jako druhý parametr snippetu. Ale řeším to úpravou Nette. Snad to David přidá, pak tam můžu napsat, že to pojede od nějaké revize výš. :)

na1k
Člen | 288
+
0
-

Skvělé!

Jen si teda počkám na úpravu SnippetHelperu přímo v Nette a pak hurá implementovat!

Převeliké díky ;-)

Honza Kuchař
Člen | 1662
+
0
-

Jsem rád, že se líbí. Ono by to šlo (nejspíš – jQuery UI Tabs s tím měl menší problémek, asi rešitelný, ale tohle řešení mi přijde přímější) předělat i do stavu, kdy by ta úprava nemusela proběhnout. Ale když je ta úprava tak jednoduchá a je 100% zpětně kompatibilní. :)

P.S.: Upravena dokumentace. (přidáno pár upozornění na co si dát bacha + upraven text co je psán .prexem + opraveno pár chybek)

PetrP
Člen | 587
+
0
-

Pěkné ;] asi časem použiju. Jen hlasím malí bug v sortable a Opeře.

Když tab někam přetáhnu a pustím tak uskočí uplně do pryč ;]

Nedavdo jsem řešil to samé, je to chyba v jQuery UI Sortable. Projevuje se myslím když je na položkách position: relative (asi). Tak jim po přesunutí zůstane left a top, ostatní prohlížeče to skousnou Opara ne. Stačí když v události stop přidáš left a top na auto

                $("#"+"tabs__jQueryUITabs").tabs({}).find(".ui-tabs-nav").sortable({ axis:'x',distance:25,stop:function(e,ui){
			$(ui.item).css('left','auto');
			$(ui.item).css('top','auto');
                                                var order = $(this).sortable("toArray");
                        $.get("\/?tabs-order=order&do=tabs-saveTabsOrder", {"tabs-order[]":order});
// vytaženo ze zdroje dema, nechce se mi hledat v distribuci.
o5
Člen | 416
+
0
-

omg..chtelo by to nejake hodnoceni, protoze tohle s datagridem je fakt super vec!!!! dik!

Honza Kuchař
Člen | 1662
+
0
-

Na ten bug se podívám. Pravda na opeře jsem to netestoval. (jen na IE 8, Moz 3.5, Chrome 2, Safari)

P.S.: Ten jsem objevil naprosto, ale naprosto killer feature, nyní podporovanou ve všech prohlížečích. Div se prostě začne chovat jako input. Video zde. Zkusím to nějak elegantně implementovat do datagridu. A ještě jedna příjemná věc (taky v ukázce), flash zprávičky se zobrazují pomocí jQuery pluginu jGrowl.

Honza Kuchař
Člen | 1662
+
0
-

fixed – ale to přesouvání v Opeře funguje vůbec nějak „divně“

PetrP
Člen | 587
+
0
-

honzakuchar napsal(a):

fixed – ale to přesouvání v Opeře funguje vůbec nějak „divně“

Co znamená divně, mě teď už funguje normálně. Nemáš nejakou historickou verzi?

Honza Kuchař
Člen | 1662
+
0
-

Tak jsem z toho jelen. Teď už to opravdu běží nádherně i v Opeře. Ale dal bych ruku do ohně za to, že když jsem to zkoušel napodledy, tak se mi ten tab jakoby nechtěl zařadit zpátky. (vrátil se mi vždy zpět na výchozí pozici) Možná bylo někde něco v cache. Už je to OK. A díky za perfektní bug report! ;)

//EDIT: Opera verze 9.64 (aktuální)

Editoval honzakuchar (14. 8. 2009 0:08)

PetrP
Člen | 587
+
0
-

honzakuchar napsal(a):

A díky za perfektní bug report! ;)

díky za perfektní componentu ;]

marek-m
Člen | 66
+
0
-

nechapem preco, naistaloval som si tento component pod win, a hadze mi to chybu v template na riadku 25, presnejsie Call to a member function startTag() on a non-object – TabControl.phtml.php Line: 25, aj v deme

PHP 5.2.6

pracujem prevazne pod linuxom, a tam mi to vsetko v poho bezi, nieco som nenainstaloval, resp. nepovolil nejaku kniznicu vo win?

dalej som si vsimol chybycku, co nemusi byt sposobene tymto komponentom – ked pouzivate moduly a prezentery, nefunguje mod lazy /nacitavam, nacitavam a nic...../ — ako keby si ajax nevedel poradit s „:“ – samozrejme v pripade ze nemate mod_rewrite a ze ste mimo defaultneho zobrazenia. Ak pouzijem mod no ajax, ide to, ak neclenim na moduly a prezentery, ale priamo prezenter, ide to.

Honza Kuchař
Člen | 1662
+
0
-

Proč to vyhazuje ten startTag() nevím. (je to normální HTML objekt) Já dělám pod Windows, takže se spíš divím, že to není naopak.

Moduly jsem netestoval to jest pravda. (nikdy jsem je ani nepoužil protože ani nevím přesně jak je použít) Až bude trošku času, tak se na to podívám. Zkus si zkontrolovat, co ti to vygenerovalo za odkazy.

mkoubik
Člen | 728
+
0
-

Po objevu DataGridu a TabControlu musím konstatovat: Nette je ještě lepší, než jsem myslel!

marek-m
Člen | 66
+
0
-

odkaz je klasika /?tabs-tab=help&do=tabs-select&presenter=Config%3AMeasure, nieco taketo mi vypise firefox /3.5/ po kliku {state:{id:null,tabs-tab:help}} v kode, Windows ma Vistu, a naistalovany nejaky VAMP server – co pouzivas konkretne ty – instalujes samostatne apache2, php, mysql? V Linuxe je to bez problemov… Inak super komponent

Editoval marek-m (17. 8. 2009 8:03)

Honza Kuchař
Člen | 1662
+
0
-

Mám normálně stažený XAMPP. Nechtělo se mi s tím drbat po jednom.


A fungují ti vůbec snippety obecně? Máš správně zavináčovou magii?

marek-m
Člen | 66
+
0
-

aj ja som si naistaloval xampp, vo windowse mi vsak nejde ani demo – asi ta blba VISTA, error riadku 25 – co by som vsak az tak neriesil, pod linuxom len presunem demo na iny modul:prezender – a to mi nejde, ak mam vsak len prezenter – cize neclenim to na modul prezenter, ide vsetko ok, sranda je, ze ak na tvrdo nastavim prezenter=Default:default – ide to, co vsak urcite ma suvis s routovanim,

„demo:“ http://demo.camea.sk/ marek-heslo

menu – skuska

Editoval marek-m (17. 8. 2009 12:14)

Honza Kuchař
Člen | 1662
+
0
-

diky za demo. Mas to pekne. ;) Ale teda fakt nevim co to zpusobuje. Zkusim si to projit. Ale teď mam fakt malo času. Prazdniny za chilu konci a potom už nebude čas něco psát. Mám odevzdávat jeden projekt. :( A ještě jedna věc, David říkal cosi o tom, že bude nějak kompletně překopávat snippety, tak nevím, ale asi bych počkal. Zatím než se to vyřeší to používej v tom modu_no_ajax. (tam kde to nejede) Fakt je to tedka blbe.

P.S.: K čemu jsou vlastně dobré ty moduly?

Ad. Win momentálně jsem na Win Vista – PHP 5.2.8 a funguje vše ok.

Editoval honzakuchar (18. 8. 2009 9:17)

marek-m
Člen | 66
+
0
-

Modul – kvoli prehladnosti programu /predstav si modul administracia a modul stranky/, ale predpokladam, ze tam budem skor problem v Nette, ak to mozem tvrdit – ako som si vsimol ajax mi nefunguje pri pouziti modulu ani na datagrid, takze ako keby nette nevedel urcit prezenter — co sa mozem aj mylit, zaujimave, ze ked hodim na tvrdo neidentifikovany modul:prezenter, vyhodi mi to chybu do logu – nenasiel som prezenter. Nejde vsak o zasadnu chybu, mozno by sa to dalo obist routovanim /mozno/. Win si neskor poriesim, Bohvie ake mam vo Viste blokacie, alebo nastavenia.

Honza Kuchař
Člen | 1662
+
0
-

Je dosti možné že kombinace moduly + nové šablony s AJAXem nefungují. A máš správně vyřešenou zavináčovou magii?

PetrP
Člen | 587
+
0
-

marek-m napsal(a):

Modul – kvoli prehladnosti programu /predstav si modul administracia a modul stranky/, ale predpokladam, ze tam budem skor problem v Nette, ak to mozem tvrdit – ako som si vsimol ajax mi nefunguje pri pouziti modulu ani na datagrid, takze ako keby nette nevedel urcit prezenter — co sa mozem aj mylit, zaujimave, ze ked hodim na tvrdo neidentifikovany modul:prezenter, vyhodi mi to chybu do logu – nenasiel som prezenter. Nejde vsak o zasadnu chybu, mozno by sa to dalo obist routovanim /mozno/. Win si neskor poriesim, Bohvie ake mam vo Viste blokacie, alebo nastavenia.

Je to Presenter, ne Prezenter ;] Takle se s toho chudáci začátečníci zblázní až se budou snažit vytvořit svůj DefaultPrezenter ;]

Honza Marek
Člen | 1664
+
0
-

Honza, nebudeš to předvádět na PS? Zatím jsem se na to sám nepodíval, ale zdálky to vypadá zajímavě.

marek-m
Člen | 66
+
0
-

Musim skutocne vsetko stiahnut, zabudol som na @ /aj ked som bol na to upozorneny/ – potom vsetko funguje – dakujem za pomoc, aj za kritiku

Honza Kuchař
Člen | 1662
+
0
-

@-> Já si to myslel :-D

Honza M. > Poslední sobota: Ouch, rád bych se objevil, ale přeji jenom je mi 16 a naši mě do Prahy nepustí. Takže uvidíme. Ale pro zájemce mám další video . Něvíte někdo kdy má být v Brně?

Ondřej Brejla
Člen | 746
+
0
-

Pokud bude srpnová PS v Praze, pak v Brně by měla být nejspíš v září, pokud se bude dodržovat střídání.

Honza Kuchař
Člen | 1662
+
0
-

Pak fajn. Ale to se snad podaří vymyslet už zase něco dalšího.

P.S.: Pokud chceš pochopit co přesně ty zavináče dějají a jak to vůbec funguje (doporučuji), tak si přečit tenhle příspěvek: https://forum.nette.org/…iewtopic.php?…

vlki
Člen | 218
+
0
-

Zdravím Honzo,

primárně dík za komponentu. Je fakt expresní:) Jen jsem teď našel takovou nejasnost.

V tabu mám DataGrid s akcemi, které jdou mimo taby. Odkazy se ale nevytvoří, protože se link volá na PresenterComponent.

Pro reprodukovatelnost:

// v tovarnicce tabu na DataGrid
	public function createTabDataGrid($name, Tab $tab)
	{
		...
		$dg->addAction('Akce', 'NejakyPresenter:akce', clone $icon->class('icon icon-detail'));
		...
	}

Což se neprovede, protože to hleda komponentu nejakypresenter.

Změnil jsem tedy řádek 171 ve třídě Tab

// původně
$link = parent::link($destination, $args);

// nový
$link = $this->presenter->link($destination, $args);

… a funguje parádně. Co tím parent:: bylo zamýšleno?

Honza Kuchař
Člen | 1662
+
0
-

Je to spíš feature. Protože handlery nemusí být až v presenteru, ale mohou být i v nějaké podkomponentě, tak si můžeš nastavit (handlerComponent), na kterém objektu se bude volat funkce link().

Bylo to celé myšleno tak, že si v obsahu Tabu normálně zavolám link signal! a on mi to vygeneruje odkaz nejdřív na Tab::signal! pokud se mu to nepodaří, tak vygeneruje odkaz na TabControl->handlerComponent->link(); Kde handlerComponent je jako výchozí, rodič TabControlu, ale můžeš si ho změnit.

Ale protože jsem s stále v Nette začátečník, tak se ptám: Existuje i nějaké elegantnější řešení? Šlo o to, že třeba datagrid bude zaregistrován ve stromu kompoponent až někde hluboko (Presenter->TabControl->Tab->DataGrid), ale signály se nesmí směřovat na Presenter->TabControl->Tab ale na Presenter což je rodič TabControlu. Takže jako výchozí nastavení je, že se odkazy generují na rodičovskou komponentu TabControlu.

→ Tak se dívám, že v Tab žádné handlery nejsou, takže se ani nemusím pokoušet vygenerovat odkaz na Tab. (v současné revizi je to dvojité generování odkazu odstraněno)

vlki
Člen | 218
+
0
-

To jo, ale pomocí parent::? To je rodič komponenty z hlediska návrhu, ale ne aplikace. Co tam radší dát

$link = $this->parent->parent->link($destination, $args);

Dvakrát to tam je, protože se to volá z Tab. Poprvé rodič Tab je TabControl a pak rodič TabControl tvá komponenta.

Taky nechápu, proč je na řádku 170 ten test

	private function _link(PresenterComponent $obj,$destination, $args = array())
	{
		if($obj === $this)

když je to v metodě link voláno jako:

	return $this->_link($this,$destination, $args);

Tzn. test vždy projde… Něco mi uniká? Nehledě na to, že v tomhle případě se nevygeneruje InvalidLinkException, kterou by jsi odchytil, ale InvalidArgumentException při hledání té komponenty. Na handlerComponent by tedy vůbec nedošlo…

EDIT: Nějak mi blblo načítání tabů. Chvilku jsem si s tím hrál a nakonec to vyřešil tak, že jsem odmazal start a konec toho obalovacího snippetu content, co je v TabControl.phtml. Nette to pak bralo jako jeden snippet a vždy přepsalo všechno. Teď už mi ty snippety chodí pěkně zvlášť a v pohodě. Tobě to s tím obalovacím snippetem jede?

Editoval vlki (19. 8. 2009 2:23)

Honza Kuchař
Člen | 1662
+
0
-

Mě to funguje krásně. Máš v Nette upravený SnippetHelper?

parent:: z hlediska návrhu byl v pořádku, i když teď už tam není, protože jsem nenašel žádný rozumný důvod, proč by se měl generovat nějaký odkaz na Tab (že by přímo v něm byl nějaký handler).

if($obj === $this) vychází z historie vývoje. Dnes už taky není potřeba. Ta funkce _link() se měla používat ještě malinko jinak. Aktuálně už žádná taková funkce není

Stáhni si novou revizi. (lehce jsem to odbalastil)

Honza Kuchař
Člen | 1662
+
0
-

Tak od teď můžete vracet v továrníčce na obsah tabu i cokoliv s ITemplate

Jen mě tak napadlo. Myslíte, že by mělo smysl, jako takouvou zkratku udělat něco ve stylu $tab->content = "template:%appDir%/templates/neco/neco.phtml". Že bych kvůli šabloně nemusel psát továrničku. (tedy pokud má statický obsah)

Honza Kuchař
Člen | 1662
+
0
-

Tak se na to dívám. A vidím, že ten TabControl by vlastně ani tak nemusel být TabControl, ale spíše MenuControl. A z něho by se potom dědilo a přepsala by se sablona callbacky pro přesouvání tabů.

Nicméně menu v rámci presenteru – mno nevím. Mělo by to výhodu, že by se dalo udělat něco jako http://romansklenar.cz/…d-dialog.png, ale fungovalo by to s i bez JS. Vlastně by byli jakoby 3 sekce z toho 2 by byli skryté a byli by nad datagridem. A vždy by se jedna zobrazila. Bez JS by se obsah normálně přepl, jako to teď dělají taby.

Prosím o přečtení toku mých myšlenek a jejich kritiku

blacksun
Člen | 177
+
0
-

S továrničkou na šablonu bych až takový problém neviděl, zbytečně bych to nezapleveloval dalšími specifiky.

Narazil jsem na dva problémky při použití TabConrolu a to tyto:

DataGid tvořím přes továrničku metodou getComponentPersonsDataGrid.
V metodě pro naplnění tabu volám

<?php
function createTabPersons($name,Tab $tab)
{
	$grid = $this->getComponent('personsDataGrid');
	return $grid->render();
}
?>

Pokud bych vracel přímo komponentu $grid bez volání render(), skončí mi to výjimkou, že komponenta není registrována k Tabu.

Lze nějak přiřadit komponentu k Tabu, když ji vytvářím přes továrničku?

Druhá část dotazu je k použití šablony v tabu. Pokud použiju výše uvedené získání gridu v továrničce tabu, tak je to ok, ale pokud použiju tento zápis

<?php
function createTabPersons($name,Tab $tab)
{
	$templatePersons = new Template;
	$templatePersons->setFile(Environment::expand("%appDir%/templates/tabs/persons.phtml"));
	$templatePersons->registerFilter('Nette\Templates\CurlyBracketsFilter::invoke');

	return $templatePersons;
}
?>

a v šabloně je jen @{control personsDataGrid}, spadne mi to na výjimce Call to a member function getWidget() on a non-object.

hasSnippets na daném tabu mám zaplé.

Je potřeba ještě nějak ohnout šablonu, abych v ní mohl použít widget? Potřeboval bych pod datagrid právě doplnit do tabu ještě další věci.

Díky za případnou radu.

P.S. Až při podrobném pročtení vlákna jsem si všiml, že Honzovi je 16, tak i z tohoto pohledu klobouk dolů ;)

Editoval blacksun (7. 10. 2009 17:41)

Honza Kuchař
Člen | 1662
+
0
-
  1. TabControl si componentu zaregistruje sám, pokud ještě není zaregistrována. (stačí ji v vrátit returnem)

    Lze nějak přiřadit komponentu k Tabu, když ji vytvářím přes továrničku?

    Napadá mě akorát odregistrovat a poté teprv předat TabControlu. (nejjednoduší je to udělat to tím returnem)

  2. Call to a member function getWidget() on a non-object. Je docela logické. Widget se překládá jako $control->getWidget(xxx);. Ale v šabloně, která je tvořena pomocí new Template; se žádná taková proměnná neregistruje. Registruje se až zde: https://api.nette.org/…rol.php.html#95 Tzn. Template vytvářet buť jako control->createTemplate nebo si potřebnou proměnnou předat.

    Potom napiš jestli ti ta komponenta v té template bude fungovat. Sám jsem to nezkoušel a myšleno to bylo spíše jako, když mám nějaký delší text. ;) (Nicméně nad tím přemýšlím a fungovat by to snad mohlo, ale jen díky továrničkám. Ale myslím, že bude problém s vykreslováním. Mno vyzkoušej a uvidíš.)

blacksun
Člen | 177
+
0
-
  1. To odregistrování pomocí $this->removeComponent() a pak vrácení returnem funguje ok, narazil jsem na to náhodou a pak si to i napsal ;)
  2. S tou šablonou jsem zkusil pár věcí, ale nepovedlo se mi to rozjet. Když ji vytvořím přes $this->createComponent() kde $this je presenter, tak mi pak nefungují ostatní taby. Když zkusím přes $tab->createComponent() v továrničce na tab, tak to nefunguje.

Když použiju v továrničce tabu šablonu přes new Template, tak do ní si mohu předat datagrid přes komponentu. Jediné, co mi v tomto případě nefungovalo byly flashmessage od datagridu, které ale asi musím v šabloně sám vykreslit (?)…

Přemýšlím, že pokud bych chtěl mít v tabu nějakou složitější šablonu včetně komponent apod, bylo by lepší vytvořit nad tím komponentu např. dle návodu z QuickStartu a tu pak tabu předat.

Jinak co jsem zkusil vlastně mimoděk tak je více TabControlů v sobě a to funguje ;)

Honza Kuchař
Člen | 1662
+
0
-

Jinak co jsem zkusil vlastně mimoděk tak je více TabControlů v sobě a to funguje ;)

Tak to je fajn, to jsem nezkoušel.

S tou šablonou jsem zkusil pár věcí, ale nepovedlo se mi to rozjet. Když ji vytvořím přes $this->createComponent() kde $this je presenter, tak mi pak nefungují ostatní taby. Když zkusím přes $tab->createComponent() v továrničce na tab, tak to nefunguje.

Myslíš $this->crateTemplate() ne?

blacksun
Člen | 177
+
0
-

Jj, chybka, $this->createTemplate();

Momentálně bojuju s tím, že pokud použiju tento kód pro vytvoření tabu

<?php
function createTabPersons($name,Tab $tab)
{
	$templatePersons = $this->createTemplate();
	$templatePersons->setFile(Environment::expand("%appDir%/templates/tabs/test.phtml"));
	$templatePersons->pDG = $this->getComponent('personsDataGrid');
	return $templatePersons;
}
?>

a v šabloně pouze kód @{!$pDG->render()}, tak se datagrid vykreslí, posílá signály, ale nefunguje jejich zpracování :-(

<?php
function handlePersonsActions(SubmitButton $button)
{
	$form = $button->getParent();
	$grid = $this->getComponent('personsDataGrid');

	$grid->flassMessage('test');
	$grid->invalidateControl();
}
?>

hodí err 500..

Když tab není přes šablonu, ale přímo vrácen od presenteru odpojený datagrid, tak to funguje:

<?php
function createTabPersons($name,Tab $tab)
{
	$pDG = $this->getComponent('personsDataGrid');
	$this->removeComponent($pDG);
	return $pDG;
}
?>

Je to celý nějaký magický, nedaří se mi do toho proniknout tak, jak bych potřeboval.

blacksun
Člen | 177
+
0
-

Proč je vlastně důležité vracet komponentu v továrničce tabu přes return?

Respektive v čem je rozdíl, pokud komponentu vrátím jakožto objekt (zařadí se do stromu pod daný tab?) a když ji nechám připojenou k presenteru a v továrničce na tab ji vrátím vyrenderovanou?

V druhém případě mi totiž fungují flashmessage datagridu po akci.. Možná zase někde nějaké zavináče..

Honza Kuchař
Člen | 1662
+
0
-

Updatoval jsem příklad, ukázka (TabControlu v TabControlu) + (template s TabControlem v TabControlu). Tzn. máš tam tu komponentu (s podporou ajaxu) v template.

JakubKohout
Člen | 92
+
0
-

Přemejšlím jak navěsit VisualPaginator na TabControl … normálně se mi v klidu vykreslí ale na ajaxovou odpověď vrací:

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

A přitom metoda loadState ve visualPaginatoru obsahuje $this->invalidateControl(); takže by měla refreshnout všechny snippety ne ?

Any idea jak to vyřešit? :)

Editoval dRaGen (13. 10. 2009 0:57)

Matúš Matula
Člen | 257
+
0
-

Ahoj, Tabcontrol volam zo sablony cez @{control tabs}
Kod tovarnicky:

<?php
function createComponentTabs($name) {

	    $tc = new TabControl($this,$name);
	    $tc->mode = TabControl::MODE_LAZY;
	    $tc->sortable = false;
	    $tc->loaderText='Načítávam...';

	    $t = $tc->addTab('mostVisited');
	        $t->header = 'Najčítanejsie';
	        $t->contentFactory = array($this, 'getMostVisitedArticles');
	        $t->hasSnippets = true;
	        $t->select();

	    $t = $tc->addTab('mostCommented');
	        $t->header = 'Najkomentovanejsie';
	        $t->contentFactory = array($this, 'getMostCommentedArticles');
	        $t->hasSnippets = true;


	  	return $tc;
	}
?>

chcel by som po selectnuti daneho tabu ulozit jeho ‚id‘ do session a podla nej vzdy oznacit po reloade stranky naposledy oznaceny tab. Da sa to nejako jednoducho? Vdaka

Honza Kuchař
Člen | 1662
+
0
-

getTab() vrací jméno aktivního tabu
→ tady to ulož kam chceš
pomocí select() ho můžeš vybrat

Pořadí tabů se dá měnit pomocí fcí: loadTabsOrder() a saveTabsOrder()


P.S.: Ten $t->select() fakt funguje? Já bych řekl, že pak nemůže jít změnit tab ne?


P.P.S.: To pamatování posledního vybraného tabu se zdá být užitečné → píšu na TODO.

Honza Kuchař
Člen | 1662
+
0
-

Any idea jak to vyřešit? :)

Bohužel.

Matúš Matula
Člen | 257
+
0
-

honzakuchar napsal(a):


getTab() vrací jméno aktivního tabu
→ tady to ulož kam chceš pomocí select() ho můžeš vybrat
Pořadí tabů se dá měnit pomocí fcí: loadTabsOrder() a saveTabsOrder()

Dik, skusim

P.S.: Ten $t->select() fakt funguje? Já bych řekl, že pak nemůže jít změnit tab ne?

Nene, nefunguje, to tam ostalo este po testovani.

P.P.S.: To pamatování posledního vybraného tabu se zdá být užitečné → píšu na TODO.

Super

Matúš Matula
Člen | 257
+
0
-

Ahoj, neviem, ci to patri sem, ale skusim..
Generovany link pre oznacenie tabu je v xhtml nevalidny .. namiesto entity &amp; dava do adresy samotny &.
Da sa to niekde nastavit/opravit?

Honza Kuchař
Člen | 1662
+
0
-

Je to možné, teď toho mám hodně. Píšu na todo.

Honza Kuchař
Člen | 1662
+
0
-

Generovany link pre oznacenie tabu je v xhtml nevalidny

fixed

bazo
Člen | 620
+
0
-

ahoj,
narazil som na par problemov pri tabcontrole
skusam pridat tab pri nejakej akcii, napr ked chcem editovat clanok

<?php
public function handleEditArticle()
	{
		$tab = $this["tabs"]->addTab('edit');
		$tab->header = 'Edit';
		$tab->contentFactory = array($this, 'createComponentFormEditArticle');
		$this['tabs']->select('edit');
	}
?>

toto funguje fajn, formular sa vykresli, naplni datami, tab sa prepne, ale pri odoslani formu na novom tabe sa zavola tabs-tab=edit&do=tabs-edit-edit-submit, co vyhodi error The signal receiver component ‚tabs-edit-edit‘ is not found.

zabudol som na nieco alebo to tak nejde?

a este po spracovani toho formu by som chcel ten tab odstranit, je na to nejaka metoda?

Dik za pomoc!

Editoval bazo (29. 11. 2009 0:39)

Honza Kuchař
Člen | 1662
+
0
-

Rad bych poslouzil ale bohužel to implementace nedovoluje, a ani kdybych cely TabControl přepsal, tak fakt nevim, jak bych to udelal. Takže fakt nevim. (tohle by se mi samozřejmě hodilo taky)

//EDIT: Něco mě napadlo.

Editoval honzakuchar (29. 11. 2009 9:52)