NullRefExcep/yii2-eav

Динамическая подгрузка

loveorigami opened this issue · 6 comments

Понадобилось сейчас сделать привязку атрибутов при смене категории.

  • Отправляется post - запрос на action
  • Там я нахожу необходимые сеты и формирую Entity.
  • И... все )

Т.к. вывод eav-полей завязан только на поведении и никак нельзя их вывести без привязки к модели.

Было бы очень удобно вытягивать поля динамически.
Например - тут
https://github.com/nurbeknurjanov/yii2ecommerce/blob/master/modules/eav/controllers/DynamicFieldController.php#L81

Демо - https://backend.sakuracommerce.com/product/product/update?id=1

2019-04-26_17-11-24

2019-04-26_17-11-49

Может, для этого нужно сделать отдельный виджет?

На сколько я понял, в вашем примере атрибуты связаны с категориями.
У нас такой привязки нет.

Думаю, что виджет можно сделать, но не в рамках текущего пакета.

Ну у меня категория в свою очередь, связана с сетом. При создании или редактировании категории я назначаю товару тот или иной сет.

Данный вопрос пересекается с виджетом для поиска. Разные категории связаны с разными сетами. На фронте нужно вывести форму с eav атрибутами в соответсвующей категории. Как в большинстве магазинов.

Почему не добавить такой виджет сюда в пакет? Для админки тут все есть. А для фронта нет поисковой формы по атрибутам.

Тогда бы это был полноценный пакет.

В этом пакете нет категорий, я могу вам помочь сделать такой виджет, если с этим проблема.
Но это будет не в рамках этого пакета.

Не в категориях дело. В доке

If you need some dynamic configuration sets of your model you can use method afterFind():

public function afterFind()
{
    $this->attachBehavior('eav', [
        'class' => Entity::class,
        'entity' => function () {
            $setIds = $this->getCategories()->select('set_id')->column();
            $setIds[] = Set::findOne(['code' => 'product'])->id;
            return new EntityModel([
                'sets' => Set::findAll(['id' => array_unique($setIds)]),
            ]);
        },
    ]);
    parent::afterFind();
}

Но для фронта с таким кейсом дополнительно в пакете ничего нет.

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

Для ясности - пусть продукт напрямую связан с сетом.

Допустим, у меня есть следующие сеты

  • Tv
  • Mobile

И связь продукта напрямую с сетами product_id -> set_id

==============

На фронте находясь в продукте SamsungMobile я хочу показать форму с параметрами из сета mobile, чтоб отфильтровать другие телефоны по заданному критерию.

Написать виджет я и сам могу, просто думал, логичнее, чтобы все было в одном пакете.
Набор виджетов для админки

  • Поведение для модели
  • Виджеты для грида
  • Виджет формы для searchModel

Если с кодом проблем нет, буду рад увидеть PR)