DataTables a ukladani stavu na serveru
- Glottis
- Člen | 129
cao, mam takovy problemek nebo spis potrebuju jen tak nakopnout. pouzivam datatables. ty maji ukladani stavu kamsi ale ja chci stav ukladat na serveru k profilu uzivatele.
planuju si na ty datatables udelat komponentu ale prave zatim premyslim jak to uchopit, aby to bylo univerzalni. kam a jak nejlepe to uchopit? jak propasovat do komponenty „neco“ kam pujde stav ulozit? a pritom tam potrebju vazby na uzivatele. nejak bych to samozrejme dokazal sprasit :) ale rad bych to mel ciste :)
dik za podnety :)
Glo
- vvoody
- Člen | 910
Vela sme sa toho teba nedozvedeli ;) nvm co to je datatables (google mi napovedal toto) takze ak chces realnu radu tak proste zacni a ked ti bude nieco nejasne tak nevahaj a pytaj sa ;) alebo proste predhod realne vstupy systemu (nejake vzorove data a ich zdroj/struktura) a ako si predstavujes vystup.
- Glottis
- Člen | 129
no jak to tak ctu po sobe tak je to asi trosku zmatene :)
je to to co si poslal.
tak ja neco splacam a pak to sem kdyz tak hodim. ale v prvotni fazi me hlavne zajima, kam je vhodne si stav komponent ukladat? do mysql? nebo sqlite nekam do tempu? nebo ma na to nette neco jineho? do sessen se mi to nelibi, protoze to neni zas tak trvale jak bych chtel
- Glottis
- Člen | 129
tak jsem dal neco dohromady. funguje to tak jen jestli to je z pohledu nette tak jak by asi melo?
neon
<?php
services:
database: @nette.database.default
dataTableState: DataTableState\DataTableState(@database::table(datatable_state))
?>
sluzba pro ukladani a nacitani
<?php
class DataTableState {
/** var Nette\Database\Connection $connection */
private $connection;
function __construct(\Nette\Database\Table\Selection $connection)
{
$this->connection = $connection;
}
public function saveState($name, $id, $data) {
$this->connection->where(array("table" => $name, "user_id" => $id))->delete();
$this->connection->insert(array('table' => $name, 'user_id' => $id, 'data' => $data));
}
public function loadState($name, $id) {
$tmp = $this->connection->where(array("table" => $name, "user_id" => $id))->select('data')->fetch()->data;
return $tmp;
}
}
?>
komponenta
<?php
class DataTable extends Control {
/** var DataTablesState\DataTablesState $state */
private $state;
private $user_id = null;
function __construct(DataTableState\DataTableState $state)
{
$this->state = $state;
}
protected function createTemplate($class = NULL) {
$template = parent::createTemplate();
$template->setFile(dirname(__FILE__) . '/DataTable.latte');
return $template;
}
public function setUid($uid) {
$this->user_id = $uid;
}
public function render() {
$this->template->name = $this->name;
return $this->template->render();
}
public function handleSaveState() {
$tmp = $this->presenter->request->getPost();
$this->state->saveState($this->name, $this->user_id, $tmp['jsonData']);
$this->presenter->sendResponse(new \Nette\Application\Responses\JsonResponse(array()));
}
public function handleLoadState() {
$data = $this->state->loadState($this->name, $this->user_id);
$this->presenter->sendResponse(new \Nette\Application\Responses\JsonResponse(array($data)));
}
}
?>
kousek z presenteru a sablonu sem nedavam, je to jeden radek
<?php
public function createComponentTabulka($name) {
$t = new DataTable\DataTable($this->context->getService('dataTableState'));
$t->setUid($this->user->id);
return $t;
}
?>
dik :)
- Glottis
- Člen | 129
ted nevim jestli uplne chapu. takhle si to myslel?
<?php
class nejakyPresenter extends BasePresenter
{
/** var DataTablesState\DataTablesState $saver */
private $saver;
function __construct(Nette\DI\Container $context) {
parent::__construct($context);
$this->saver = $context->getService('dataTableState');
}
public function createComponentTableCdr($name) {
$t = new DataTable\DataTable($this->saver);
$t->setUid($this->user->id);
$t->filter(false);
?>
- vvoody
- Člen | 910
<?php
class nejakyPresenter extends BasePresenter
{
/** var DataTablesState\DataTablesState $saver */
private $saver;
function __construct(Nette\DI\Container $context, DataTableState $saver) {
parent::__construct($context);
$this->saver = $saver;
}
public function createComponentTableCdr($name) {
$t = new DataTable\DataTable($this->saver);
$t->setUid($this->user->id);
$t->filter(false);
?>
Takto. Jednoducho podla DI by zavislosti (npr tvoj saver) mal zabezpecovat vzdy nadradeny objekt a nie si ich ziskavat zo vzduchu (z contextu) pocass behu presenteru.
Preco sa potom predava context v konstruktore? Kvoli spatnej kompatibilite :)
edit: teraz pozeram aka je vlastne cesta k tej triede DataTableState, vsade pouzivas DataTableState\DataTableState celkom nechapem :) namespace sa vola tak isto ako trieda?
Editoval vvoody (17. 5. 2012 12:40)
- Glottis
- Člen | 129
aha, no me prave matlo to ze tam stejne ten context ( klavir? :) ) dat musim protoze ho potrebuje baseprasenter. tak mi prislo zbytecne to tam davat jeste jednou ale je to takhle jasnejsi to jo.
jj namespace sejmenuje stejne jako trida ale to si jen tak hraju, to pak nejak prejmenuju. se s temahle novotama zatim spis tak seznamuju :)