Октябрь CMS |Как получить путь к изображению в компоненте из загрузчика бэкэнд-файла? - PullRequest
1 голос
/ 22 апреля 2019

Итак, у меня есть настройка моего плагина (или я так полагаю), но по какой-то причине в файле default.htm я не могу получить путь к изображению, которое я загрузил через бэкэнд, используя виджет «Загрузка файла».

Например: <img src="{{ plugin.upload.path }}"> не покажет мне путь к изображению, но если я выберу <img src="{{ plugin.upload.first.path }}"> или <img src="{{ plugin.upload.[0].path }}">, я действительно получу путь к изображению, но это не идеально, так как я хочу показатьнесколько изображений.

У меня такое ощущение, что я упускаю что-то чрезвычайно простое, но прошу прощения за свое невежество, поскольку я очень плохо знаком с Октябрем.

Заранее спасибо.

компоненты / галереи / default.htm:

{% set gallerys = __SELF__.gallery %}

<ul>
{% for gallery in gallerys %}

<li>{{ gallery.uploads.path }}</li>

{% endfor %}
</ul>

компоненты / галереи. Php:

<?php namespace MartinSmith\Gallerys\Components;

use Cms\Classes\ComponentBase;
use MartinSmith\Gallerys\Models\Gallery;

class gallerys extends ComponentBase
{

public $gallery;

public function componentDetails(){
    return [
        'name' => 'Frontend Gallery',
        'description' => 'A gallery for you webpage'
    ];
}

public function onRun(){
    $this->gallery = $this->loadGallerys();
}

protected function loadGallerys(){
    return Gallery::all();
}

}

модели / Gallery.php:

<?php namespace MartinSmith\Gallerys\Models;

use Model;

/**
* Model
*/
class Gallery extends Model
{
use \October\Rain\Database\Traits\Validation;

/*
 * Disable timestamps by default.
 * Remove this line if timestamps are defined in the database table.
 */
public $timestamps = false;


/**
 * @var string The database table used by the model.
 */
public $table = 'martinsmith_gallerys_';

/**
 * @var array Validation rules
 */
public $rules = [
];

public $attachMany = [
    'uploads' => 'System\Models\File'
];

}

модели/columns.yaml:

columns:
name:
    label: name
    type: text
    sortable: true
uploads:
    type: partial
    path: ~/plugins/martinsmith/gallerys/models/gallery/_image.htm

models / fields.yaml:

fields:
name:
label: Name
span: auto
type: text
uploads:
    label: Upload
    span: full
    mode: image
    useCaption: true
    thumbOptions:
        mode: crop
        extension: auto
    imageWidth: '200'
    imageHeight: '200'
    type: fileupload

1 Ответ

0 голосов
/ 23 апреля 2019

Вы действительно близки к тому, чтобы получить это.Вот что я думаю происходит.Вы получаете массив элементов из модели ({% for gallery in gallerys %}).Теперь каждый из этих элементов в модели может принимать массив изображений, потому что вы используете $attachMany ({% for image in gallery.uploads %}).Поэтому, когда вы вызываете {{ plugin.upload.first.path }} или {{ plugin.upload.[0].path }}, вы берете первое изображение массива и получаете путь.

Все, что вам нужно сделать, это:

{% set gallerys = __SELF__.gallery %}

<ul>
{% for gallery in gallerys %}

    {% for image in gallery.uploads %}

    <li>{{ image.path }}</li>

    {% endfor %}

{% endfor %}
</ul>

Один потрясающийплагин, который может помочь вам в отладке OctoberCMS - это Twig Dump + (есть еще один, который является Twig Dump, и он тоже работает, но мне нравится Twig Dump +).Это позволяет вам написать {{ d(gallery.uploads) }}, чтобы увидеть дамп объекта.

...