用于标记导航项活动的无框架PHP软件包。

资助软件包维护!
Patreon

4.1.1 2021-03-25 11:30 UTC

This package is auto-updated.

Last update: 2024-08-25 18:45:32 UTC


README

用于标记导航项活动的无框架PHP软件包。

Become a Patron

特性

  • 无框架。
  • 可修改以适用于任何自定义应用程序和UI。
  • 当前支持的框架:Laravel(欢迎PR!)。
  • 默认情况下禁用全局辅助函数。
  • 支持默认输出值。
  • 向下兼容。
  • 使用表格驱动测试(PHPUnit中的数据提供者)进行全面测试。

安装

从命令行

composer require laravelista/ekko

默认情况下,Ekko使用以下合理的默认值初始化

  • 默认输出值是 active
  • 它使用GenericUrlProvider ($_SERVER['REQUEST_URI'])。
  • 全局辅助函数已禁用。

Laravel

此软件包的唯一依赖项是PHP ^8.0,这意味着您可以在支持PHP 8的任何Laravel版本上安装它(我认为目前只有Laravel 8)。服务提供者将始终遵循最新的Laravel版本,并尽可能地保持向后兼容。

Laravel 8将使用自动发现功能来注册服务提供者和外观。

如果您不使用自动发现,则需要将服务提供者和外观包含在config/app.php

'providers' => [
    ...,
    Laravelista\Ekko\Frameworks\Laravel\ServiceProvider::class
];

并在文件的底部添加外观别名

'aliases' => [
    ...,
    'Ekko' => Laravelista\Ekko\Frameworks\Laravel\Facade::class
];

概述

要在Bootstrap(https://bootstrap.ac.cn/components/#navbar)中标记菜单项为活动状态,需要将active CSS类添加到<li>标签中

<ul class="nav navbar-nav">
    <li class="active"><a href="/">Home</a></li>
    <li><a href="/about">About</a></li>
</ul>

您可以使用Laravel手动完成此操作,但最终会得到一条香肠

<ul class="nav navbar-nav">
    <li class="@if(URL::current() == URL::to('/')) active @endif"><a href="/">Home</a></li>
    <li><a href="/about">About</a></li>
</ul>

使用Ekko,您的代码可能看起来像这样

<ul class="nav navbar-nav">
    <li class="{{ Ekko::isActive('/') }}"><a href="/">Home</a></li>
    <li><a href="/about">About</a></li>
</ul>

或者这样

<ul class="nav navbar-nav">
    <li class="{{ Ekko::isActiveRoute('home') }}"><a href="/">Home</a></li>
    <li><a href="/about">About</a></li>
</ul>

或者这样

<ul class="nav navbar-nav">
    <li class="{{ $ekko->isActive('/') }}"><a href="/">Home</a></li>
    <li><a href="/about">About</a></li>
</ul>

默认输出值

如果您不使用Bootstrap,而是使用其他框架或自定义设计,则Ekko可以返回您想要的任何内容,而不是返回active CSS类。

<ul class="nav navbar-nav">
    <li class="{{ Ekko::isActive('/', 'highlight') }}"><a href="/">Home</a></li>
    <li><a href="/about">About</a></li>
</ul>

您还可以设置默认输出值,如果您不想每次都输入它

$ekko = new Ekko;
$ekko->setDefaultValue('highlight');
return $ekko->isActive('/');

或者在Laravel中,您可以在config/ekko.php文件中设置默认输出值

<?php

return [
    'default_output' => 'highlight'
];

要发布Ekko的配置,请在Laravel中使用以下命令

php artisan vendor:publish --provider="Laravelista\Ekko\Frameworks\Laravel\ServiceProvider"

使用布尔值truefalse在布局视图中根据您所在的页面显示某些内容时很方便

@if(Ekko::isActive('/about', true))
    <p>Something that is only visible on the `about` page.</p>
@endif

全局辅助函数

全局辅助函数默认禁用。要启用它们,请使用Ekko::enableGlobalHelpers();$ekko->enableGlobalHelpers()

在Laravel中,将以下代码添加到您的app/Providers/AppServiceProvider.php文件中的register方法

\Ekko::enableGlobalHelpers();

用法

当在框架外部使用时,此软件包只有一个主要方法,称为isActive。此函数接受一个input,可以是字符串或字符串数组,以及一个output,可以是任何内容。默认输出是active

<li class="{{ $ekko->isActive('/') }}"><a href="/">Home</a></li>
<li class="{{ $ekko->isActive(['/', '/home]) }}"><a href="/">Home</a></li>
<li class="{{ $ekko->isActive(['/', '/home, '*home*']) }}"><a href="/">Home</a></li>
<li class="{{ $ekko->isActive('/home*') }}"><a href="/">Home</a></li>
<li class="{{ $ekko->isActive('/home*feature=slideshow*') }}"><a href="/">Home</a></li>
<li class="{{ $ekko->isActive('/index.php?page=*') }}"><a href="/">Home</a></li>

它支持字符串、数组、通配符和查询参数。

Laravel用法

使用外观Ekko::resolve(Ekko::class)app(Ekko::class)来获取Laravel引导实例。

Laravel包含一些针对命名路由和其他辅助方法的特殊方法。此外,这里还有很多与v1版本的向后兼容性。

方法

Ekko::isActive($input, $output = null) 调用主 Ekko 方法 isActive。如上所述。

Ekko::isActiveRoute($input, $output = null) 用于命名路由。支持数组和通配符。

Ekko::areActiveRoutes(array $input, $output = null) 用于命名路由数组。支持通配符。向下兼容。使用 isActiveRoute 并传入相同的数组。

Ekko::isActiveURL($input, $output = null)Ekko::isActive 相同。 向下兼容。使用 Ekko::isActive 并传入相同的输入。

Ekko::areActiveURLs(array $input, $output = null)Ekko::isActiveURL 相同,但只接受 URL 数组。 向下兼容。使用 Ekko::isActive 并传入相同的数组。

Ekko::isActiveMatch($input, $output = null)Ekko::isActive 相同。此方法使用通配符 * 包围输入。支持字符串、数组和通配符作为输入。 向下兼容。使用 Ekko::isActive 并传入相同的输入,但在期望位置添加通配符 *

Ekko::areActiveMatches(array $input, $output = null)Ekko::isActiveMatch 相同,但只接受字符串数组。 向下兼容。使用 Ekko::isActive 并传入相同的数组。

开发

# Install dependencies
composer install

# Run tests
vendor/bin/phpunit

# Run Psalm
vendor/bin/psalm

# Format code (php-cs-fixer)
vendor/bin/php-cs-fixer

致谢

衷心感谢

  • @judgej 为路由通配符做出贡献。
  • @Jono20201 为辅助函数做出贡献。
  • @JasonMillward 为改进嵌套路由名称中的通配符做出贡献。
  • @it-can 为 Laravel 5.5+ 自动发现做出贡献。
  • @foo99 为蛇形函数名称做出贡献。
  • @Turboveja 为 are_active_matches 函数做出贡献。

赞助商和资助者

我要向以下赞助商和资助者表示我的感谢,他们为我的开源之旅提供了资金。如果您有兴趣成为赞助商或资助者,请访问资助者页面

贡献

感谢您考虑为 Ekko 做出贡献!贡献指南可在此处找到。

行为准则

为了确保开源社区对所有人均持欢迎态度,请阅读并遵守行为准则

许可

Ekko 是在 MIT 许可证 下许可的开源软件。