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í.
Funkce, kterou se snažíš použít je dostupná pouze pro registrované uživatele. Buďto se přihlas nebo si zdarma vytvoř nový účet.

Diskuze – Lekce 8 - Výpis článků z databáze v PHP (MVC)

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
Lava
Člen
Avatar
Lava:4.2.2020 14:51

Ahojte, robím jeden taký systém, inšpiroval som sa týmto seriálom. A mal by som takú otázku... mám napr. controller na správu užívateľských účtov (t.j. niečo iné ako User, lebo User budem používať na ešte iné veci). V zásade má na starosti login, logou, registráciu nových, schváľovanie mailov a pod. Toto, čo sa tu používa na $this->hlavicka['title'], používam aj ja, ale k tomu používam tiež $this->hlavicka['sty­les'], to znamená, že si takto "includujem" do <head> html tagu potrebné CSS podsúbory (tzn. zbytočne budem na prihlasovacej stránke includovať CSSko starajúce sa o tabuľky).

Konkrétne v mojom prípade AccountController-a mám takú otázku. Takmer v každej public metóde budem includovať CSSko starajúce sa o formuláre. Teda musím pre každú metódu nastaviť $this->head['styles'] = 'forms'... Nešlo by to ale nastaviť globálne pre všetky metódy (login, register, forgotten-password a pod.) v constructore? Aby som to nemusel sústavne písať v každej metóde a v metóde nastavím len title, príznačné pre danú časť aplikácie?

Odpovědět
4.2.2020 14:51
Aspartám, sacharín, to je môj vitamín
Avatar
Lava
Člen
Avatar
Odpovídá na Lava
Lava:4.2.2020 14:58

Namiesto toho, čo som tu vypisoval, som to proste mal skúsiť a zistil by som, že áno, dá sa to takto, funguje to. Ďakujem sám sebe si. :) :D

Odpovědět
4.2.2020 14:58
Aspartám, sacharín, to je môj vitamín
Avatar
Vojtech Palec:10.2.2020 21:54

Ahoj, nevíte někdo, proč se mi vypíše pouze článek, ovšem ne šablona? Předem děkuji.

 
Odpovědět
10.2.2020 21:54
Avatar
Lava
Člen
Avatar
Odpovídá na Vojtech Palec
Lava:10.2.2020 23:27

A mas $this->pohled('clanek') a existuje aj ten subor clanek.phtml?

Odpovědět
10.2.2020 23:27
Aspartám, sacharín, to je môj vitamín
Avatar
Odpovídá na Lava
Vojtech Palec:11.2.2020 13:28

Ano. Mně se pouze neukazuje ta hlavní šablona.

 
Odpovědět
11.2.2020 13:28
Avatar
Lava
Člen
Avatar
Odpovídá na Vojtech Palec
Lava:11.2.2020 13:32

Tak to by si tušim v SmerovacKontroller mal mať nastavený ten $this->view('sablona'). Neviem ako presne sa to volá, lebo ja som si to písal hneď v angličtine.

Odpovědět
11.2.2020 13:32
Aspartám, sacharín, to je môj vitamín
Avatar
Odpovídá na Lava
Vojtech Palec:11.2.2020 16:18

To mám taky. Ta šablona se mi neukazuje jen v případě, že načítám z databáze.

Editováno 11.2.2020 16:19
 
Odpovědět
11.2.2020 16:18
Avatar
Lava
Člen
Avatar
Odpovídá na Vojtech Palec
Lava:12.2.2020 11:13

Tak mozno databaza hodi nejaky skryty error, ktore zabrani dalsiemu spracovaniu skriptu? Daj kod, bez toho ti nikto nepomoze

Odpovědět
12.2.2020 11:13
Aspartám, sacharín, to je môj vitamín
Avatar
Odpovídá na Lava
Vojtech Palec:12.2.2020 15:43
class ClanekKontroler extends Kontroler{
    //put your code here

