Shopaholic скрыть ненужные поля в админке

Для простых проектов требуется скрыть некоторые поля в Shopaholic, например артикул, внешний id и т.п. В примере уберем поля для товара и оффера.

Создаем плагин, у меня он будет называться ShopaholicProductExtender.

php artisan create:plugin Site21.ShopaholicProductExtender

Убираем поля в товаре

Создадим файл в плагине по пути: plugins/site21/shopaholicproductextender/classes/event/product/ExtendProductFieldsHandler.php с содержимым:

<?php namespace Site21\ShopaholicProductExtender\Classes\Event\Product;

use Lovata\Toolbox\Classes\Event\AbstractBackendFieldHandler;

use Lovata\Shopaholic\Models\Product;
use Lovata\Shopaholic\Controllers\Products;

class ExtendProductFieldsHandler extends AbstractBackendFieldHandler
{

    protected function extendFields($obWidget)
    {
        // убираем ненужные поля, пишем те что нужно убрать
        $obWidget->removeField('code');
        $obWidget->removeField('external_id');
        $obWidget->removeField('preview_text');
        $obWidget->removeField('description');
        $obWidget->removeField('preview_image');
        $obWidget->removeField('images');
    }


    protected function getModelClass() : string
    {
        return Product::class;
    }


    protected function getControllerClass() : string
    {
        return Products::class;
    }
}

в boot плагина добавим:

use Site21\ShopaholicProductExtender\Classes\Event\Product\ExtendProductFieldsHandler;
==
Event::subscribe(ExtendProductFieldsHandler::class);

Убираем поля в торговом предложении

Создадим файл в плагине по пути: plugins/site21/shopaholicproductextender/classes/event/offer/ExtendOfferFieldsHandler.php с содержимым:

<?php namespace Site21\ShopaholicProductExtender\Classes\Event\Offer;

use Lovata\Toolbox\Classes\Event\AbstractBackendFieldHandler;

use Lovata\Shopaholic\Models\Offer;
use Lovata\Shopaholic\Controllers\Offers;

class ExtendOfferFieldsHandler extends AbstractBackendFieldHandler
{
    protected function extendFields($obWidget)
    {
        // убираем ненужные поля, пишем те что нужно убрать
        $obWidget->removeField('measure');
        $obWidget->removeField('weight');
        $obWidget->removeField('height');
        $obWidget->removeField('length');
        $obWidget->removeField('width');
        $obWidget->removeField('quantity_in_unit');
        $obWidget->removeField('measure_of_unit');
        $obWidget->removeField('external_id');
    }
    
    protected function getModelClass() : string
    {
        return Offer::class;
    }

    protected function getControllerClass() : string
    {
        return Offers::class;
    }
}

в boot плагина добавим:

use Site21\ShopaholicProductExtender\Classes\Event\Offer\ExtendOfferFieldsHandler;
==
Event::subscribe(ExtendOfferFieldsHandler::class);

Скрыть по условию

Можно скрыть некоторые поля по некоторым условиям.

Например, если поле незаполнено, то не выводить его:

if(!$obWidget->getFields()['popularity']->value) {
    $obWidget->removeField('popularity');
}

Скрыть в оффере поле если товар не состоит в одной из категорияи:

if(!in_array($obWidget->model->product->category->id, [7,8,9,10,11,12])) {
    $obWidget->removeField('colorful');
}

Скрываем таб с ценами если имеется значение у поля

$partner_link = $obWidget->getFields()['partner']->value;
if($partner_link) {
    $obWidget->removeField('price_list');
}

Пример готового плагина

site21_shopaholicproductextender.zip

Опубликовано 23 марта 2021 г. в категориях: October CMS Shopaholic

Если Вам необходимо внедрить данную разработку на свой проект, свяжитесь со мной, обсудим цену и срок.

Связаться со мной Fill 1