DibiGrid – Nový DataGrid pro Dibi
- mirdič
- Člen | 41
Ahoj, je nějaká možnost při inline editaci se selectboxem předat vlastní value?
Jde o případ kdy mám v tabulce v db uložené pouze ID, které zároveň potřebuju při editaci uložit, ale do Tabelly vypisuji text, který se za ID skrývá v relační tabulce.
Tzn. že při editaci mám selectbox s <option value=„id“>TEXT</option>. V Tabelle se mi zobrazuje TEXT a proto, když chci položku editovat, tak se mi automaticky nevybere správný option.
Chtěl bych při editování mít vybraný správnou hodnotu. Jak na to?
Díky za rady.
- whipster
- Člen | 17
Tabella je geniální záležitost nicméně není ošetřená proti SQL INJECTION!
<?php
public function filtrHelper($val, $col, $type) {
switch($type) {
case Tabella::CHECKBOX:
return "[$col] = ". ($val == 'on' ? '1' : '0');
case Tabella::NUMBER:
case Tabella::TIME:
case Tabella::DATETIME:
case Tabella::DATE:
return "[$col] = '$val'"; //Tady
default:
return "[$col] LIKE '".$val."%'"; //a TADY
}
}
?>
Editoval whipster (24. 2. 2012 11:00)
- whipster
- Člen | 17
Správně to má vypadat takto:
<?php
public function filtrHelper($val, $col, $type) {
switch($type) {
case Tabella::CHECKBOX:
return "[$col] = ". ($val == 'on' ? '1' : '0');
case Tabella::NUMBER:
case Tabella::TIME:
case Tabella::DATETIME:
case Tabella::DATE:
return array("%n=%s",$col,$val);
default:
return array("%n LIKE %s", $col, $val."%" );
}
}
?>
- jannemec
- Člen | 78
Ahoj, trochu mě zlobily checkboxy – vždy se odesílali jako on – vyřešila to úprava js
původní
row.find(„input, textarea, select“).each(function() {
key = name+„-“+$(this).attr(„name“);
payload[key] = $(this).val();
});
nahrazeno za
row.find(„input, textarea, select“).each(function() {
key = name+„-“+$(this).attr(„name“);
if ($(this).is(‚input:checkbox‘)) {
payload[key] = $(this).is(„:checked“) ? 1 : 0;
} else {
payload[key] = $(this).val();
}
});
v chrome nyní bez problému
JN
- vojty
- Člen | 19
Zdravím,
stáhnul jsem si poslední verzi Tabelly a nemůžu ji rozchodit
Tabella.php:
<?php
public function loadState(array $params) {
$default = $this->params;
parent::loadState($params); // radek 110 tady mi to vyradi parametry
$this->params = $this->params + (array) $default;
}
?>
na radku 110 mi to vyNULLuje parametry (limit, sort..atd.)
Setkal jste se někdo s něčím podobným?
Díky
V.
- babcca
- Člen | 23
Nette komponenty maji vlastni protected promenou $params (je to opravdu
genialni :D, si mohlo nette rovnou rezervovat treba promenou $id, nebo $model
;), hodil by se nejaky „nette namespace“ ).
Reseni je jednoduche, v tabelle si prejmenuj promenou $params na neco jineho
(napriklad $paramsTabella), pak to jiz bude „fungovat“. Bohuzel je videt ze
projekt je uz mrtvi a nikdo se o nej uz asi moc nestara, ale muzes zkusit
opravit tydle chyby a poslat pull request na github :).
- babcca
- Člen | 23
pro lepsi reseni:
- prejmenuj si protected promenou $params na neco jako $paramsDefault
- to same udelej i v kontruktoru
- prepis load state:
<?php
public function loadState(array $params) {
parent::loadState($params);
foreach($this->defaultParams as $name => $value)
{
if (!isset($this->params[$name]))
{
$this->params[$name] = $value;
}
}
}
?>
Nette nejspise zmenilo sve chovani a nastavuje persistetnim promennym null pokud se nevyskytuji v url.