Routrování a rozdíl mezi latte a phtml
- eximik
- Člen | 43
Zdravim, jsem opravdu začátečník a přečetl jsem už několik tutoriálů a článků, ale furt mi neleze na mozek, jak to vlastně funguje… Proto se to budu snažit pochopit na příkladu, který potřebuju…
Jako projekt, na kterým se učím jsem si vymyslel jednoduchou admin sekci.
po otevření stránky chci aby, pokud nejsem přihlášen načetl layout v /app/templates/login/@layout.phtml (kde mimo jiné i pro tento layout prezentr a model, zpracovavající přihlášení) a pokud jsem přihlášen, aby mi to rovnou načetlo layout /app/templates/logged/@layout.phtml… Snad chápete a budu vděčnej za fungující příklad… Učím se na 2.0 Alpha
Dále bych se chtěl zeptat, jaký je rozdíl, mezi souborama .latte a .phtml?
Děkuju moc, jsem rád že je pro nette velká česká komunita (o:
- Vyki
- Člen | 388
Pokud to chceš řešit globálně, přidej to BasePresenteru metodu startup.
<?php
public function startup() {
parent::startup();
if (!$this->getUser()->isLoggedIn()) {
if ($this->getUser()->logoutReason === Nette\Http\User::INACTIVITY) {
$this->flashMessage("Byl jste odhlášen pro dlouhou neaktivitu na webu");
}
$this->redirect('Sign:in');
} else {
$this->setLayout('layoutPrihlaen') //nepoužije výchozí layout, ale ten který zde nastavíš (bude hledat soubor @layoutPrihlaen.latte)
}
}
?>
viz: Examples / CD-collection doporučuji podrobně nastudovat tento příklad
Dříve se používalo pro soubory šablon .phtml, dnes se používá .latte, na .phtml můžeš zapomenout.
Editoval Vyki (5. 6. 2011 18:16)
- eximik
- Člen | 43
Tak jsem dal na vaše rady a výsledek: :o)
<?php
class DashboardPresenter extends BasePresenter
{
public function startup() {
parent::startup();
if (!$this->getUser()->isLoggedIn()) {
if ($this->getUser()->logoutReason === Nette\Http\User::INACTIVITY) {
$this->flashMessage("Byl jste odhlášen pro dlouhou neaktivitu na webu");
}
$this->redirect('Sign:in');
} else {
$this->setLayout('LayoutLogin');
}
}
}
Fatal Error
Class 'BasePresenter' not found
- nanuqcz
- Člen | 822
To znamená, že buď
- Třída BasePresenter neexistuje – v tom případě ji vytvoř :-) Případně si dej pozor na možnost, kdy třída BasePresenter sice existuje, ale v jiném namespace (pokud používáš moduly) ← něco mi říká, že to bude právě těma namespace :-)
- Nebo že ji RobotLoader nenašel – zkusil bych promazat cache
Editoval xxxObiWan (5. 6. 2011 21:54)
- grey
- Člen | 94
westrem wrote:
@eximik, skus si okrem Nette studovat aj samotne PHP – ak nevies co sa mysli pod namespace budes mat tazke zaciatky s PHP 5.3. resp s Nette 2.0 v NS prevedeni.
Oprav si svoj presenter na toto:
class DashboardPresenter extends Nette\Application\Presenter\BasePresenter
Ten kód je blbost, v BasePresenteru má use, ne namespace…
- eximik
- Člen | 43
xxxObiWan napsal(a):
eximik napsal(a):
Tím máš namysli „use \BasePresenter“ ?
Buď, anebo
class DashboardPresenter extends \BasePresenter
(efekt je stejný). Funguje?
Dal sem do Dashboardu use \basePresenter a výsledek stejný, nemůže nalézt tu třídu… Neměl by se tam nějak natáhnout složka /app s třídama v configu?
- iguana007
- Člen | 970
no pokud si na linuxu (což podle toho chmod příkazu asi si), tak pouze chmod nemusi stacit … zkus na tu slozku jeste aplikovat
sudo chown www-data:www-data temp/ -R
(pokud se tak tedy jmenuje user/group pod kterou ti běží apache, pokud se jmenuje jinak, tak použij tu správnou)
- eximik
- Člen | 43
iguana007 napsal(a):
no pokud si na linuxu (což podle toho chmod příkazu asi si), tak pouze chmod nemusi stacit … zkus na tu slozku jeste aplikovat
sudo chown www-data:www-data temp/ -R
(pokud se tak tedy jmenuje user/group pod kterou ti běží apache, pokud se jmenuje jinak, tak použij tu správnou)
Ne, sem na widlích, ale radši řeknu chmod 777 než rwxrwxrwx …
- eximik
- Člen | 43
_Martin_ napsal(a):
eximik napsal(a):
Ne, sem na widlích, ale radši řeknu chmod 777 než rwxrwxrwx …Windows řeší oprávnění jinak, než Unix, tam žádný
chmod
neexistuje arwxrwxrwx
rovněž ne. Nebo mi uniká nějaký skrytý ajťácký vtip?
Bože, sem z linuxu zvyklej psát 777, chtěl sem radu ohledně něčeho jinýho, tak di rejpat někam jinam. Dík
- eximik
- Člen | 43
Vážně nemůže být problém v configu?
Config.ini:
[common]
; PHP configuration
php.date.timezone = "Europe/Prague"
php.iconv.internal_encoding = "UTF-8"
php.mbstring.internal_encoding = "UTF-8"
;php.default_charset = "UTF-8"
; variables
variable.lang = en
variable.tempDir = %appDir%/temp
;variable.tempDir = ../temp
variable.logDir = %appDir%/log
; services
service.Nette-Security-IAuthenticator = UsersModel
[common.db]
driver = mysql
hostname = "localhost"
username = "root"
password = ""
database = "nette"
charset = "utf8"
[production < common]
[development < common]
- _Martin_
- Generous Backer | 679
@eximik: Nevšiml jsem si, že bych do tebe jakkoliv
rejpal. V okamžiku, kdy píšeš, že jsi na Windows a máš nastavený
chmod 777
, tak se nad takovým sdělením musím pozastavit. Třeba
jsi tím mohl mít na mysli, že se připojuješ na FTP server, co já vím –
takových problémů vzniklých z nedorozumnění se tu už řešila
spousta.
Jak psal 22, projdi úpravy, které jsi dělal oproti původní aplikaci z distribuce. Pokud ta fungovala, bude chybka v některé ze změn.
- eximik
- Člen | 43
Původní byl .neon, já bych chtěl zůstat u .ini
Ok pokusim se dohledat ini config a nastavení pro něj
#
# SECURITY WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
# https://nette.org/en/security-warning
#
common:
php:
date.timezone: Europe/Prague
service:
Nette\Security\IAuthenticator: UsersModel
Nette\Loaders\RobotLoader:
option:
directory: [%appDir%]
run: true
database:
dsn: sqlite2:%appDir%/models/demo.db
production < common:
development < common:
- eximik
- Člen | 43
Ok, dal jsem na vaši radu a použil neon z examplu cd-collection a vypadá nyní takhle:
#
# SECURITY WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
# https://nette.org/en/security-warning
#
common:
php:
date.timezone: Europe/Prague
service:
Nette\Security\IAuthenticator: UsersModel
Nette\Loaders\RobotLoader:
option:
directory: [%appDir%]
run: true
database:
driver: mysql
host: localhost
database: nette
username: root
password:
production < common:
development < common:
Samozřejmě zase chyba :/ :
InvalidArgumentException
Configuration must be array, string or object. search►
File: D:\developing\_Nette\gwwIS\libs\dibi\libs\DibiConnection.php Line: 80
73: $tmp = array();
74: foreach ($config as $key => $val) {
75: $tmp[$key] = $val instanceof Traversable ? iterator_to_array($val) : $val;
76: }
77: $config = $tmp;
78:
79: } elseif (!is_array($config)) {
80: throw new InvalidArgumentException('Configuration must be array, string or object.');
81: }
82:
83: self::alias($config, 'username', 'user');
84: self::alias($config, 'password', 'pass');
85: self::alias($config, 'host', 'hostname');
86: self::alias($config, 'result|detectTypes', 'resultDetectTypes'); // back compatibility
87: self::alias($config, 'result|formatDateTime', 'resultDateTime');
- westrem
- Člen | 398
grey napsal(a):
westrem wrote:
@eximik, skus si okrem Nette studovat aj samotne PHP – ak nevies co sa mysli pod namespace budes mat tazke zaciatky s PHP 5.3. resp s Nette 2.0 v NS prevedeni.
Oprav si svoj presenter na toto:
class DashboardPresenter extends Nette\Application\Presenter\BasePresenter
Ten kód je blbost, v BasePresenteru má use, ne namespace…
Ouch, to mam za to ked v rychlosti reagujem a snazim sa help, mas samozrejme pravdu, uz som to zmazal aby nezavadzalo ludi ..
- _Martin_
- Generous Backer | 679
Hm, a není ona to vlastně třída Nette\Web\User
? V alpha
verzi byly možná jiné jmenné prostory. K tomu mě napadá, že až tě
podobný problém potká příště, zkus před napsáním na fórum
zkontrolovat:
- zda soubor skutečně existuje
- zda třída skutečně existuje
- zda jsou správně zadané jmenné prostory (
use
tam, kde třídu používáš,namespace
tam, kde ji definuješ)
ICQ musím odmítnout, věřím, že na tomto fóru se najde dost lidí, kteří budou ochotni ve svém volném čase pomoci, mě nevyjímaje.
- bojovyletoun
- Člen | 667
ohledně chyby připojení dibi : přetypuj na pole nastavení takto: new
DibiConnection(
(array)$config);
- eximik
- Člen | 43
_Martin_ napsal(a):
Hm, a není ona to vlastně třída
Nette\Web\User
? V alpha verzi byly možná jiné jmenné prostory. K tomu mě napadá, že až tě podobný problém potká příště, zkus před napsáním na fórum zkontrolovat:
- zda soubor skutečně existuje
- zda třída skutečně existuje
- zda jsou správně zadané jmenné prostory (
use
tam, kde třídu používáš,namespace
tam, kde ji definuješ)ICQ musím odmítnout, věřím, že na tomto fóru se najde dost lidí, kteří budou ochotni ve svém volném čase pomoci, mě nevyjímaje.
Děkuju to je přesně ono, akorát přihlášenej nejsem, ale směruje mě to na sig:in místo toho aby nahodil layout, ale s tím si už poradím… Díky!
edit:
aha tak nic, zas mi to načítá default.latte místo
login/@layout.latte :/
Editoval eximik (6. 6. 2011 15:52)
- _Martin_
- Generous Backer | 679
Zkusme to jinak: zapomeň na layouty a presentery a popiš, co chceš udělat. Popiš to bez použití slov layout a presenter (a taktéž model). Např.:
Když přijdu na stránku a nejsem přihlášený, uvidím přihlašovací formulář. Nahoře bude záhlaví s logem. Po přihlášení se k záhlaví přidá hlavní nabídka a vpravo se vypíše přihlášený uživatel. Místo formuláře se objeví výpis poslední pěti článků s možností rychlé editace.
P.S. A taky napiš, v čem se to liší od příkladu CD-collection.
Editoval _Martin_ (6. 6. 2011 21:34)
- eximik
- Člen | 43
_Martin_ napsal(a):
Zkusme to jinak: zapomeň na layouty a presentery a popiš, co chceš udělat. Popiš to bez použití slov layout a presenter (a taktéž model). Např.:
Když přijdu na stránku a nejsem přihlášený, uvidím přihlašovací formulář. Nahoře bude záhlaví s logem. Po přihlášení se k záhlaví přidá hlavní nabídka a vpravo se vypíše přihlášený uživatel. Místo formuláře se objeví výpis poslední pěti článků s možností rychlé editace.
P.S. A taky napiš, v čem se to liší od příkladu CD-collection.
Ok, takže…
databáze bude komplet mysql/pgsql ještě nevím…
Chci si udělat mini adrministrační server pro můj server se správou mysql učtů, virtual hostů atpd. nic složitýho, mám to napsané v php4 ale je to starý a děrovatý a přdevším se moc rád naučim v nette…
Tudíš:
po otevření stránky se ukáže přihlašovací formulář, po přihlášení (úspěšném) se mi ukáže uplně jiný vzhled s postraním menu (asi zkusím s ajaxem rozbalovací) a main stránkou kde se už ude odehrávat administrce po kliknutí v menu (editace adminů, správa sql atpd.) …
a v čem se to liší? Je to podobné, ale já to potřebuju napsat od nuly abych pochopil princip MCV a peincip nette..
*edit: proto se tu furt ptám jak pablb…
Editoval eximik (6. 6. 2011 21:44)
- _Martin_
- Generous Backer | 679
Vezmu to od konce: pokud jde o psaní od nuly, tak to mohu nedoporučit=) Respektive, pro naučení s Nette je lepší vzít některý z příkladů a ten začít upravovat – a všímat si, kde je jak co dělané. Pokud děláš novou appku, doporučuji jako základ vždy použít sandbox.
K tvé appce ti dám jen nástin, na konkrétní řešení si zkus přijít
sám. Řešil bych to s použitím jednoho
@layout
, který by byl společný pro všechny stránky.
Přihlašovací stránka bude výjimkou, @layout
používat nebude
a celý design bude přímo v její šabloně. Jinými slovy, šablony se od
CD-Collection liší pouze v tom, že přihlašovací stránka
nepoužívá @layout
.
Rozdělení na presentery je na tvém uvážení – můžeš mít presenter pro správu uživatelů, správu virtual serverů, mysql účtů… V případě velké složitosti můžeš dělit ještě na moduly – např. modul uživatelů, kdy řešíš účty svoje, účty zákazníků, jejich klientské údaje… Záleží na návrhu, jak by měla appka navenek vypadat a tak.
Přihlašovací funkcionalitu převezmi z některého z příkladů/sandboxu.
- eximik
- Člen | 43
_Martin_ napsal(a):
Vezmu to od konce: pokud jde o psaní od nuly, tak to mohu nedoporučit=) Respektive, pro naučení s Nette je lepší vzít některý z příkladů a ten začít upravovat – a všímat si, kde je jak co dělané. Pokud děláš novou appku, doporučuji jako základ vždy použít sandbox.
K tvé appce ti dám jen nástin, na konkrétní řešení si zkus přijít sám. Řešil bych to s použitím jednoho
@layout
, který by byl společný pro všechny stránky. Přihlašovací stránka bude výjimkou,@layout
používat nebude a celý design bude přímo v její šabloně. Jinými slovy, šablony se od CD-Collection liší pouze v tom, že přihlašovací stránka nepoužívá@layout
.Rozdělení na presentery je na tvém uvážení – můžeš mít presenter pro správu uživatelů, správu virtual serverů, mysql účtů… V případě velké složitosti můžeš dělit ještě na moduly – např. modul uživatelů, kdy řešíš účty svoje, účty zákazníků, jejich klientské údaje… Záleží na návrhu, jak by měla appka navenek vypadat a tak.
Přihlašovací funkcionalitu převezmi z některého z příkladů/sandboxu.
Ok děkuju, pohraju si… Ještě se chci zeptat… Když sem se ptal někde, jaký je rozdíl mezi prezenterem a modulem, tak mi řekli, že model prostě jen získává data a prezentr je zpracuje a předá šabloně… Je to tak? Jde mi o to, že pro mě by blo nejlepší, kdybych to mohl napsat všechno do prezenteru a moduly bych zatím uplně vynechal …
Díky