#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, это пригодится! Спасибо