IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

2. diel - Cms v Nette - Vytvorenie projektu a napojenie databázy

V minulej lekcii, Cms v Nette - Čo je CMS a na čo slúži , sme sa dozvedeli, čo je to CMS, na čo slúži a aké výhody jeho využívanie má. Nainštalovali sme si tiež potrebné nástroje.

V dnešnej lekcii si vytvoríme nový Nette projekt pomocou nástroja Composer. K tomu využijeme Nette vo verzii 3 a PHP minimálne vo verzii 7.1. Nette Framework si môžeme stiahnu manuálne, ale my začneme nový projekt s využitím Composer. Ak Composer nepoznáte, určite by ste mali začať s ním. Je to veľmi jednoduchý a užitočný nástroj na inštaláciu balíčkov a ich závislosti. Viac sa môžeme dozvedieť v dokumentácii Composer.

S nástrojom Composer si veľmi jednoducho stiahneme a nainštalujeme základnú kostru aplikácie. Ako prvý si nájdeme koreňový adresár webového servera (napríklad /var/www alebo C:\XAMPP\htdocs\) a použijeme nasledujúci konzolový príkaz:

composer create-project nette/web-project nette-cms

Ak nechcete použiť Composer, stiahnite si archív Nette, rozbaľte ho, skopírujte ho do koreňového adresára webového servera a premenujte na nette-cms. Ak by zdroj už nebol dostupný, môžete si ho stiahnuť v prílohe na konci článku.

Uvítací stránka

Po vytvorení Nette projektu overíme jeho správnu inštaláciu navštívením adresy http: // localhost / nette-cms / www. Ak je adresa správna, mali by sme vidieť túto úvodnú stránku Nette Frameworku:

Úspešná inštalácia Nette Frameworku - Jednoduchý redakčný systém v Nette

Štruktúra projektu

Aplikácia má nasledujúcu štruktúru:

nette-blog/
├── app/              ← adresář s aplikací
│   ├── config/       ← konfigurační soubory
│   ├── Presenters/   ← třídy presenterů
│   │   └── templates/← šablony
│   ├── Router/       ← konfigurace URL adres
│   └── Bootstrap.php ← zaváděcí třída Bootstrap
├── bin/              ← skripty spouštěné z příkazové řádky
├── log/              ← logování chyb
├── temp/             ← dočasné soubory, cache, …
├── vendor/           ← knihovny instalované Composerem
│   └── autoload.php  ← autoloading všech nainstalovaných balíčků
└── www/              ← veřejný adresář, který je jako jediný přístupný z prohlížeče
    └── index.php     ← prvotní soubor, kterým se aplikace spouští

Adresár www/ slúži na ukladanie verejne prístupných súborov ako sú obrázky, CSS štýly či JavaScript súbory. Iba tento adresár je prístupný z internetu. Pre nás je najdôležitejšie adresár app/. Tu nájdeme súbor Bootstrap.php, ktorý slúži na načítanie aplikačného frameworku a nastavenia aplikácie. Pre prístup k projektu bez www v URL upravíme súbor .htaccess v root (koreňovej) priečinku:

Order Allow,Deny
Allow from all

RewriteEngine On
RewriteRule ^(.*)$ www/$1 [L]

Teraz budeme pre prístup k aplikácii využívať adresu http: // localhost / nette-cms /.

Prvotné úpravy

Než začneme, upravíme si úvodnú stránku. Nahradíme teda obsah súboru app/Presenters/templates/Homepage/default.latte za tento kód:

<div>

    <h2>Hello World!</h2>
</div>

Na našej adrese sa objaví táto stránka:

Hello World na úvodnej stránke našej aplikácie - Jednoduchý redakčný systém v Nette

Debugger

Jeden z najdôležitejších nástrojov pri vývoji v Nette frameworku je ladiace nástroj Tracy. Je možné ho vyskúšať vytvorením chyby v niektorom .php súbore. Otvoríme si súbor app/Presenters/HomepagePresenter.php a schválne vytvoríme chybu v súbore (napríklad pridaním x do HomepagePresenter triedy). Po otvorení webovej stránky sa nám objaví nasledujúce hláška:

