logo

全局搜索

Nova 不仅允许您在特定资源和关系中搜索,您还可以使用位于 Nova 管理面板顶部导航栏中的全局搜索输入框在所有资源中进行全局搜索。

Global Search

聚焦全局搜索

您可以通过按下键盘上的 /(正斜杠)来聚焦全局搜索输入框。按下 ESC(转义键)也会关闭全局搜索输入框。

标题/副标题属性

当资源显示在搜索结果中时,结果将显示资源的“标题”。例如,User 资源可以指定 name 属性作为其标题。然后,当资源显示在全局搜索结果中时,该属性将被显示。

要自定义资源的“标题”属性,您可以在资源类上定义一个 title 属性。

php
/**
 * The single value that should be used to represent the resource when being displayed.
 *
 * @var string
 */
public static $title = 'name';

或者,您可以覆盖资源的 title 方法。

php
/**
 * Get the value that should be displayed to represent the resource.
 *
 * @return string
 */
public function title()
{
    return $this->name;
}

在搜索结果中显示头像

您还可以通过在资源中添加 头像 字段,在搜索结果中将资源的“头像”显示在标题旁边。

副标题

您也可以在全局搜索结果中显示一个较小的“副标题”属性。副标题将直接放置在标题属性下方。在这个截图中,您可以看到 Post 资源的作者显示为副标题,可以快速识别谁写了某个帖子。

Global Search

要定义资源的副标题,您应该覆盖资源的 subtitle 方法。

php
/**
 * Get the search result subtitle for the resource.
 *
 * @return string
 */
public function subtitle()
{
    return "Author: {$this->user->name}";
}

预加载

如果您的副标题访问相关资源上的信息,您应该考虑将相关资源添加到资源的 预加载数组 中。

自定义

限制全局搜索结果

您可以通过覆盖资源上的 globalSearchResults 属性来限制通过全局搜索返回给定资源的结果数量。

php
/**
 * The maximum number of results to include when searching globally.
 *
 * @var int
 */
public static $globalSearchResults = 5;

全局搜索防抖

您可以使用 Nova::globalSearchDebounce 方法配置全局搜索字段的防抖时间。通常,此方法应该从您的应用程序的 NovaServiceProvider 中调用。

php
Nova::globalSearchDebounce(1); // 1 second

自定义头像/封面

如果您正在构建一个 自定义字段,希望将其用作全局搜索结果的“头像图像”/封面艺术,您的字段应实现 Laravel\Nova\Contracts\Cover 接口。此接口要求您定义一个 resolveThumbnailUrl 方法,该方法应返回您想要的“封面艺术”的 URL

php
/**
 * Resolve the thumbnail URL for the field.
 *
 * @return string|null
 */
public function resolveThumbnailUrl()
{
    return 'https://www.example.com/avatar/'.md5(strtolower($this->value)).'?s=300';
}

禁用资源的全局搜索

默认情况下,所有 Nova 资源都可以在全局范围内搜索;但是,您可以通过覆盖资源上的 globallySearchable 属性,将给定资源从全局搜索中排除

php
/**
 * Indicates if the resource should be globally searchable.
 *
 * @var bool
 */
public static $globallySearchable = false;

全局禁用全局搜索

如果您希望完全禁用 Nova 中的全局搜索,可以从您的 App/Providers/NovaServiceProvider 中调用 withoutGlobalSearch 方法

php
use Laravel\Nova\Nova;

/**
 * Boot any application services.
 *
 * @return void
 */
public function boot()
{
    parent::boot();

    Nova::withoutGlobalSearch();
}