NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 5 - Kontaktní formulář

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.5.2019 8:54

Kontroler muze byt klidne inicializovany takto:
$x = new mujkontroler($_POS­T)
Podle mne je lepsi se vyhnout situaci, kdy pouzivas globalni promenou uvnitr. Muzes si usetrit spoustu problemu.

 
Odpovědět
13.5.2019 8:54
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Peter Mlich
David Hartinger:13.5.2019 9:02

Nějak si neumím představit jaké problémy si mohu ušetřit, stejně se volá vždy jen jedna akce kontroleru v jeden čas. To bys musel z POST něco mazat a pak na to zapomenou v jiné akci nebo něco podobného, což se nikdy nestane. Nemám rád tohle hnidopíchání do tutoriálů pro začátečníky, že neobsahují v první lekci desetivrstvou architekturu a neuronovou síť. Je to tutoriál pro vysvětlení MVC architektury začátečníkům, na používání $_POST pro čtení dat odeslaných metodou POST není v kontroleru nic špatného. Kdyby jsi napsal, že je lepší řešení a postnul tenhle kód, tak no problem, ale psát pod tento článek, že je "velmi nešťastně napsaný" je docela mimo a ubližuje to jak autorovi, tak lidem, co se z toho učí.

Editováno 13.5.2019 9:03
Odpovědět
13.5.2019 9:02
New kid back on the block with a R.I.P
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.5.2019 9:20

Mne se to nechtelo vypisovat, protoze si myslim, ze s classy vetsi zkusenosti. Ja bych to napsal asi nejak takto nebo jinak.

<?php
class KontaktKontroler extends Kontroler
{
var $form_data;
        function __construct($form_data)
        {
        $this->form_data = $form_data;
        }
        public function zpracuj($parametry)
        {
                $form = $this->form_data;
                $this->hlavicka = array(
                        'titulek' => 'Kontaktní formulář',
                        'klicova_slova' => 'kontakt, email, formulář',
                        'popis' => 'Kontaktní formulář našeho webu.'
                );

                if (isset($form["email"]))
                {
                        if ($form['rok'] == date("Y"))
                        {
                                $odesilacEmailu = new OdesilacEmailu();
                                $odesilacEmailu->odesli("[email protected]", "Email z webu", $form['zprava'], $form['email']);
                        }
                }

                $this->pohled = 'kontakt';
    }
}

---

<?php
class KontaktKontroler extends Kontroler
{
        public function zpracuj($form, $parametry)
        {
                $this->hlavicka = array(
                        'titulek' => 'Kontaktní formulář',
                        'klicova_slova' => 'kontakt, email, formulář',
                        'popis' => 'Kontaktní formulář našeho webu.'
                );

                if (isset($form["email"]))
                {
                        if ($form['rok'] == date("Y"))
                        {
                                $odesilacEmailu = new OdesilacEmailu();
                                $odesilacEmailu->odesli("[email protected]", "Email z webu", $form['zprava'], $form['email']);
                        }
                }

                $this->pohled = 'kontakt';
    }
}

Nebo to nazvat nejak rozumne, obecne. Zrovna mne nenapada nic lepsiho nez $form_data, $form, $post, $mail_form.

Ps nejsou tu ty edit. tlacitka. Aspon code by mohlo byt.

Editováno 13.5.2019 9:21
 
Odpovědět
13.5.2019 9:20
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Peter Mlich
David Hartinger:13.5.2019 9:37

Tvoje řešení je hezký. Dále v navazujícím kurzu se to pak i podobně dělá (formuláře se wrappují do třídy a s POST se již nepracuje). Tady mi to přišlo ještě OK.

Odpovědět
13.5.2019 9:37
New kid back on the block with a R.I.P
Avatar
Otvorený Zdroj
Tvůrce
Avatar
Odpovídá na Michal Šmahel
Otvorený Zdroj:17.5.2019 4:11

Citujem z Lekcie 1

Pohled přijme data od kontroleru a vloží je do připravené šablony. Hotová stránka je zobrazena uživateli, který často o celé této kráse ani netuší :)

A kde je konkrétne napísané ako pohled prijme data od kontroleru?? Kontroler ukladá data do premenných to mi je jasné....

// Nastavení proměnných pro šablonu.... SmerovacKontroler si ukladá data z vnoreného kontroleru
                $this->data['titulek'] = $this->kontroler->hlavicka['titulek'];
                $this->data['popis'] = $this->kontroler->hlavicka['popis'];
                $this->data['klicova_slova'] = $this->kontroler->hlavicka['klicova_slova'];

Skôr vychádza že kontroler prijíma data a metodou vypisPohled() na premenné iba odkazuje ($this->data) a ($this->pohled). Pohled (Šablona) si premenne len dosadí...

Otazkou vlastne je, či je vôbec vhodne písat, že pohled prijíma data od kontrolera.Ked jedine kontroler prijíma data a ukladá ich do premennych a potom na ne odkazuje. Tým, že kontroler zobrazí vystúp, pohled o kontrolerovi nevie, čiže pohled nevie co ma prijat.... len vie co ma dosadiť. Preto sa mi zdá..ze medzi pohľadom a kontrolerom je to trochu abstraktné :-), alebo Davidove texty:-)?

