Для простых проектов требуется скрыть некоторые поля в 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');
}
Опубликовано 23 марта 2021 г. в категориях: October CMS Shopaholic
Если Вам необходимо внедрить данную разработку на свой проект, свяжитесь со мной, обсудим цену и срок.