2

所以我将 Laravel 7 与 Nova 2 一起使用。

我已经设置并运行了classic-o/nova-media-library,并且正在使用whitecube/nova-page编辑页面中的静态内容。

我设法在 whitecube/nova-page 模块内的 HeaderOptions 中为我的网站徽标创建了一个上传字段。在事物的后端,一切似乎都运行良好。我可以从我的电脑中选择一张图片并成功上传并保存。所以现在我正处于我想在刀片模板中显示该图像的位置。

我通常会使用

@option('header.logo')

从 whitecube/nova-page 获取数据,但输出文件 ID(在本例中为 18)。我需要文件路径而不是 id。所以我检查了 classic-o/nova-media-library 文档,看来我需要使用 API 才能使用文件 ID 获取文件路径......所以现在我很困惑......我不知道了解如何做到这一点...我尝试了以下方法:

<div class="logo">
    @php
        use ClassicO\NovaMediaLibrary\API;
        $logo = API::getFiles(@option('header.logo'), null, true)
    @endphp
    <a href="/"><img src="{{ $logo->path }}" title="Boutique Terrey.ca" /></a>
</div>

但对我来说这似乎不对......在刀片模板中使用是错误的......而且,@option('header.logo')部分在@php @endphp标签内似乎不起作用.

The error is: Call to undefined function option()

我的 HeaderOptions.php 页面如下所示:

namespace App\Nova\Templates;

use Illuminate\Http\Request;
use Laravel\Nova\Fields\Text;
use Whitecube\NovaPage\Pages\Template;
use ClassicO\NovaMediaLibrary\MediaLibrary;

class HeaderOptions extends Template {

    /**
     * Get the fields displayed by the resource.
     *
     * @param  \Illuminate\Http\Request $request
     * @return array
     */
    public function fields(Request $request)
    {
        return [
            MediaLibrary::make('Logo')->types(['Image'])->preview('thumb'),
            Text::make('Phone', 'phone'),
            Text::make('Email', 'email'),
        ];
    }

    /**
     * Get the cards available for the request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function cards(Request $request)
    {
        return [];
    }

}

当您使用 nova-media-library 上传图像并使用 nova-page 显示它时,输出文件路径的正确方法是什么?我搞不清楚了!提前致谢!

============================

更新

好消息!我设法让它工作......但我只是不喜欢我的解决方案......

<div class="logo">
    @php
        use ClassicO\NovaMediaLibrary\API;
        $id =  Page::option('header')->logo;
        $logo = API::getFiles($id, null, true);
    @endphp
    <a href="/"><img src="{{ $logo->url }}" title="Boutique Terrey.ca" /></a>
</div>

图像出现了......但是在我的刀片模板中使用“使用”是丑陋的......有没有更好的方法来做到这一点?

现在我也可以做

<div class="logo">
    @php
        $logo = ClassicO\NovaMediaLibrary\API::getFiles(Page::option('header')->logo, null, true);
    @endphp
    <a href="/"><img src="{{ $logo->url }}" title="Boutique Terrey.ca" /></a>
</div>

但同样,$logo 不应该在刀片文件中......我怎样才能将它传递给我的控制器?

4

0 回答 0