Nette Framework
  • Úvodní stránka
  • Download
  • Dokumentace
  • Fórum
  • Blog
  • Přispějte
  • Quick Start
    • Začínáme
    • Adresářová struktura
    • Vytvoření presenteru
    • Připojení šablony
    • Tvorba odkazů
    • Hezčí šablony
    • Zobrazení tabulky
    • Stránkování a řazení
    • Tvoříme komponentu
  • Nette
    • Základní třídy
    • Nette\Annotations
    • Nette\Component
    • Nette\Debug
      • Základy
      • Logování chyb
      • Firebug
    • Nette\Environment
    • Nette\Image
    • Nette\Object
    • Nette\String
  • Nette\Application
    • Application
    • AppForm
    • Control
    • Presenter
    • PresenterCompo­nent
    • PresenterRequest
    • Routování
    • MultiRouter
    • Route
    • SimpleRouter
  • Nette\Caching
  • Nette\Forms
  • Nette\IO\SafeS­tream
  • Nette\Loaders
  • Nette\Security
    • Bezpečnost aplikací
    • Identity
    • SimpleAuthenti­cator
    • Permission
    • Dynamická správa rolí a zdrojů
  • Nette\Templates
    • Template
    • Template Filters
    • Template Helpers
  • Nette\Web
    • Web
    • Ftp
    • Html
    • HttpRequest
    • HttpResponse
    • Session
    • User
Naposledy změněno 15. 11. 2008 Edituj Historie Poslední změny

Suggested directory structure

app/
    .htaccess (Deny from all)
    bootstrap.php
    config.ini
    models/
    presenters/
        DefaultPresenter.php
        AdminModule/
            DefaultPresenter.php (Admin:Default presenter)
    temp/ (must be writtable)
    templates/
        @layout.phtml
        Default/ (Default presenter)
            default.phtml (Default:default view)
        AdminModule/
            Default/ (Admin:Default presenter)
                @layout.phtml (Admin:Default presenter layout)
                default.phtml (Admin:Default:default view)

document_root/
    .htaccess (see below)
    index.php

libs/
    .htaccess (Deny from all)
    dibi/
    Nette/
    Texy/

Pokud na webové aplikaci nepracuje tým, ale jeden sólista, může být výhodnější ukládat šablony a presentery pohromadě. Nemyslím do jednoho adresáře, ale například do podadresáře templates ve složce, kde je umístěný presenter. Rozdíl mezi tímto a výchozím ukládáním je nejvíce patrný při používání modulů:

Ukládání odděleně

presenters/
    FrontModule/
        HomepagePresenter.php
    AdminModule/
        AuthPresenter.php

templates/
    FrontModule/
        @layout.phtml
        Homepage.default.phtml
    AdminModule/
        @layout.phtml
        ...

Ukládání pohromadě

presenters/
    FrontModule/
        HomepagePresenter.php
        templates/
            @layout.phtml
            Homepage.default.phtml
    AdminModule/
        AuthPresenter.php
        templates/
            ...

Celý modul je pak pohromadě v jednom podadresáři, včetně tříd i šablon.

Pokud vám tento způsob více vyhovuje, nastavte proměnnou prostředí templatesDir na stejnou hodnotu jako presentersDir:

Environment::setVariable('templatesDir', '%appDir%/presenters');

// nebo v souboru config.ini:
// variable.templatesDir = "%appDir%/presenters"

Nette už samo vloží do cesty podadresář /templates/.

.htaccess

# configure PHP
php_flag magic_quotes_gpc off
php_flag register_globals off

# mod_rewrite
RewriteEngine On
#RewriteBase /

# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]

index.php

<?php

// absolute filesystem path to the web root
define('WWW_DIR', dirname(__FILE__));

// absolute filesystem path to the application root
define('APP_DIR', WWW_DIR . '/../app');

// load bootstrap file
require APP_DIR . '/bootstrap.php';

V Nette se zachovává jednotný řád pro cesty k adresářům. Adresáře, ať v konstantě, proměnné, proměnné prostředí atd. neobsahují pravostranné lomítko. Není potřeba volat rtrim($dir, '/') . '/file.php' nebo se bát, že se někde zdvojí lomítko – stačí dodržovat konvenci.

define('ANY_DIR', dirname(__FILE__));

require ANY_DIR . '/file.php';

Určitou výjimkou je adresář pro cache FileStorage, ale tady nejde o adresář, nýbrž prefix cesty.

Výjimkou jsou také cesty baseUri & basePath, které vždy končí lomítkem (takže lze v šablonách psát <link rel="stylesheet" type="text/css" media="screen" href="{$baseUri}css/style.css">)

bootstrap.php

<?php

/**
 * Load Nette
 */
require_once dirname(__FILE__) . '/../libs/Nette/loader.php';

/**
 * Configure application
 */
Environment::loadConfig();

/**
 * Prepare & setup
 */
Debug::enable(E_ALL | E_STRICT);

$application = Environment::getApplication();
$router = $application->getRouter();

$router[] = new Route('index.php', array(
    'presenter' => 'Default',
    'view' => 'default',
), Route::ONE_WAY);

$router[] = new Route('<presenter>/<view>/<id>', array(
    'presenter' => 'Default',
    'view' => 'default',
    'id' => NULL,
));

/**
 * Run!
 */
$application = Environment::getApplication();
$application->run();

config.ini

[common]
set.date-timezone = "Europe/Prague"
set.iconv-internal_encoding = "%encoding%"
set.mbstring-internal_encoding = "%encoding%"

; Production site configuration data
[production < common]
set.include_path = "%appDir%/libs;%modelsDir%/;%presentersDir%/"

; Staging site configuration data inherits from production and
; overrides values as necessary
[development < production]

DefaultPresen­ter.php

class DefaultPresenter extends Presenter
{
    public function renderDefault()
    {
        $this->template->title = "Hello";
    }


    public function renderHello($param)
    {
        // $param should be 123 after click
    }
}

@layout.phtml

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title><?php echo htmlSpecialChars($title) ?></title>
</head>

<body>
    <h1><?php echo htmlSpecialChars($title) ?></h1>

    <div id="content">
        <?php $content->render() ?>
    </div>
</body>
</html>

default.phtml

<p><a href="<?php echo $presenter->link('hello', 123) ?>">Hello World!</a></p>

Nette Framework powered | dibi powered | Texy! powered | Institut Školení PHP