Standartní html formulář a zpracování post požadavku v presenteru jiné stránky

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

Lze v nette vytvořit standartní html formulář(bez použití nette forms) a poté se v post požadavku odkázat na metodu presenteru s redirectem na jinou stránku ? Něco jsem zkoušel, ale zatím neúspěšně.

Unlink
Člen | 298
+
0
-

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
+
0
-

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
+
+1
-

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)

nettolog
Člen | 68
+
-6
-

Mělo by to jít stejně, jako bez nette – do action formuláře dáš URL na nějaký presenter a v daném presenteru dostaneš hodnoty klasicky v $_POST.

Joacim
Člen | 229
+
0
-

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)

Unlink
Člen | 298
+
0
-

Nepoužívaj $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);

Editoval Unlink (27. 9. 2015 9:40)

Joacim
Člen | 229
+
0
-

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;
Unlink
Člen | 298
+
0
-

Tabuľka gallery_images má primárny kľúč id s auto_increment?
A čo obsahuje tá premenná $insert?

Joacim
Člen | 229
+
0
-

Unlink napsal(a):

Tabuľka gallery_images má primárny kľúč id s auto_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)

Unlink
Člen | 298
+
0
-

Môžeš mi dumpnúť tú tabuľku? Nie dáta ale len CREATE TABLE príkaz.

Joacim
Člen | 229
+
0
-

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
+
0
-

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
+
0
-

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 ?

Unlink
Člen | 298
+
0
-

Joacim napsal(a):

Stačí oddělat jen gallery_id z PK nebo i FK ?

Iba z PK

Joacim
Člen | 229
+
0
-

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();
Unlink
Člen | 298
+
+1
-

Skús zmazať cache.

Editoval Unlink (27. 9. 2015 12:24)

Joacim
Člen | 229
+
0
-

Díky moc, už to funguje, jen ta změna v DB není zrovna košér, ale co se dá dělat