DataGrid – 2 navrhy

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

Zdravim,
mam dva navrhy na zmenu do datagridu

1. pokud ma sloupec zamenene hodnoty, tak by se mely tyto hodnoty vracet zpet ve filtru, cili kdyz dam zamenit „ano“ za „jo, jasne“ a „ne“ za „nicht“, tak uzivatel pochopitelne bude do filtru zadavat „jo, jasne“ a „nicht“, coz v datasource neni, cili v applyFilter by melo byt

<?php
class TextColumn extends DataGridColumn
	public function applyFilter($value)
...
	if (($val = array_search($value, $this->replacement)) !== false) {
		$value = $val;
	}
	$cond[] = array("[$column] LIKE '%$value%'");
?>

ted je otazka jestli by to melo byt u kazdyho typu sloupce nebo jen u nekterych?

2. zruseni formatovani ciselneho sloupce pokud je hodnota upravena – neco v tomhle smyslu:

<?php
class NumericColumn extends DataGridColumn
	public function formatContent($value, $data = NULL)
	{
		$replaced = false;
		if (is_array($this->replacement) && !empty($this->replacement)) {
			if (in_array($value, array_keys($this->replacement))) {
				$value = $this->replacement[$value];
				$replaced = true;
			}
		}

		foreach ($this->formatCallback as $callback) {
			if (is_callable($callback)) {
				$value = call_user_func($callback, $value, $data);
				$replaced = true;
			}
		}

		if (!$replaced) {
			return round($value, $this->precision);
		} else {
			return $value;
		}
	}
?>

Jde o to, ze kdyz vratim hodnotu z Callbacku, ktera neni ciselna, tak se to zaokrouhli na nulu. Pouziti je treba v tom, ze mam seznam zbozi na sklade a ma se ve sloupci zobrazit misto hodnoty 0 text „neni skladem“.
Nejsem si moc jisty jestli to udelat tak jak je to nahore, nebo to dat jen na callback (kompromis) nebo to nechat tak, anebo to udelat nejak uplne jinak. Nejake nazory?

Aurielle
Člen | 1281
+
0
-

K 1) se hlásím, v případě když si do DB ukládám pouze ID uživatelů a pak je do DataGridu tahám a proháním přes callback, tak logicky na tom sloupci nemůžu mít právě kvůli tomuto filter… ideální by bylo zprovoznit nejen replacementy, ale i callbacky (definoval by se třeba nějaký „zpětný“ callback)…

odin
Člen | 50
+
0
-

Ještě jedna drobnost s tim replacementem (projevuje se to pokud je v replacementu hodnota 0 a ve vysledcich je 0 i NULL):

<?php
class NumericColumn extends DataGridColumn
	public function formatContent($value, $data = NULL)
...
 		if (in_array($value, array_keys($this->replacement), true)) {
?>

by melo byt bud:

<?php
		if (($value !== NULL) && in_array($value, array_keys($this->replacement))) {
?>

nebo:

<?php
		if (in_array($value, array_keys($this->replacement), true)) {
?>

jde o to, ze in_array() NULL prevede na 0, vrati true, ze to v poli je (ano, nula tam je), ale

<?php
$value = $this->replacement[$value];
?>

uz vypise Notice: Undefined index: in C:\wwwroot\sanaewi3\libs\DataGrid\Columns\NumericColumn.php on line 48, protoze NULL v poli neni. Jsem pro prvni moznost, protoze kdyz zapnut Strict type checking u in_array() tak mi ten replacement nefunguje vubec a imho ten problem bude jedine s NULL, protoze

<?php
	in_array('5', array('pokus' => 5))
?>

funguje normalne. Teda aspon na me verzi PHP – podle komentaru na http://www.php.net/…in-array.php se to evidentne meni jen o malo pomaleji nez ponozky ;)

Editoval odin (16. 1. 2010 11:50)