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".
Import do nového projektu krok 2
Zde vybereme "Repo by URL.
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
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 ---"));