lotos2512/menu-and-breadcrumbs-generator

1.0.3 2018-11-21 10:10 UTC

This package is not auto-updated.

Last update: 2024-09-19 16:08:24 UTC


README

从PHP数组生成HTML菜单和面包屑

Latest Stable Version Total Downloads Latest Unstable Version License Build Status Coverage Status

安装

安装此扩展的首选方式是通过 Composer

可以运行

 php composer.phar require lotos2512/menu-and-breadcrumbs-generator
 

示例

https://github.com/lotos2512/menu-and-breadcrumbs-generator/blob/master/example/index.php

菜单的基本用法

// Create array like this 

$tree = [
    /**
     * СООБЩЕНИЯ
     */
    'personal_messages.php' => [
        'name' => function () {
            return 'Сообщений 10/10';
        },
        'children' => [
            'test' => [
                'name' => 'тest - ',
                'url' => '/admin/test',
                'permission' => true,
                'params' => ['package_id'],
                'namePostFix' => 'package_id',
            ],
            'test2' => [
                'name' => 'тest',
                'url' => '/admin/test2',
                'visible' => 'onPage'
            ],
            
        ]
    ],
];

$menu = (new MenuGenerator('/admin/test2', $tree))->getMenu();

定义键

name - 节点的名称,接受字符串或回调函数(必需)。

url - 节点的URL。接受字符串值。

permission - 用于节点权限。接受布尔值或回调函数。

params - 字符串值的数组,如果节点URL是当前页,将会添加到$_GET参数到URL中。

namePostFix - 字符串值,如果URL是当前页,将会从$_GET中获取值并添加到节点名称中。

children - 节点的数组。

visible - 字符串值 Node::VISIBLE_TYPE_CURRENT_PAGE,用于在URL是当前页时显示节点。

面包屑的基本用法

$breadcrumbs = (new BreadcrumbsGenerator(new RecursiveBreadcrumbsStrategy(), '/admin/update_transaction.php', $tree))->getBreadcrumbs();
$breadcrumbs = (new BreadcrumbsGenerator(new PrettyUrlBreadcrumbsStrategy(), '/admin/update_transaction.php', $tree))->getBreadcrumbs();

// use RecursiveBreadCrumbsStrategy to create $breadcrumbs for the node, even if the tree is wrong like $tree.

如果$tree为true,使用PrettyUrlBreadcrumbsStrategy为节点创建$breadcrumbs。例如,如果您想为URL - '/cryptography/certificates/view/?id=1' 找到面包屑,则您的树必须如下所示

[
    'cryptography' => [
        'permission' => function () {
            return true;
        },
        'name' =>'Криптография',
        'children' => [
            'certificates' => [
                'name' =>'Сертификаты',
                'url' => '/cryptography/certificates',
                'children' => [
                   'name' =>'Сертификат',
                   'url' => '/cryptography/certificates/view/',
                   'visible' => Node::VISIBLE_TYPE_CURRENT_PAGE,
                ]
            ],
            'create-request' => [
                'name' =>'Запрос сертификата',
                'url' => '/cryptography/create-request',
            ],
            'upload-signed-certificates' => [
                'name' =>'Загрузка подписанных сертификатов',
                'url' => '/cryptography/upload-signed-certificates',
            ]
        ],
    ],
]

自定义菜单节点的HTML

/**
 * Class YouMenuGenerator
 */
YourMenuGenerator extends MenuGenerator
{
    /**
    * @see MenuGenerator::getHtmlBlock
    */
    protected function getHtmlBlockParams(Node $node, int $level): array
    {
        return [
            'tdClass' => $node->quailsUrl($this->url) === true ? ' class ="select"' : ' ',
            'menuClass' => "menu$level",
            'url' => $node->getUrlWithParams($this->url),
            'name' => $node->getNameWithPostFix($this->url),
        ];
    }
    protected function htmlTemplate(): string
    {
        return
            '<tr>
                <td tdClass>
                    <div class="menuClass">
                    <a href="url">name</a>
                    </div>
                </td>
            </tr>';
    }
}