Ukážka chyby aplikácie pri zapnutom debug režime - Jednoduchý redakčný systém v Nette

Týmto spôsobom nám Tracy pomáha odhaľovať chyby v aplikácii. Môžeme si tiež všimnúť plávajúceho baru v pravej dolnej časti obrazovky, ktorý sa objavuje vždy pri zapnutom debug módu. Zobrazuje informácie o behu a načítaní aplikácie:

Detail plávajúceho Tracy baru - Jednoduchý redakčný systém v Nette

V produkčnom móde aplikácie je nástroj Tracy vypnutý a nezobrazuje žiadne informácie. Všetky chyby aplikácie ukladá do zložky log/. Ak by sme si chceli vyskúšať vypnúť Tracy, otvoríme súbor app/Bootstrap.php a pridáme nasledujúci riadok nad metódu enableTracy():

$configurator->setDebugMode(false);
$configurator->enableTracy(__DIR__ . '/../log');

Po uložení súboru a otvorenie sa nám zobrazí hláška, ktorá hlási Server Error:

Ukážka Server Error pri výplaty Tracy - Jednoduchý redakčný systém v Nette

Teraz keď sa pozrieme do zložky log/ uvidíme súbor exception.log a jeho HTML verziu začínajúcich exception-, ktorá v názve obsahuje dátum, čas a ID chyby. Zakomentujeme novo pridaný riadok v Bootstrap.php:

$configurator->setDebugMode(false);

Tracy automaticky povolí vývojársky režim na localhost a zakáže ho všade inde. Chybu, ktorú sme vytvorili, môžeme opraviť a pokračovať v písaní aplikácie.

Vytvorenie databázy aplikácie

Pre ukladanie dát použijeme MySQL databázu, pretože je najviac rozšírená medzi programátormi webových aplikácií. Pokojne môžete použiť inú, podľa vášho uváženia, ale bude potrebné si upravovať kód pre vašu databázu.

Začneme otvorením aplikácie PhpMyAdmin, ktorá je súčasťou inštalácie XAMPP. Nájdeme ju na adrese localhost / phpmyadmin:

Úvodná stránka PhpMyAdmin - Jednoduchý redakčný systém v Nette

Vytvoríme si našej databáze kliknutím na Nová, vyplníme meno databázy nette-cms s použitím kódovania utf8mb4_czech_ci a klikneme na Vytvoriť. Vytvoríme si novú tabuľku article buď pomocou SQL skriptu alebo pomocou PhpMyAdmin. Naša tabuľka bude mať veľkosť 7 polí. Využijeme možnosti tréningu písania SQL dotazov:

