radekrepka/module-router

模块路由库

1.4.0 2018-12-29 12:29 UTC

This package is not auto-updated.

Last update: 2024-09-29 06:31:10 UTC


README

描述

这是一个简单的工具,可以生成菜单、链接和页面的标题。

安装

$ composer require radekrepka/module-router

用法

配置文件为neon格式。

extensions: 
	moduleRouter: RadekRepka\ModuleRouter\DI\ModuleRouterExtension

然后您可以在菜单中添加您的模块和页面。您可以设置菜单项的图标。它可以是任何东西(图像文件的URL,fa图标等)。

config.neon

moduleRouter:
	modules:
		Presenter1:
		Presenter2:
			
		Module1: #(Admin, Costumer...)
			modules:
				Presenter1:
					icon: home
				Presenter2:
					icon: ....
		Module2:
			modules:
				Presenter1:
					icon: ....
				Presenter2:
					icon: ....			

翻译文件(modules.cs_CZ.neon)

您必须创建一个名为modules的翻译文件。

Presenter1: Some page
Presenter2: Some page 2
Module1:
	_name: Module 1
	Presenter1: Homepage
	Presenter2: Settings
Module2:
	_name: Module 2
	Presenter1: ...

RouterFactory

<?php

namespace App;

use Nette;
use Nette\Application\Routers\Route;
use RadekRepka\ModuleRouter\ModuleManager;

class RouterFactory {
	use Nette\StaticClass;

	/**
	 * @param ModuleManager $manager
	 * @return Nette\Application\IRouter
	 */
	public static function createRouter(ModuleManager $manager) {
		$router = $manager->getRouter();
		$router[] = new Route('[<locale=cs cs|en>/]<presenter>/<action>[/<id>]', 'Homepage:default');
		return $router;
	}
}

BasePresenter

	/** @var ModuleManager @inject */
	public $moduleManager;
	
	public function beforeRender() {
		$modules = $this->moduleManager->getModules();
		//Or from module
		$modules = $this->moduleManager->getModules()->offsetGet('Module1')->getChildren();
		$this->template->modules = $modules;
		$this->template->currentModule = $modules->offsetGet($this->getPresenterName());
	}
	
	public function getPresenterName() {
		return explode(':', $this->getName())[1];
	}

模板(例如@layout.latte)

<ul>
    {foreach $modules as $module}
        {var $active = $presenter->getName() == $module->getFullModule()}
        <li{if $active} class="active"{/if}>
            <a n:href="$module->getModule() . ':'">
                <img n:if="$module->getIcon()" src="{$basePath}/img/{$module->getIcon()}">
                <span>{$module->getName()}</span>
            </a>
        </li>
    {/foreach}
</ul>
    
...
    
<h1>{$currentModule->getName()}</h1>