dewsign/nova-pages

Laravel Nova 的页面模块

安装: 656

依赖项: 0

建议: 0

安全性: 0

星标: 16

关注者: 3

分支: 5

开放性问题: 2

类型:软件包


README

使用重复块轻松在 Nova 中创建自定义页面。有关重复块的详细信息,请参阅文档。

页面可以嵌套(深度可根据需要调整),例如/page-one/page-two/page-three/page-four,并且页面可以有任意数量的子页面。

尽管此软件包不提供任何类型的布局或设计,但页面模型利用了 Maxfactor Laravel Support 软件包的各种特性和基础模型,提供了一些通常期望公开网页的功能,包括搜索引擎优化(SEO)。有关更多信息,请参阅Maxfactor Laravel Support仓库。

安装

composer require dewsign/nova-pages

运行迁移

php artisan migrate

在 NovaServiceProvider.php 中加载工具

public function tools()
{
    return [
        ...
        new \Dewsign\NovaPages\Nova\NovaPagesTool,
        ...
    ];
}

默认字段

使用提供的范围,可以创建一个流畅的 API 来查找页面。
例如:Page::active()->featured()->highToLow()->take(3)->get()

模板

此软件包不包含任何预制的模板。只需替换已发布的resources/views/vendor/nova-pages/show.blade.php视图或在该文件夹中创建新的模板resources/views/vendor/nova-pages/templates。如果存在多个模板,则在 nova 中将显示一个选择选项,您可以在其中选择页面的模板。

配置

重复块

默认情况下,Nova Pages 将使用Nova Repeater Blocks软件包中定义的重复块配置,并且您可以通过将其添加到 nova-pages 配置文件中添加额外的重复块。

'repeaters' => [
    'More\Repeaters'
],

或者,您可以选择删除所有标准重复块并使用自己的选择。

'replaceRepeaters' => true,

主页/默认页面

您可以定义应加载哪个页面 slug 作为主页,可通过/访问,除非您已定义自定义路由,在这种情况下,Nova Pages 不会将主页路由分配给主页!

在下面的示例中,创建一个具有homepage slug 的页面将作为默认页面在访问网站时提供服务。

'homepageSlug' => 'homepage',

自定义

如果您想有更多的控制权,您可以指定要使用的 Nova 资源和页面模型。由于 nova 从静态变量中读取模型的方式,如果您想使用自定义模型,您必须提供自己的自定义资源。

在任何情况下,这些都应该扩展此软件包中的默认页面模型和资源。

'models' => [
    'page' => 'App\Page',
],
'resources' => [
    'page' => 'App\Nova\Page',
],

Nova 资源组

'group' => 'Pages',

您可以为 Pages 资源在 Laravel Nova 中出现的位置进行自定义。默认情况下,它将单独位于“页面”部分。

路由

此软件包使用一个通配符路由,因此任何未被应用程序 Web 路由捕获的 URL 都将被捕获并处理以查找与 slug 匹配的页面。这使得我们可以使所有页面都可通过任何特定前缀访问。

如果没有找到匹配的页面,将抛出一个 404 错误。

工厂和种子文件

此软件包包含预制的工厂和种子文件。如果您想将它们包含在您的应用程序中,只需调用种子文件或使用提供的工厂来填充数据库中的示例内容。

// database/seeds/DatabaseSeeder.php

public function run()
{
    $this->call(Dewsign\NovaPages\Database\Seeds\PageSeeder::class);
}

域名映射

您可以将子域名(例如 careers.mydomain.com)映射到页面,以自动为该域提供匹配基本路径别名和任何子页面的页面。通过在配置文件中的 domainMap 数组中添加路径别名,支持任何数量的子域名。

重要:如果您使用域名映射,必须在您的配置或提供的 ROOT_DOMAIN 环境查找中设置 rootDomain。例如:mydomain.com

return [
    ...
    'domainMap' => [
        'careers',
    ],
];

在上面的示例中,如果您创建一个带有 careers 路径别名的页面,则该页面及其任何子页面将在移除基本路径别名后的子域名上提供。例如:mydomain.com/careers/vacancies 将变为 careers.mydomain.com/vacancies

重要:您需要确保任何非页面路由都导向正确的域名。我们建议始终将路由导向完整 URL 而不是相对路径。

我们提供了两个路由助手,如果您根本不使用域名映射,可以安全地使用 pages.show 路径名称。如果您使用域名映射,可以使用接受额外域名参数的 domain.pages.show 助手。

route('pages.show', ['path' => 'careers']);
// https://mydomain.com/careers

route('domain.pages.show', ['domain' => 'careers', 'path' => 'vacancies']);
// https://careers.mydomain.com/vacancies

权限

包含了一个用于 Nova Permissions Tool 的 PagePolicy,但默认不加载,该工具底层使用 Brandenburg。只需从该包中加载 AuthServiceProvider 即可使用此功能,或者如果您使用其他权限库,则忽略此功能。

// config/app.php

'providers' => [
    ...
    Dewsign\NovaPages\Providers\AuthServiceProvider::class,
],

助手

元页面

当与自己的控制器路由的应用程序部分一起工作时,您可能仍然希望允许用户通过 UI 添加附加内容和管理元信息。您可以使用提供的 meta 助手从页面检索这些元数据。

$page = Page::meta('page-slug', 'Default Text');

如果找到匹配的页面,则返回 Page 模型,否则返回包含默认值的数组 ...

[
    'page_title' => 'Default Text',
    'browser_title' => 'Default Text',
    'meta_description' => 'Default Text',
    'h1' => 'Default Text',
];

使用元页面向前端提供此内容意味着您可以在站点的所有部分中重用大量代码,以保持一致性并从包含的 SEO 价值中受益。

语言

您可以在创建页面时更改页面的 html lang 类型。您可以通过将 enableLanguageSelection 配置值设置为 true 来启用此功能;

要将此功能实现到您的标记中,我们建议将其添加到您的 layouts.default 视图中

<html lang="{{ array_get($page ?? [], 'language', app()->getLocale()) }}">

有一个 defaultLanguage 配置变量,您可以自由定制以适应您的应用程序。此包将 en-GB 设置为默认语言。

访问控制

此包使用 silvanite/novatoolpermissions 来处理页面的访问控制。有关更多信息,请参阅 novatoolpermissions 的文档。

可以在 Page 模型上覆盖 authoriseToView 函数以自定义访问控制功能。或者,使用 PagePolicy 中的 accessContent 网关。