Standartní html formulář a zpracování post požadavku v presenteru jiné stránky
- Unlink
- Člen | 298
Joacim napsal(a):
post požadavku odkázat na metodu presenteru s redirectem na jinou stránku
Nejako nechápem čo myslíš, ale priamo na metódu, tak ako pri
štandartných onSuccess callbackoch to nejde.
Musíš si spraviť nejakú action metódu, do ktorej dáš ten redirect a
odkazovať sa na ňu.
- Joacim
- Člen | 229
Unlink napsal(a):
Joacim napsal(a):
post požadavku odkázat na metodu presenteru s redirectem na jinou stránku
Nejako nechápem čo myslíš, ale priamo na metódu, tak ako pri štandartných onSuccess callbackoch to nejde.
Musíš si spraviť nejakú action metódu, do ktorej dáš ten redirect a odkazovať sa na ňu.
Mám stránku show a stránku edit, na stránce show generuji fotky a u každé fotky mám input, pokud jej zaškrtnu a vyberu tímto způsobem více fotek a poté dám Editovat vybrané fotky(submit), odešlu na stránku edit např: 20 z 30 zaškrtnutých fotek(jejich ID) a na stránce edit je vykreslím(pouze vybranéí fotky odeslané přes form z show stránky).
Na stránce show mám klasický formulář a v něm počet inputů rovnající se počtu fotek(nepoužívám nette form), ale nevím jak u formuláře nastavit (pokud to v nette jde), aby mě po zmáčknutí tlačítka editovat vybrané fotky přesměrtoval na stránku edit s postem (pole prvků ID obrázků).
Jak to udělat přes ajax i nette forms vím, ale těď potřebuji tuto možnost (v show.latte mám klasicky použité tagy form input atd, nic nevytvářím pomocí nette, ale post formuláře chci zachytávat pomocí nette)
Editoval Joacim (24. 9. 2015 20:27)
- Unlink
- Člen | 298
Tomu formuláru čo máš dáš
action="{plink edit}"
a potom metóda actionEdit
bude mať parameter s name tých
inputov
<input type="checkbox" name="selected[]" value="id1">
public function actionEdit(array $selected)
Edit: tak vlastne nie, musíš si to vytiahnuť z requestu
$this->getHttpRequest()->getPost('selected');
Editoval Unlink (24. 9. 2015 20:39)
- Joacim
- Člen | 229
Už mi to valí
public function actionEdit($gid) {
$this->httpRequest = $this->context->getService('httpRequest');
if ($this->httpRequest->isMethod('POST')) {
$this->edit_images = $this->getHttpRequest()->getPost('images_list');
}
}
<form action="{$presenter->link('Gallery:edit', $gid)}" name="showForm" method="POST">
<input type="checkbox" class="check" name="images_list[]" value="{$img->id}" id="img_{$img->id}">
Lze v nette vložit array do mysql IN ? Mám pole všech ID fotek které chci editovat a potřebuji je v db nalézt a načíst všechny informace z db a poté v edit.latte vypsat
Editoval Joacim (26. 9. 2015 17:27)
- Joacim
- Člen | 229
Unlink napsal(a):
Nepoužívať
$this->context->getService('httpRequest')
použi ako ja v tej ukáže$this->getHttpRequest()
.Ak používaš nette/database tak tá si s poliami poradiť vie
$context->table('fotka')->where('id', $this->edit_images);
Ok opraveno, bohužel jsem narazil na ještě jednu věc a tou je vrácení
ID posledního vloženého záznamu
$insert->id mi hlásí že Non object instance a ID tam
skutečně není
$insert = $this->database->table("gallery_images")->insert(array(
'name' => $file->getName(),
'url' => $file->getTemporaryFile(),
'thumb_url' => NULL,
'size' => $file->getSize(),
'created' => date('Y-m-d H:i:s'),
'createdBy' => $this->user->identity->user_id,
'edited' => NULL,
'editedBy' => NULL,
'contentType' => $file->getContentType(),
'sanitizedName' => $file->getSanitizedName(),
'gallery_id' => $gid
));
// $file je instance HttpUploadedFile
$filePath = \Nette\Environment::expand("%appDir%") . $this->imageDir . $gid . "/original/" . $file->getName();
if (!\Nette\Environment::isProduction()) { // DEV & TEST
if ($file->move($filePath)) {
$gallery->resize($filePath, $gid, $file->getName());
//$this->flashMessage("File " . $file->getName() . " was successfully moved!");
$this->sessionGallery->edit[$i] = $insert->id;
- Joacim
- Člen | 229
Unlink napsal(a):
Tabuľka
gallery_images
má primárny kľúčid
sauto_increment
?
A čo obsahuje tá premenná$insert
?
$insert
array(11) { 'name' => string(12) "IMG_4252.jpg" 'url' => string(90) "C:\Users\test\test-mvc\app/../temp\uploads-MFU\9aebaf0ce1fc757c314aaa0e0e328343ad599ca1" 'thumb_url' => NULL 'size' => int(277858) 'created' => string(19) "2015-09-27 10:34:05" 'createdBy' => int(1) 'edited' => NULL 'editedBy' => NULL 'contentType' => string(10) "image/jpeg" 'sanitizedName' => string(12) "IMG-4252.jpg" 'gallery_id' => string(2) "18" }
Ano, ID obsahuje a je tam nastaven AUTO_INCREMENT → $insert obsahuje pouze data vložená (viz: array výše)
/** @var Nette\Database\Context */
protected $database;
/** @var Nette\Http\Session */
protected $sessionGallery;
public function __construct(Nette\Database\Context $database, Nette\Http\Session $session) {
$this->database = $database;
$this->sessionGallery = $session;
// Získáme přístup do sekce 'login_restricted':
$this->sessionGallery = $session->getSection('edit_images');
// Proměnná $section->login_restricted vyexpiruje při zavření prohlížeče
// $this->sessionGallery->setExpiration('5 minutes', 'login_restricted');
}
Mám Gallery presenter který dědí od protected presenteru a ten dědí od base presenteru (konstruktor pouze v Base)
- Joacim
- Člen | 229
Unlink napsal(a):
Môžeš mi dumpnúť tú tabuľku? Nie dáta ale len
CREATE TABLE
príkaz.
--
-- Struktura tabulky `gallery_images`
--
CREATE TABLE IF NOT EXISTS `gallery_images` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`url` mediumtext,
`thumb_url` mediumtext,
`size` int(11) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`createdBy` int(11) DEFAULT NULL,
`edited` datetime DEFAULT NULL,
`editedBy` int(11) DEFAULT NULL,
`contentType` mediumtext,
`sanitizedName` mediumtext,
`gallery_id` int(11) NOT NULL,
`archived` tinyint(1) NOT NULL DEFAULT '0',
`visible` tinyint(1) NOT NULL DEFAULT '1',
`cs_name` varchar(255) NOT NULL,
`en_name` varchar(255) NOT NULL,
`cs_technique` varchar(255) NOT NULL,
`en_technique` varchar(255) NOT NULL,
`dimension` varchar(255) NOT NULL,
PRIMARY KEY (`id`,`gallery_id`),
KEY `fk_gallery_images_gallery_idx` (`gallery_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=120 ;
- Unlink
- Člen | 298
No, presne ako som si myslel, máš tam zložený PK
PRIMARY KEY (
id,
gallery_id),
a ono je to
tam tak divne spravené…
https://github.com/…election.php#L764
Momentálne sa snažím ten insert fixnúť, lebo nefunguje insert do tabuľky
bez auto_increment PK, tak sa pozriem aj na takýto usecase.
Takže ak nutne nepotrebuješ, tak odstráň to gallery_id z PK, lebo ono to tam ani nemá zmysel mať.
Editoval Unlink (27. 9. 2015 11:26)
- Joacim
- Člen | 229
Unlink napsal(a):
No, presne ako som si myslel, máš tam zložený PK
PRIMARY KEY (
id,
gallery_id),
a ono je to tam tak divne spravené…
https://github.com/…election.php#L764
Momentálne sa snažím ten insert fixnúť, lebo nefunguje insert do tabuľky bez auto_increment PK, tak sa pozriem aj na takýto usecase.Takže ak nutne nepotrebuješ, tak odstráň to gallery_id z PK, lebo ono to tam ani nemá zmysel mať.
Stačí oddělat jen gallery_id z PK nebo i FK ?
- Joacim
- Člen | 229
Unlink napsal(a):
Joacim napsal(a):
Stačí oddělat jen gallery_id z PK nebo i FK ?
Iba z PK
Trying to get property of non-object, smazáno, ale stále nefunguje
CREATE TABLE IF NOT EXISTS `gallery_images` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`url` mediumtext,
`thumb_url` mediumtext,
`size` int(11) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`createdBy` int(11) DEFAULT NULL,
`edited` datetime DEFAULT NULL,
`editedBy` int(11) DEFAULT NULL,
`contentType` mediumtext,
`sanitizedName` mediumtext,
`gallery_id` int(11) NOT NULL,
`archived` tinyint(1) NOT NULL DEFAULT '0',
`visible` tinyint(1) NOT NULL DEFAULT '1',
`cs_name` varchar(255) NOT NULL,
`en_name` varchar(255) NOT NULL,
`cs_technique` varchar(255) NOT NULL,
`en_technique` varchar(255) NOT NULL,
`dimension` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_gallery_images_gallery_idx` (`gallery_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=123 ;
$insert = $this->database->table("gallery_images")->insert(array(
'name' => $file->getName(),
'url' => $file->getTemporaryFile(),
'thumb_url' => NULL,
'size' => $file->getSize(),
'created' => date('Y-m-d H:i:s'),
'createdBy' => $this->user->identity->user_id,
'edited' => NULL,
'editedBy' => NULL,
'contentType' => $file->getContentType(),
'sanitizedName' => $file->getSanitizedName(),
'gallery_id' => $gid
));
var_dump($insert->id);exit();