formfeed-uk/nova-breadcrumbs

一个Laravel Nova扩展包,用于扩展第一方Nova面包屑功能

3.1.2 2023-04-25 19:22 UTC

README

Laravel Nova扩展包扩展了第一方Nova面包屑的功能。

测试仓库可在此找到: https://github.com/Formfeed-UK/nova-breadcrumbs-tests

2.x版本更改

2.x版本相对于之前版本有重大更改,该包现在增强现有的nova面包屑,提供以下功能:

  • 在面包屑类上提供静态方法,允许全局控制面包屑生成
  • 在资源上提供方法,允许按资源(按资源方法覆盖静态回调)控制面包屑生成
  • 支持资源分组
  • 嵌套资源面包屑

1.x版本中的重大更改

  • 将使用Nova 4.19+的面包屑Vue组件
  • 不再使用资源卡片(这提供了更好的用户体验,因为面包屑将通过页面属性发送,就像内置的面包屑一样,并且减少了请求)
  • 将通过中间件拦截Nova面包屑
  • 无法再使用自定义CSS(因为使用了Nova组件)
  • 无法再使用onlyOn{view}、exceptOn{view}等权限方法。现在可以通过回调/类方法控制面包屑的可见性
  • 每个面包屑都将扩展Nova面包屑类,面包屑数组将扩展Nova面包屑类。

需求 >= v2.x

  • php: >=8.0
  • laravel/nova: ^4.19

需求 <= v1.x

  • php: >=8.0
  • laravel/nova: ^4.0
  • formfeed-uk/nova-resource-cards: ^1.1

功能

此包向Nova 4资源顶部添加了自动面包屑。

它支持:

  • belongsTo关系来构建一个完整的面包屑集到您的Nova根目录。
  • 自动检测belongsTo关系,并能够指定一个关系作为“父”关系
  • 直接链接到eminiarts/nova-tabs包中的资源标签页(建议使用标签slug)
  • 链接到资源的索引或其父资源(对于包含为字段的关联关系)
  • 为资源自定义标题和标签函数
  • 在仪表板中使用(只到面包屑显示为“首页 -> {当前仪表板}”的程度)。主要为了UI一致性。
  • 方法/回调来控制全局或按资源生成面包屑

安装

  1. 通过composer将包安装到使用Nova的Laravel应用中
composer require formfeed-uk/nova-breadcrumbs
  1. 发布配置文件(可选)
php artisan vendor:publish --tag=nova-breadcrumbs-config

用法

通用

  1. 在您的NovaServiceProvider的boot方法中,以与第一方Nova面包屑相同的方式启用Nova面包屑
    public function boot() {
        parent::boot();

        Nova::withBreadcrumbs(true);
    }
  1. 可选地,在您的Model上配置一个parent方法,以明确定义包应查询的关系。此函数的名称可以在配置文件中更改。
class MyModel extends Model {

    ...

    public function parent() {
        return $this->config();
    }   

    public function config() {
        return $this->belongsTo(Config::class, "config_id");
    }

    ...

}

资源方法

您可以通过向您的Nova资源添加方法来选择性地覆盖面包屑包的默认行为(按资源)。这些方法应全部返回Breadcrumb实例或Breadcrumb实例数组。

  • groupBreadcrumb(NovaRequest $request, Breadcrumbs $breadcrumbs, Breadcrumb $groupBreadcrumb) - 覆盖此资源的分组面包屑
  • indexBreadcrumb(NovaRequest $request, Breadcrumbs $breadcrumbs, Breadcrumb $indexBreadcrumb) - 覆盖此资源的索引面包屑
  • detailBreadcrumb(NovaRequest $request, Breadcrumbs $breadcrumbs, Breadcrumb $detailBreadcrumb) - 覆盖此资源的详情面包屑
  • formBreadcrumb(NovaRequest $request, Breadcrumbs $breadcrumbs, Breadcrumb $formBreadcrumb, $type) - 覆盖此资源的表单面包屑,$type 是一个字符串,表示当前表单类型(创建、更新、附加、复制等)
  • resourceBreadcrumbs(NovaRequest $request, Breadcrumbs $breadcrumbs, array $breadcrumbArray) - 覆盖此资源所有的面包屑