    public function zpracuj($parametry) {
        $spravceClanku = new SpravceClanku();


        $clanek = $spravceClanku->vratClanek($parametry[0]);

        if (!$clanek)
            $this->presmeruj('chyba');

        // Hlavička stránky
        $this->hlavicka = array(
            'titulek' => $clanek['titulek'],
            'klicova_slova' => $clanek['klicova_slova'],
            'popis' => $clanek['popisek'],
        );

        $this->data['titulek'] = $clanek['titulek'];
        $this->data['obsah'] = $clanek['obsah'];

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

...

<?php

class SmerovacKontroler extends Kontroler
{
        // Instance controlleru
        protected $kontroler;

        // Metoda převede pomlčkovou variantu controlleru na název třídy
        private function pomlckyDoVelbloudiNotace($text)
        {
                $veta = str_replace('-', ' ', $text);
                $veta = ucwords($veta);
                $veta = str_replace(' ', '', $veta);
                return $veta;
        }

        // Naparsuje URL adresu podle lomítek a vrátí pole parametrů
        private function parsujURL($url)
        {
                // Naparsuje jednotlivé části URL adresy do asociativního pole
        $naparsovanaURL = parse_url($url);

                $naparsovanaURL["path"] = ltrim($naparsovanaURL["path"], "/");

                $naparsovanaURL["path"] = trim($naparsovanaURL["path"]);

                $rozdelenaCesta = explode("/", $naparsovanaURL["path"]);
                return $rozdelenaCesta;
        }

    // Naparsování URL adresy a vytvoření příslušného controlleru
    public function zpracuj($parametry)
    {
                $naparsovanaURL = $this->parsujURL($parametry[0]);

                if (empty($naparsovanaURL[0]))
                        $this->presmeruj('clanek/uvod');

                $tridaKontroleru = $this->pomlckyDoVelbloudiNotace(array_shift($naparsovanaURL)) . 'Kontroler';

                if (file_exists('kontrolery/' . $tridaKontroleru . '.php'))
                        $this->kontroler = new $tridaKontroleru;
                else
                        $this->presmeruj('chyba');

        $this->kontroler->zpracuj($naparsovanaURL);


                $this->data['titulek'] = $this->kontroler->hlavicka['titulek'];
                $this->data['popis'] = $this->kontroler->hlavicka['popis'];
                $this->data['klicova_slova'] = $this->kontroler->hlavicka['klicova_slova'];


                $this->pohled = 'rozlozeni';
    }

}
class Db {
    //put your code here
    private static $spojeni;

    private static $nastaveni= array(
         PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
    PDO::ATTR_EMULATE_PREPARES => false,

    );


    public static function pripoj($host, $uzivatel, $heslo, $databaze)
{
    if (!isset(self::$spojeni))
    {
        self::$spojeni = @new PDO(
            "mysql:host=$host;dbname=$databaze",
            $uzivatel,
            $heslo,
            self::$nastaveni
        );
    }
}

     public static function dotazJeden($dotaz, $parametry=array()){
         $navrat= self::$spojeni->prepare($dotaz);
         $navrat->execute($parametry);
         return $navrat->fetch();

     }

     public static function dotazVsechny($dotaz, $parametry=array()){
         $navrat= self::$spojeni->prepare($dotaz);
         $navrat= execute($parametry);
         return $navrat->fetchAll();
     }

     public static function dotazSamotny($dotaz, $parametry=array()){
         $vysledek = self::dotazJeden($dotaz, $parametry);
         return vysledek[0];
     }

     public static function dotaz($dotaz, $parametry=array()){
         $navrat= self::$spojeni ->prepare($dotaz);
         $navrat->execute($paramety);
         return $navrat->rowCount();
     }

}
<?php
mb_internal_encoding("UTF-8");
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

function autoLoad($trida){
    if(preg_match('/Kontroler$/', $trida))
        require("Kontrolery/".$trida.".php");

    else
        require("Modely/".$trida.".php");

}

spl_autoload_register("autoLoad");


Db::pripoj("127.0.0.1", "root", "", "mvc_db");

$router= new SmerovacKontroler();
$router ->zpracuj(array($_SERVER['REQUEST_URI']));
$router->vypisPohled();

...

class SpravceClanku {
    //put your code here

    public function vratClanek($url){

        return Db::dotazJeden(
                'SELECT `clanek_id`, `titulek`, `obsah`, `popisek`, `klicova_slova`
                FROM `clanek`
                WHERE `url` = ? ', array($url));
    }

    public function vratClanky(){
        return Db::dotazVsechny(
                '
                SELECT `clanky_id`, `titulek`, `url`, `popisek`
                FROM `clanky`
                ORDERED BY `clanky_id` DESC '

                );
    }

}
Editováno 12.2.2020 15:44
 
Odpovědět
12.2.2020 15:43
Avatar
 
Odpovědět
12.2.2020 15:51
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 75.