Adresářová struktura
- 2bfree
- Člen | 248
Zdravím, poradili byste mi, kterak v nette změnit adresářovou strukturu v podadresáři app?
Nasel jsem ze to ma pravdepodobne na starosti https://doc.nette.org/cs/configuring a mozna ze jeho metoda setVariable(), ale nedostal jsem se od te doby ke stroji s PHPkem, abych to vyzkousel.
Chtel bych Nette přiohnout tak, aby víceméně kopírovalo adresářovou strukturu ze systému Joomla
S pozdravem a díky
- phx
- Člen | 651
Vse je zalezitost konstatn, ktere lze nastvit napr v config.ini
[common]
variable.cacheBase = "%tempDir%/cache-"
variable.logsDir = "%wwwDir%/logs"
Pozor! pokud bude temp take presunut je nutne to udelat v kodu jeste pred nactenim config.ini, prtz se kesuje v tempu
Environment::setVariable('tempDir', '%wwwDir%/temp');
Environment::loadConfig();
- 2bfree
- Člen | 248
Takze struktura je cca takováto:
- /includes/ – inicializacni scripty jednotlivych knihoven a modulu
- /language/ – jednotlive lokalizace aplikace
- /libraries/ – externi knihovny (smarty, phpInputilter, …)
- /modules/ – vlastní moduly aplikace
- /templates/ – šablony aplikace
- /templates/default/skin/css/ – umístění css pro šablony
- /tmp/ – prostě tmp
Snad to z toho bude srozumitelné. Potkal jsem tenhle návod (https://doc.nette.org/cs/quickstart), kde se ale řeší adresa jen třech základních adresářů (WWW, APP, LIB), ale vnitřní struktura app už ne.
Editoval 2bfree (20. 4. 2009 9:24)
- 2bfree
- Člen | 248
Pokud jsem zkusil v config.ini nastavit změnu adresy presenteru, tak to na mě se*e jako na placaty kamen. Pro nacteni configu využívám následující kód a cesta k němu je na 100% fungující.
Environment::loadConfig(INCLUDES_DIR.DS.'config.ini');
[common]
variable.skin = "default"
variable.presentersDir = "%appDir%/templates/%skin%"
Editoval 2bfree (20. 4. 2009 13:24)
- _Martin_
- Generous Backer | 679
2bfree napsal(a):
Pokud jsem zkusil v config.ini nastavit změnu adresy presenteru, tak to na mě se*e jako na placaty kamen. Pro nacteni configu využívám následující kód a cesta k němu je na 100% fungující.
Environment::loadConfig(INCLUDES_DIR.DS.'config.ini');
[common]
variable.skin = "default"
variable.presentersDir = "%appDir%/templates/%skin%"
Takže, asi takhle:
[common]
variable.skin = "default"
; Adresář pro presentery; presentery nejsou šablony, ve tvé struktuře bych
; je umístil do složky modules (ovšem lepší by bylo vědět, čemu říkáš moduly)
variable.presentersDir = "%appDir%/modules"
; Adresář pro šablony; skiny included (struktura té složky potom odpovídá původní
; struktuře složky templates, např.: %appDir%/templates/%skin%/@layout.phtml)
variable.templatesDir = "%appDir%/templates/%skin%"
; Adresář pro dočasné soubory (keš, zkompilované šablony,...)
variable.tempDir = "%appDir%/tmp"
Adresář knihoven musíš změnit v souboru index.php (neboť ji potřebujeme znát ještě před načtením Nette, čili před načtením konfigurace).
...
// absolute filesystem path to the libraries
define('LIBS_DIR', APP_DIR . '/libraries');
...
Možná jsem zcela neporozumněl té tvé struktuře (některé složky mi
přijdou pro Nette zbytečné – konkrétně includes
– a
jiné zase chybějící – složka models
pro modely) – takže
pokud bych ti neporadil zcela správně, ozvi se (a doporučuji trochu
nastudovat pojmy z dokumentace, ať víš, jak to v Nettím MVP pojetí
funguje).
P.S. Po změně adresářové struktury nezapomeň promazat složku dočasných souborů (například kvůli RobotLoaderu, který si pamatuje, kde byly presentery původně).
- 2bfree
- Člen | 248
Díky lidi. To co tady pisete s config.ini mi nakonec nefungovalo, ale
nakonec jsem to dopachtil jinak.
Jelikoz se mi libi par napadu z joomly, rozhodl jsem se nasledovne:
Do rootu projektu prijde config.php namisto config.ini. Jednak se neda
stahnout klientem jeho obsah narozdil od .ini a druhak je tak prehledne umisten
tam, kde se mi libi.
V tomto config.ini mam hodnoty promennych, jako je napr. $cfg[„skin“],
ktere pouziju mimo jine pro Nette.
V adresari includes je „nette.php“, ve kterem je nacteni loaderu, definice cest pro Nette a nacteni aplikace
Diky vam jeste jednou za rady.
Trochu me mrzi, ze jsem zde na webu nenasel popis cele adresarove struktury
Nette vcetne popisek, k cemu tyto adresare slouzi..
- _Martin_
- Generous Backer | 679
Co jsem napsal, to funguje (zkoušel jsem to před napsáním příspěvku).
Ale teď vidím, že jsem se na ten problém díval pohledem člověka, který
zná bootstrap, který ví, jak se načítá konfigurace a který ví, jak a
k čemu složky slouží.
Takže takové objasnění:
Klasická Nette struktura
Řekněmě, že ve složce /www/nase-aplikace/
- app/ – aplikační logika, nepřístupná z klienta,
obsahuje config.ini a bootstrap.php
- log/ – složka pro logování chyb Laděnkou
- models/ – složka pro modely (viz pojem MVP)
- presenters/ – složka pro presentery (viz pojem MVP)
- sessions/ – složka pro ukládání PHP sessions (s kterými lze v Nette jednoduše pracovat)
- temp/ – složka pro dočasné soubory (keš, zkompilované šablony,…)
- templates/ – složka pro šablony (viz pojem MVP)
- document_root/ – klasický dokument root, vše, k čemu
má klient přístup; obsahuje index.php (viz. níže)
- css/
- js/
- images/
- a další složky a soubory dle uvážení…
- libs/ – knihovny Nette a třetích stran
- Nette/
- …
K čemu je index.php?
Ve své podstatě, index.php pouze nastavuje základní cesty aplikace a předává řízení bootstrapu.
// absolutní cesta do dokument rootu
define('WWW_DIR', dirname(__FILE__)); // příklad: /www/nase-aplikace/document_root
// absolutní cesta do aplikační složky
define('APP_DIR', WWW_DIR . '/../app'); // příklad: /www/nase-aplikace/app
// absolute filesystem path to the libraries
define('LIBS_DIR', WWW_DIR . '/../libs'); // příklad: /www/nase-aplikace/libs
// load bootstrap file
require APP_DIR . '/bootstrap.php'; // příklad: /www/nase-aplikace/app/bootstrap.php
A co bootstrap.php?
Ten má již na starosti načtení frameworku, jeho nastavení (načtení
konfigurace, nastavení routování – zjednodušeně řečeno SEO adres,…)
a spuštění aplikace. Doporučuji podívat se do souboru
examples/skeleton/app/bootstrap.php
v distribuci. Pro tebe teď
stačí vědět, že onen bootstrap
z Quick Startu stačí doplnit
o jeden řádek:
...
// umístěný hned po Debug::enable()
Environment::loadConfig();
...
a cesty budou fungovat, jak jsem psal výše.
Pozn.:
- pokud nechceš používat Nette MVP, pak adresáře svým způsobem nemusíš řešit vůbec, jen si někde načteš framework a budeš si používat jen jeho jednotlivé třídy.
- Současný Quick Start neodráží příklad
skeleton
z distribuce, spíš je velmi zjednodušen – takže doporučuji studovat i další zdroje, jako je například Seriál Začínáme s Nette Framework.
- kravčo
- Člen | 721
Toto by sa mi páčilo ako prvá časť FAQ „Jak na adresářovou strukturu?“. Tak som si ten FAQ aj pôvodne predstavoval :)
Ukazovalo by to odporúčanú (či predvolenú) adresárovú štruktúru aj s popismi, čo ktorý adresár znamená. Nasledoval by odkaz, ako si štruktúru prispôsobiť vlastným potrebám – na to, čo si už spísal.
- romansklenar
- Člen | 655
Pěkně napsané, hodilo by se to do toho FAQ co už jsi psal.
EDIT: kravco mě předběh ;)
- _Martin_
- Generous Backer | 679
Souhlasím s tím, že by to mělo být součástí dokumentace. Ovšem rozhodně ne součástí FAQ sekce. Popis výchozí Nette struktury bych dal přímo do dokumentace, z FAQ článku by vedl pouze odkaz. Přeci jen, výchozí Nette struktura je vlastnost frameworku, s kterou chci uživatele seznámit, vlastní struktura je už práce s frameworkem, jde o nějaký postup „jak co udělat“ – a protože je to častá otázka, bude zařazena do FAQ.
Tímto prosím Inzu, jakožto vrchního vedoucího, aby se vyjádřil.
- romansklenar
- Člen | 655
Jasně, máš pravdu, chtěl jsem tím jen naznačit, že by byla škoda to nechat jen ve fóru, když už jsi to tak hezky popsal ;)
- kravčo
- Člen | 721
To je zase otázka, nakoľko má byť FAQ pre začiatočníkov alebo pokročilých. Vo FAQ si viem predstaviť otázku: „Načo slúži to more adresárov v príklade skeleton?“. Keďže vieme, že je premazávací, je tam temer všetko.
Ale je fakt, že asi nemá zmysel tvoriť duplicitný obsah :) skoro to isté by bolo aj v dokumentácii…
- Inza
- Člen | 330
_Martin_ napsal(a):
Souhlasím s tím, že by to mělo být součástí dokumentace. Ovšem rozhodně ne součástí FAQ sekce. Popis výchozí Nette struktury bych dal přímo do dokumentace, z FAQ článku by vedl pouze odkaz. Přeci jen, výchozí Nette struktura je vlastnost frameworku, s kterou chci uživatele seznámit, vlastní struktura je už práce s frameworkem, jde o nějaký postup „jak co udělat“ – a protože je to častá otázka, bude zařazena do FAQ.
Tímto prosím Inzu, jakožto vrchního vedoucího, aby se vyjádřil.
Souhlasím s Martinem, tady se nám krásně odlišuje FAQ a kuchařka, neboli cookbook;-)
do FAQ patří jen věci a dotazy ohledně toho, jak co funguje ve frameworku – tedy dotazy týkající se věcí, která si stáhnete, když z SVNka stáhnete Nette framework.
A dotazy týkající se toho jak Nette rozšířit, patří do kuchařky. – Tam může být Kuchařka FAQ…