对于仪表板,你可以使用以下方法

  • dashboardBreadcrumb(NovaRequest $request, Breadcrumbs $breadcrumbs, Breadcrumb $dashboardBreadcrumb) - 覆盖此资源的仪表板面包屑

示例

class MyResource extends Resource {

    // Change the name of the breadcrumb
    public function detailBreadcrumb(NovaRequest $request, Breadcrumbs $breadcrumbs, Breadcrumb $detailBreadcrumb) {
        return $detailBreadcrumb->name = _('My Custom Name');
    }

    // Remove all previous breadcrumbs and add a new root
    public function resourceBreadcrumbs(NovaRequest $request, Breadcrumbs $breadcrumbs, array $breadcrumbArray) {
        $breadcrumbs->items = [Breadcrumb::make('Home', '/')];
        return $breadcrumbArray;
    }

    // Prevent the group breadcrumb for this resource
    public function groupBreadcrumb(NovaRequest $request, Breadcrumbs $breadcrumbs, Breadcrumb $groupBreadcrumb) {
        return null;
    }
}

静态回调

你可以通过在 Breadcrumbs 类中使用以下静态方法来全局覆盖面包屑的默认行为。它们应该在服务提供者的 boot 方法中提供。

这些方法将覆盖任何针对资源的特定方法。

提供的闭包应返回 Breadcrumb 实例或 Breadcrumb 实例数组。

  • detailCallback(callable $callback)
  • indexCallback(callable $callback)
  • formCallback(callable $callback)
  • resourceCallback(callable $callback)
  • dashboardCallback(callable $callback)
  • rootCallback(callable $callback)
  • groupCallback(callable $callback)

示例

use FormFeed\Breadcrumbs\Breadcrumb;
use FormFeed\Breadcrumbs\Breadcrumbs;

class NovaServiceProvider extends ServiceProvider {

    public function boot() {
        parent::boot();

        Nova::withBreadcrumbs(true);

        Breadcrumbs::detailCallback(function(NovaRequest $request, Breadcrumbs $breadcrumbs, Breadcrumb $detailBreadcrumb) {
            return $detailBreadcrumb->name = _('My Custom Name');
        });

        Breadcrumbs::rootCallback(function(NovaRequest $request, Breadcrumbs $breadcrumbs, Breadcrumb $rootBreadcrumb) {
            return Breadcrumb::make(_('My Custom Root Breadcrumb'), "/my-root");
        });
    }
}

配置选项

请参阅包含的配置文件以获取完整的配置选项列表(有很好的注释)。

除了这些选项,你还可以在资源本身中指定以下选项

链接到父级

这确定面包屑是否应该链接到父级资源,无论当前资源的索引是否可从主菜单导航

public static $linkToParent = true|false;

禁用父级面包屑

通过添加以下静态变量到资源中可以禁用解析父级面包屑

public static $resolveParentBreadcrumbs = false;

反射调用

通过调用反射的空白模型方法和检查返回类型来确定父级现在默认禁用。

强烈建议关闭此功能,并使用父级方法、表单字段或定义的关系返回类型代替。

但是,如果需要,你仍然可以通过以下方式启用此功能

  • 如果在 1.0.0 发布后首次下载,请在发布配置后设置 invokingReflection 配置选项
  • 如果从 0.1.x 升级,请在你的配置中添加以下内容: "invokingReflection" => true

你还可以使用以下静态变量在资源的基础上设置此选项

public static $invokingReflection = true|false;

问题/待办事项

  • 启用基于先前访问资源的多态/多对多关系的支持

如果你有任何功能请求或发现任何错误,请打开问题或提交拉取请求。拉取请求将比问题得到更快的处理。

许可证

Nova Breadcrumbs 是开源软件,使用 MIT 许可证授权。查看许可证.