Datagrid – strankovani, pocet zobrazenych zaznamu, ajax PHP5.3, dibi 1.3

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

Ahoj,

uz docela hledam nejakou verzi datagridu, ktera by mi fungovala :)

jen rychla otazka, existuje Datagrid pro verzi PHP5.3 a dibi 1.3? Nebo jina komponenta ktera by poskytovala: zobrazeni zaznamu z DataSource + strankovani a moznost nastaveni pocetu zobrazenych zaznamu?

Predem diky za help :-)

bojovyletoun
Člen | 667
+
0
-

Gridito. Transformace z datasource na fluent je jednoduchá.

gerades
Člen | 40
+
0
-

Na Gridito jsem se dival, ale myslim ze neumi nastaveni „pocet zobrazenych zaznamu“. Alespon co jsem tady videl: http://griddemo.janmarek.net/document_root/

Aurielle
Člen | 1281
+
0
-

Samozřejmě že to Gridito umí, případnou funkcionalitu si dopíšeš (daná třída musí extendovat Gridito\Grid):

/** @persistent */
public $items = 20;

protected function setupGrid() {
	//...
	$this->setItemsPerPage($this->items);
}

public function handleChangeItems($items)
{
	if($this->presenter->isAjax())
		$this->invalidateControl();
}

V šabloně – třeba:

<div class="float left">{_'Show'}
	<a n:href="changeItems!, 20" n:class="$control->getAjaxClass()"><strong n:tag-if="$itemsPerPage == 20">20</strong></a>
	 -
	<a n:href="changeItems!, 50" n:class="$control->getAjaxClass()"><strong n:tag-if="$itemsPerPage == 50">50</strong></a>
	 -
	<a n:href="changeItems!, 100" n:class="$control->getAjaxClass()"><strong n:tag-if="$itemsPerPage == 100">100</strong></a>
{_'items per page'}</div>
gerades
Člen | 40
+
0
-
/** @persistent */
public $items = 20;

tady bych se rad zeptal, proc tvorit dalsi promenou pro ulozeni poctu zaznamu? nemuzem na to pouzit uz existujici $itemsPerPage z Paginatoru, nebo $defaultItemsPerPage z Grid?

protected function setupGrid() {
//...
$this->setItemsPerPage($this->items);
}

metoda setupGrid() neexistuje v tride Grid. proc ji tedy vytvaret? pripadne, kdo/kdy ji musi zavolat?

public function handleChangeItems($items)
{
if($this->presenter->isAjax())
	$this->invalidateControl();
}

tady by asi melo byt jeste nastaveni persistentni promene $items, je to tak?

{_'Show'}{_'items per page'}

potom nechapu tady ty dva vyrazy.

predem diky za trpelivost a odpovedi

JakubJarabica
Gold Partner | 184
+
0
-

Ešte k pôvodnej otázke. Používam starý klasický Datagrid, ale z Githubu v DEV vetve: https://github.com/…rid/tree/dev. nahodil som ho v rámci prepisovania celej aplikácie do PHP 5.3, nette som použil tri dni starý build, dibi 1.5RC, s tým, že ďalší krok bude zrušenie Datasource a následné nahradenie za Fluent(kvôli indexom v subselectoch v MySQL).

Všetko išlo bez problémov, akurát som mal problém s týmto: https://github.com/…taSource.php#L62, ale to som jednoducho prepísal aby vytiahlo unikátne hodnoty filtrovaného stĺpca z klonovaného datasource(do pôvodného sa začali nabalovať where podmienky a nevracalo to potom všetky stĺpce).

gerades
Člen | 40
+
0
-

Tak uz jsem to pochopil a dodelal, reseni je tohle:

public function __construct($presenter, $name) {
    parent::__construct($presenter, $name);
    $this->setItemsPerPage($this->itemsPerPage);
}

/** @persistent */
public $itemsPerPage = 5;

public function handleChangeItems($itemsPerPage) {
    if ($this->presenter->isAjax())
        $this->invalidateControl();
}

vlastne stejne co postnul mr. gmvasek :) ale davam to se, kdyby to nekomu melo pomoct…

Editoval gerades (5. 2. 2011 18:49)