October CMS | Как получить путь к изображению в компоненте из программы загрузки внутренних файлов?

#plugins #octobercms

#Плагины #octobercms

Вопрос:

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

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

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

Заранее благодарю вас.

components/gallerys/default.htm:

 {% set gallerys = __SELF__.gallery %}

<ul>
{% for gallery in gallerys %}

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

{% endfor %}
</ul>
  

components/Gallerys.php:

 <?php namespace MartinSmithGallerysComponents;

use CmsClassesComponentBase;
use MartinSmithGallerysModelsGallery;

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();
}

}
  

models/Gallery.php:

 <?php namespace MartinSmithGallerysModels;

use Model;

/**
* Model
*/
class Gallery extends Model
{
use OctoberRainDatabaseTraitsValidation;

/*
 * 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' => 'SystemModelsFile'
];

}
  

модели / столбцы.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:

Вы действительно близки к получению этого. Вот что, я думаю, происходит. Вы извлекаете массив элементов из модели ( {% for gallery in gallerys %} ). Теперь каждый из этих элементов в модели может принимать массив изображений, потому что вы используете $attachMany ( {% for image in gallery.uploads %} ). Итак, когда вы вызываете {{ plugin.upload.first.path }} or {{ 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) }} , чтобы увидеть дамп объекта.

Комментарии:

1. Это потрясающе! Я знал, что упускаю что-то очевидное! Кроме того, очень ценю советы по дампу Twig, это пригодится! Спасибо