Moduly Admin a Front

Jako základ webu rozděleného na tyto moduly je použitý nette/web-project

Z něj můžete bez úprav použít tyto soubory a nechat je ve složce Presenters

Vytvořte tuto strukturu složek (soubory HomepagePresenter vyžadují specifický namespace – o tom více níže)

app/
├── AdminModule/
│   ├── templates/
│   │    ├── Homepage/
│   │    │    └── default.latte
│   │    └── @layout.latte
│   └── HomepagePresenter.php
├── FrontModule/
│   ├── templates/
│   │    ├── Homepage/
│   │    │    └── default.latte
│   │    └── @layout.latte
│   └── HomepagePresenter.php
└── Presenters/
     ├── templates/
     │    └── Error/
     │          ├── 403.latte
     │          ├── 404.latte
     │          ├── 405.latte
     │          ├── 410.latte
     │          ├── 4xx.latte
     │          ├── 500.phtml
     │          └── 503.phtml
     ├── Error4xxPresenter.php
     └── ErrorPresenter.php


Tato konfigurace nastavuje, v jakých namespacech musí být presentery jednotlivých modulů

common.neon

application:
    errorPresenter: Error
    mapping:
        *: App\*Module\Presenters\*Presenter


V routeru nastavíte, že modul Admin bude dostupný na url https://example.com/admin a modul Front na url https://example.com/

RouterFactory.php

<?php

declare(strict_types=1);

namespace App\Router;

use Nette;
use Nette\Application\Routers\RouteList;


final class RouterFactory
{
    use Nette\StaticClass;

    public static function createRouter(): RouteList
    {
        $router = new RouteList;

        $router->withModule('Admin')
                ->addRoute('admin/<presenter>[/<action>][/<id>]', 'Homepage:default');

        $router->withModule('Front')
                ->addRoute('<presenter>[/<action>][/<id>]', 'Homepage:default');

        return $router;
    }
}


Ukázka souboru s namespace odpovídajícím konfiguraci.

HomepagePresen­ter.php ve složce app\AdminModu­le\Presenters

<?php

declare(strict_types=1);

namespace App\AdminModule\Presenters;

use Nette;


class HomepagePresenter extends Nette\Application\UI\Presenter
{

}

HomepagePresen­ter.php ve složce app\FrontModu­le\Presenters

<?php

declare(strict_types=1);

namespace App\FrontModule\Presenters;

use Nette;


class HomepagePresenter extends Nette\Application\UI\Presenter
{

}

Teď už stačí pro každý modul vytvořit @layout.latte a /templates/Ho­mepage/default­.latte a máte funkční moduly