Как отобразить параметры componentProperties по выбранному параметру в раскрывающемся списке? - PullRequest
0 голосов
/ 23 апреля 2019

Я уверен, что это очень просто, но на данный момент это немного выходит за рамки моих возможностей.

Я создал плагин, который хотел бы использовать для отображения галерей, который работает нормально.Однако попытка добавить параметры галерей, которые я создал в моем компоненте, оказывается трудной.

Когда я добавляю компонент на страницу, у меня теперь есть возможность выбрать все галереи, которыеЯ создал, но отображал галерею на основе того, что выбрал, и это то, что мне не удалось сделать.

Любая помощь будет принята с благодарностью!

Я уверен, что это очень просто, но этов настоящий момент это немного выходит за рамки моих возможностей.

Я создал плагин, который хотел бы использовать для отображения галерей, который работает нормально.Однако попытка добавить параметры галерей, которые я создал в моем компоненте, оказывается трудной.

Когда я добавляю компонент на страницу, у меня теперь есть возможность выбрать все галереи, которыеЯ создал, но отображал галерею, на основе которой я выбрал то, что мне не удалось сделать.

Любая помощь будет принята с благодарностью!

Components / Gallery.php:

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

class gallerys extends ComponentBase
{
public $gallery;

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

public function defineProperties() {
    $lists = $this->getLists();
    return [
        'galleryName' => [
            'title' => 'Gallery',
            'type' => 'dropdown',
            'placeholder' => 'Select Gallery',
            'options' => $lists
        ]
    ];
}

public function getLists() {
    $agreements = GalleryModel::all()->pluck('name', 'id');
    return $agreements->toArray();
}

public function getList() {
    $agreement = GalleryModel::where('id', $this->property('galleryName'))->get();
    return $agreement->first();
}

}

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

{% set gallerys = __SELF__.gallery %}

{% for gallery in gallerys %}

<div class="container-fluid px-0">

    <div class="gallery">

        <div class="row">

            {% for image in gallery.fullImage %}

            <div class="col-md-4 px-0 home-galleryImg">

                <a href="{{ image.path }}">

                    <div class="gallery-imgOverlay">
                        <p>{{ image.title }}</p>
                        <h5>{{ image.description }}</h5>
                    </div>

                    <img class="img-fluid" src="{{ image.thumb(650,auto) }}" alt="{{ thumbnail.description }}">

                </a>

            </div>

            {% endfor %}

        </div>

    </div>

</div>

{% endfor %}

См. Скриншот

1 Ответ

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

Я решил это для себя, создав функцию, которая возвращает «имя» и индексируется по «id» с помощью метода laravel pluck. pluck('name', 'id') Первый аргумент выбирает столбец для использования в качестве значения, а второй аргумент выбирает столбец для использования в качестве ключа. Обратите внимание, * метод toArray() Я не думаю, что поле параметров может принимать коллекции.

public function getLists() {
    $agreements = Agreements::all()->pluck('agrnum', 'id');
    return $agreements->toArray();
}
//returns
array:3 [▼
  2 => "DLE-2"
  4 => "DLE-1"
  5 => "DLE-3"
]

Теперь в моей области свойств я вызываю функцию $list = $this->getList();

public function defineProperties() {
$lists = $this->getLists();
return [
    'getList' => [
        'title' => 'List',
        'type' => 'dropdown',
        'placeholder' => 'Select List',
        'options'     => $lists
       ]
    ];
}

После этого вы можете выполнить Lists::where('id', $this->property('getList')); или что-то в этом роде в функции, чтобы показать выбранный список или в вашей галерее дел.

Мои результаты: Бэкэнд страницы CMS из компонента

    public function defineProperties() {
    $lists = $this->getLists();
    return [
        'getList' => [
            'title' => 'List',
            'type' => 'dropdown',
            'placeholder' => 'Select List',
            'options'     => $lists
           ]
        ];
    }

    public function getLists() {
    $agreements = Agreements::all()->pluck('agrnum', 'id');
    return $agreements->toArray();
    }

    public function getList() {
        $agreement = Agreements::where('id', $this->property('getList'))->get();
        return $agreement->first();
    }

enter image description here

Веб-страница из default.htm в папке шаблона компонента

{{ d(__SELF__.getList) }}

enter image description here

Также, если я сделаю {{ d(__SELF__.property('getList')) }}, мне будет показано значение "5".

...