Использование nova-media-library для загрузки изображений и использование nova-page для их отображения - PullRequest
2 голосов
/ 18 июня 2020

Итак, я использую Laravel 7 с Nova 2.

У меня установлена ​​и работает classi c -o / nova-media-library , и я использую whitecube / nova-page для редактирования содержимого c на моих страницах.

Мне удалось создать поле загрузки для lo go моего веб-сайта внутри моих HeaderOptions внутри whitecube Модуль / nova-page. Кажется, что на стороне сервера все работает нормально. Я могу выбрать изображение на своем компьютере и успешно загрузить его и сохранить. Итак, теперь я нахожусь на пуантах, где я хотел бы показать это изображение в моем шаблоне клинка.

Обычно я бы использовал

@option('header.logo')

для получения данных из whitecube / nova-page, но который выводит идентификатор файла (в данном случае 18). Мне нужен путь к файлу, а не идентификатор. Итак, я проверил документацию classi c -o / nova-media-library и, похоже, мне нужно использовать API, чтобы получить путь к файлу с помощью идентификатора файла ... Итак, теперь я просто запутался ... Я не понимаю, как это сделать ... Я пробовал следующее:

<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.lo go'), похоже, не работает, когда внутри тега @ php @ end php.

The error is: Call to undefined function option()

My HeaderOptions. php page выглядит так:

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>

Но опять же, $ lo go не должно быть в файле лезвия ... Как я могу передать это своему контроллеру?

...