DataGrid – 2 navrhy
- odin
- Člen | 50
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
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
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)