daltcore/ekko

用于标记导航项为激活状态的、不依赖框架的PHP包。

维护者

详细信息

github.com/DALTCORE/Ekko

源代码

资助包维护!
Patreon

1.0.0 2022-10-12 08:13 UTC

This package is not auto-updated.

Last update: 2024-09-12 15:36:04 UTC


README

用于标记导航项为激活状态的、不依赖框架的PHP包。

Become a Patron

功能

  • 不依赖框架。
  • 可修改以适用于任何自定义应用程序和UI。
  • 目前支持的框架:Laravel(欢迎Pull Requests!)。
  • 全局辅助函数默认禁用。
  • 支持默认输出值。
  • 向下兼容。
  • 通过表格驱动测试(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 中标记菜单项为激活状态,您需要向 <li> 标签添加 active CSS类

<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 为snake_case函数名做出贡献。
  • @Turboveja 为are_active_matches函数做出贡献。

赞助商 & 支持者

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

贡献

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

行为准则

为了确保开源社区对所有成员都友好,请阅读并遵守行为准则

许可

Ekko是开源软件,许可协议为MIT许可证