DROP TABLE IF EXISTS `article`;
CREATE TABLE IF NOT EXISTS `article` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date_add` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `has_picture` int(11) DEFAULT NULL,
  `title` varchar(255) DEFAULT NULL,
  `url` varchar(255) DEFAULT NULL,
  `short_description` varchar(255) DEFAULT NULL,
  `description` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

Následne daný dotaz vložíme do SQL konzoly v PhpMyAdmin:

Import SQL skriptu v prostredí PhpMyAdmin - Jednoduchý redakčný systém v Nette

Ešte predtým, ako aplikáciu prepojíme s databázou, vytvoríme prvé články, ktoré vložíme pomocou SQL dotazu do našej databázy:

INSERT INTO `article` (`id`, `date_add`, `has_picture`, `title`, `url`, `short_description`, `description`) VALUES
(1, '2020-03-15 11:54:20', 1, 'Základ PHP', '1-zaklad-php', 'Zde se naučíme základy PHP.', 'Co je to PHP? Jak je rozjet na localu? A na konec základní program Ahoj světe.'),
(2, '2020-03-16 11:05:31', 1, 'CSS Prakticky', '2-css-prakticky', 'Koukneme se na zoubek CSS.', '<p>Co je to CSS? Uděláme první kroky a ovládneme jej. A na konec si ukážeme best-off neboli <strong>BootStrap</strong> <strong>framework</strong>.</p>');

Pripojenie databázy

Teraz, keď už máme vytvorenú tabuľku pre články, môžeme prepojiť aplikáciu s databázou a zobraziť články na našej stránke.

Najprv musíme aplikáciu povedať, akú databázu má použiť. Pripojenie k databáze nastavíme v súbore app/config/local.neon pomocou DSN a prihlasovacích údajov. Malo by to vyzerať nejako takto:

database:
    dsn: 'mysql:host=127.0.0.1;dbname=nette-cms'
    user: root
    password: *heslo k databázi*

Pri úprave neon súborov je potrebné dbať na vhodné odsadzovanie. Je možné využívať medzery alebo tabulátor, ale nie oboje zároveň. Predvolený súbor využíva tabulátor.

Všetka konfigurácia, vrátane konfigurácie databázy, je uložená v adresári /app/config/ v súboroch common.neon a local.neon. Súbor common.neon obsahuje globálne nastavenia aplikácie a local.neon iba tie parametre, ktoré sú špecifické pre aktuálne prostredie (rozdiel medzi vývojovým a produkčným serverom a pod.).

Teraz keď aplikácia vie, ako sa pripojiť do databázy, musíme zariadiť, aby náš Presenter vedel o spojenie s databázou. Pre získanie spojenie využijeme konštruktor Presenter a náš kód bude vyzerať nasledovne:

<?php

declare(strict_types=1);

namespace App\Presenters;

use Nette;


class HomepagePresenter extends Nette\Application\UI\Presenter
{
    /** @var Nette\Database\Context */
    private $database;

    public function __construct(Nette\Database\Context $database)
    {
        $this->database = $database;
    }

    // ...
}

Načítanie príspevkov

Teraz, keď máme pripojenie s databázou kompletný, môžeme ho využiť a načítať články, ktoré sú v databáze uložené. Využijeme funkcie renderDefault, kde načítame články z databázy a pošleme ich do šablóny:

public function renderDefault(): void
{
    $this->template->articles = $this->database->table('article')
        ->order('date_add DESC')
        ->limit(5);
}
v metodě order bylo date_at DESC namísto date_add

Presenter teraz obsahuje jednu renderovací metódu renderDefault(), ktorá odovzdáva dáta z databázy do šablóny. Šablóny sú umiestnené v app/Presenters/templates/{PresenterName}/{viewName}.latte, takže v tomto prípade je šablóna umiestnená v app/Presenters/templates/Homepage/default.latte. V šablóne teraz bude k dispozícii premenná $articles, v ktorej sú príspevky získané z databázy.

Teraz si upravíme našu šablónu a vložíme do nej tento kód:

{block content}
    <h2>Hello World</h2>
{/block}

Týmto sme nadefinovali blok content, ktorý bude vložený do hlavného layoutu. Ak opäť obnovíme prehliadač, uvidíme stránku s textom "Hello World" (v zdrojovom kóde is HTML hlavičkou a pätičkou definovanú v @layout.latte).

Teraz môžeme vykresliť príspevky, ktoré sme si v Presenter načítali a nahradíme tag <h2>:

{block content}
    <div n:foreach="$articles as $article" class="post">
        <div class="date">{$article->date_add|date:'F j, Y'}</div>

        <h2>{$article->title}</h2>

        <div>{$article->description}</div>
    </div>
{/block}

Po uložení a otvorení našej aplikácie v prehliadači uvidíme nasledujúce:

Načítané články z databázy - Jednoduchý redakčný systém v Nette

Pre dnešok to je všetko. Nabudúce si vytvoríme ďalšie časti našej aplikácie:)

V ďalšej lekcii, Cms v Nette - Autentifikácia užívateľov , si vytvoríme jednoduchý autentifikátor a tabuľku užívateľov. Tiež si upravíme štruktúru projektu.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 435x (860.06 kB)

 

Predchádzajúci článok
Cms v Nette - Čo je CMS a na čo slúži
Všetky články v sekcii
Jednoduchý redakčný systém v Nette
Preskočiť článok
(neodporúčame)
Cms v Nette - Autentifikácia užívateľov
Článok pre vás napísal Jakub Gabčo
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity