Adresářová struktura

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
2bfree
Člen | 248
+
0
-

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

_Martin_
Generous Backer | 679
+
0
-

2bfree napsal(a):

Chtel bych Nette přiohnout tak, aby víceméně kopírovalo adresářovou strukturu ze systému Joomla

Pro neznalce Joomly, jako jsem já: napiš prosím, jak by sis tu strukturu představoval. Věřím, že to půjde lehce vyřešit.

phx
Člen | 651
+
0
-

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
+
0
-

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
+
0
-

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)

LM
Člen | 206
+
0
-

Pokud je ten poslední kód tvůj config soubor, tak bych řekl že ini soubor by měl být co hodnota to jeden řádek.

_Martin_
Generous Backer | 679
+
0
-

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
+
0
-

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
+
0
-

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 bootstrapQuick 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.:

  1. 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.
  2. 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
+
0
-

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
+
0
-

Pěkně napsané, hodilo by se to do toho FAQ co už jsi psal.

EDIT: kravco mě předběh ;)

_Martin_
Generous Backer | 679
+
0
-

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
+
0
-

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 ;)

_Martin_
Generous Backer | 679
+
0
-

romansklenar napsal(a):

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 ;)

Snad to ode mě nevyznělo moc příkře. A jinak díky, díky =)

kravčo
Člen | 721
+
0
-

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
+
0
-

_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…