Update README.md
Pavel Tatar authored
14bb303f
Name Last commit Last update
.idea new
docker new
web new
.gitignore new
README.md Update README.md
docker-compose.yml new

Nette logo

Nette template

Tento template je vhodné si naklonovat rovnou už v GitLabu, protože projekt už bude mít pojmenování podle vašeho přání. Součástí template je i konfigurace DOCKERU.

Import do nového projektu krok 1

Zde vybereme "Import projekt".

Path mapping

Import do nového projektu krok 2

Zde vybereme "Repo by URL.

Path mapping

Import do nového projektu krok 3

Vyplnění údajů pro import template do vašeho nového projektu:

1, Git repository URL - URL zdrojového repozitáře (můj template)
2, Username (optional) - vaše přihlašovací jméno
3, Password (optional) - vaše přihlašovací heslo
4, Project name - jméno nového projektu
5, Visibility Level - viditelnost projektu

Path mapping

Nastavení xdebug

Nastavení debug a portů:

Nastavení cesty k projektu a uvnitř kontejneru:

Základní příkazy pro konfiguraci kontejneru

Build image

docker-compose build

Toto by melo stahnout a nastavit vše potřebné

Sestaveni a spustení kontejneru

docker-compose up  -d nebo
docker-compose up -d --build

V tuto chvili by mel byt docker projekt ready na http://localhost:85 viz soubor docker-compose.yml, kde to jde i změnit. --build používáme pro přegenerování image kontejneru.

http://localhost:82

ukončení kontejneru

docker-compose down  

Potom je možné i na stejný port spustit jiný kontejner.

SQL databáze a adminer

Součásti konfigurace je SQL databáze a adminer. Najdeme jí na url:

http://localhost:85/adminer

Databáze mezi kontejnery je na portu 3306 viz soubor docker-compose.yml. Není potřeba psát do připojení k databázi IP a port. Stačí název service ze souboru docker-compose.yml vč. jména root a hesla.

mysqldb

Neukládejte na Gitlab soubory DB, pouze sql dump. Jedná se o adresář ./data/database, který musí zůstat git ignore.

Konfigurace routování

Konfigurace routování se nastavuje v class Router/RouterFactory.php

	public static function createRouter(): RouteList
	{
		$router = new RouteList;
		$router->addRoute('<presenter>/<action>[/<id>]', 'Homepage:default');
		return $router;
	}

Šablonovací systém "LATTE"

Šablony jsou v adresáři templates a pojmenování má formát nazevsablony.latte. Když je šablona v podadresáří, voláme Homepage/default.latte. Layoutová šablony, která musí začínat "@" se nastavuje, pokud není @layout.latte v Presenteru.

$this->setLayout("nazev_layoutu");

označení bloku html contentu, co se includuje podle příslušné akce presenteru do layoutu:

{block content}
// nejaké html pro content
{/block}

příklad vložení contentu jednotlivých stránek do layoutu:

{include content}

pro případ vložení nějakého js nebo css konkrétní stránky do layoutu:

	{block scripts}
	{/block}
	{block css}
	{/block}

příklad výpisu proměnné v layoutu:

{$id} // nebo formuláře

příklad generování odkazu na pojmenovanou routu, kterou vložíme třeba do href html tagu a pod:

{$presenter->link('Homepage:default', array("id"=>$id))} // zároveň do linku přidáme parametr id

příklad vložení části stránky:

{include 'file.latte'}

vložení js nebo css z příslušné šablony do layoutu:

	{block scripts}
	{/block}
	{block css}
	{/block}

příklad podmínky v layoutu:

{if $product == 2}
	//produkt2
{elseif $product = 1}
	//produkt 1
{else}
	//default
{/if}

příklad cyklu v layoutu:

	{foreach $resultSet as $row}
		...
	{/foreach}

Vypsání formuláře v šabloně

 {$loginForm}

Základní příkazy pro Nette Database Nette\Database\Table\Selection

V adresáři App\Models\Table vytvoříme class pro tabulku v databázi. Pro každou tabulku budeme mít jednu class.

namespace Table;

/**
 * @author tatarp
 */
class Test extends \TableAbstract {

    protected $name = 'test'; // tabulka test

    public function dataList() {
        return $this;
    }

}

Práce s modelem claas pro tabulku

Přes class můžeme data ukládat, vyhledávat a updatovovat.

Způsob uložení dat:

$Ttest = new Test($this->database); // vlozi pole dat
data = $Ttest->save(array("firstname"=>"Monika", "surname"=>"Cermakova"));

Způsob aktualizace dat:

$Ttest = new Test($this->database); // upravi zaznam s id 1
data = $Ttest->save(array("firstname"=>"Monika", "surname"=>"Cermakova"), 1);

Způsob výběru dat:

$Ttest = new Test($this->database); // vybere vsechny zaznamy z tabulky
$data = $Ttest->fetchAll();
$Ttest = new Test($this->database); // vybere zaznamy podle podminky
$data = $Ttest->where("firstname=?","novak")->fetchAll();
foreach ($data as $key => $value){  // data muzeme vypsat v cyklu
            dump($value->id);
            dump($value->surname);
        }

Vytváření formulářu

Základem formuláře je formulářová Class, továrnička.

class Test extends Form
{
    /** @var Presenter $presenter */
    private $presenter;


    public function __construct(Presenter $presenter, string $name)
    {
      // zde vytvorime formular
    }

    /**
     * @param Form $form
     * @return void
     */
    public function formSubmitted(Form $form):void
    {
        // zde po odeslanu zpracujeme formularova data
    }


}

Priklad formularoveho elementu

Příklad odesílacího tlačítka

$this->addSubmit("send", "send");

Nastaveni dat do formulaře při editacci záznamu

V proměnné $default bude array s klíči a hodnotami. Klíče se budou jmenovat podle nazvů elementů.

$this->setDefaults($default);

Co se stane po odeslání formuláře

Po odeslání formuláře bude odesílat volána metoda formSubmitted

 $this->onSuccess[] = array($this, 'formSubmitted');

Nastavení flashMessage

Nastavení flashMessage po zpracování formuláře na následující přesměrované stránce. Nastavení provedeme v metodě, kde se zpracovávají data.

$this->parent->flashMessage($this->ts->translate("SET_DATA"), 'alert-success')

Přesměrování na jinou stránku po zpravání formuláře

Po zpracování formuláře a změmě dat, přesměrujeme na jinou stránku

$this->getPresenter()->redirect("Settings:deviceFlag");

Cross-Site Request Forgery (CSRF) form protection.

Ochrana formuláře před zneužitím.

$this->addProtection();

Instance formuláře v Presenteru.

V presenteru vytvoříme instanci formuláře a předáme do template.

$this->template->form1 = new Form1($this, "form1")

Input select ve formuláři

V presenteru vytvoříme instanci formuláře a předáme do template.

// model formulare
$ttridy = new \Table\Tridy($this->getPresenter()->database);


$this->addSelect('oponent_id', 'nazev', $ttridy->order("name")->fetchPairs('id', 'name'))
            ->setPrompt($translate->translate("--- Vyberte oponenta ---"));