Odpovědět
17.5.2019 4:11
Ak existuje voľná energia, tak autorské právo sú dve smiešne slová..
Avatar
Michal Šmahel:18.5.2019 14:17

Ahoj, bylo by lepší hned v původním příspěvku zmínit danou citaci, aby bylo jasné, co hodláš rozebírat. Navíc se jedná o 5. lekci, komentář patří tedy trochu jinam.

Pro úplné pochopení této problematiky je třeba znát princip funkčnosti include a require, tedy skládání souborů se zdrojovým kódem v PHP. Načtení pohledu a předání dat funguje právě na tomto principu. Zakládá to na tom, že když připojíš HTML soubor nebo soubor generující HTML kód, tento kód se přidá k tomu, co se odešle klientovi. Předání dat funguje tak, že se v kontroleru rozbalí pole s získanými daty od dílčích kontrolerů. Jelikož je PHP kód ve výsledku všechen v jednom souboru (include a require vlastně jen připojují obsah daného souboru k prvnímu souboru, který byl načten), jsou proměnné rozbalené v kontroleru dostupné i v šabloně.

Ještě tě zajímalo, jak řídící kontroler data získá. Je to poměrně jednoduché. Dílčí kontrolery (ty, které tento řídící vytvoří a zavolá na nich zpracování) získaná data ukládají do třídní vlastnosti $data (pole). Tato vlastnost je veřejná, je k ní tedy možnost přistupovat zvenčí - například z řídícího kontroleru. Dále je tu vlastnost $head, do níž dílčí kontrolery ukládají údaje do HTML hlavičky. Za funguje stejně. Řídící kontroler si jen data přečte z těchto vlastností a uloží si je do své vlastnosti data (samozřejmě dojde k jejich spojení). Z této vlastnosti jsou poté rozbaleny na jednotlivé proměnné (název klíče = název proměnné) a použity v šabloně.

David to v článku popisuje správně. Pro lepší pochopení architektury (MVC) využívá určité abstrakce, kdy nenazývá věci podle implementace, ale filozofie architektury. Implementaci však také podrobně popisuje, problém bych v tom neviděl.

Odpovědět
18.5.2019 14:17
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Otvorený Zdroj
Michal Šmahel:18.5.2019 14:20

Zapomněl jsem tě označit.

Odpovědět
18.5.2019 14:20
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Otvorený Zdroj
Tvůrce
Avatar
Otvorený Zdroj:13.6.2019 4:06

Cely systém funguje napr. z podzlozky cms na localhost v XAMPP v3.22 , na adrese (http://localhost/cms) pri tychto zmenach:

1. V subore Kontroler.php iba pridame nazov zlozky do url:

public function presmeruj($url)
        {
                         // tu pridame nazov zlozky cms do url
                header("Location: /cms/$url");
                header("Connection: close");
        exit;
        }

2.V súbore SmerovacKontro­ler.php, doplnime:

private function parsujURL($url)
        { ...
// tu doplnime funkciu, ktora odstrani prvu hodnotu z pola,  v nasom pripade cms..
array_shift($rozdelenaCesta);
return $rozdelenaCesta;
}

3. V subore rozlozeni.phtml nastavime cestu ku korenovej zlozke:

<base href= "/cms/" />

... vsetko...plati aj pre webhosting

Poznamka: Zmeny v suboroch je lepsie vykonat cez NetBeans, pretoze klasicky Notepad pri zmenach v suboroch pridava biele znaky, alebo ine neviditelne znaky, ktore napr. pri ostrom webhosting budú vypisovat chybu 500. Treba sa ujistit.ci sa nepridavaju neviditelne znaky pri zmenach v suboroch.Pokial sa pridavaju system nebude fungovat...
Subor htacces nie je potrebne menit.Vynimocne mozete skusit odkomentovat # RewriteBase / ak by vam system na webhostingu nefungoval, osobne som to vsak nepotreboval. System funguje aj pod PHP 5.6, PHP 7.1 PHP 7.2, PHP 7.3

Odpovědět
13.6.2019 4:06
Ak existuje voľná energia, tak autorské právo sú dve smiešne slová..
Avatar
Otvorený Zdroj
Tvůrce
Avatar
Otvorený Zdroj:13.6.2019 4:23

Ked chceme aby redakcny system fungoval na subdomene webhostingu napr. na adrese

http://cms.nazov_domeny.sk alebo https://cms.nazov_domeny.sk

1.V administracii webhostingu vytvorime korenovu zlozku pre subdomenu:cms­.nazov_domeny­.sk

2.V subore rozlozeni.phtml zmenime korenovu zlozku :

<base href="http://cms.nazov_domeny.sk/" />
// alebo
<base href="https://cms.nazov_domeny.sk/" />

......vsetko...

Editováno 13.6.2019 4:26
Odpovědět
13.6.2019 4:23
Ak existuje voľná energia, tak autorské právo sú dve smiešne slová..
Avatar
Odpovídá na Otvorený Zdroj
FiftypiSoftware:25.8.2019 12:50

Ahoj, díky, toto jsem hledal. Zkoušel jsem x možností, ale array_shift($roz­delCesta); mě nenapadlo. Vždycky přesmerování skončilo chybou too_many_redirects.

 
Odpovědět
25.8.2019 12:50
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 44.