Забегая вперед, готовый плагин в marketplace OctoberCMS.
1) Создадим плагин. Уроки создания плагина уже есть на этом сайте, я законспектирую.
php artisan create:plugin Samata.Properties
2) Сразу добавим поля в БД через миграцию. Пример моего файла миграции:
public function up()
{
Schema::table('lovata_shopaholic_products', function (Blueprint $table) {
$table->string('width')->nullable();
$table->string('height')->nullable();
$table->string('length')->nullable();
});
}
public function down()
{
Schema::table('lovata_shopaholic_products', function ($table) {
$table->dropColumn('width','height','length');
});
}
То есть добавляем новые колонки в таблицу товара Shopaholic. Есть решения реализации добавления в новую таблицу. Я выбрал такой подход.
Записываем в version.yaml новую миграцию и запускаем
php artisan october:up
3) в plugin.php
в самом верху добавляем
use Event;
use Lovata\Shopaholic\Models\Product;
use Lovata\Shopaholic\Controllers\Products;
а в boot() пишем:
Event::listen('backend.form.extendFields', function($widget) {
if (!$widget->getController() instanceof Products || $widget->isNested || $widget->alias != 'form') {
return;
}
if (!$widget->model instanceof Product) {
return;
}
$widget->addTabFields([
'width' => [
'label' => 'Ширина',
'type' => 'text',
'tab' => 'Габариты',
],
'length' => [
'label' => 'Длина',
'type' => 'text',
'tab' => 'Габариты',
],
'height' => [
'label' => 'Высота',
'type' => 'text',
'tab' => 'Габариты',
],
]);
});
Теперь при редактировании товара появятся три новых поля. Что в принципе кому-то будет и достаточно.
4) Но мне же нужно чтобы эти поля импортировались через XML. Поэтому допишем еще немного в boot() нашего плагина
Event::listen('shopaholic.product.extend_xml_import_fields', function() {
$fields = [
'width' => 'Ширина',
'length' => 'Длина',
'height' => 'Высота',
];
return $fields;
});
Это действие добавит новые поля в настройках импорта товара.
Чтобы значения в базу добавились нам нужно дописать следующий код далее.
Product::extend(function($model) {
$model->addFillable([
'width',
'length',
'height',
]);
$model->addCachedField([
'width',
'length',
'height',
];
});
Вот и все! 🙂 Теперь у нас добавлены нужные нам поля в товаре + они участвую в импорте.
Таким же образом можно добавлять поля в offer шопаголика или в любой другой плагин октября.
Мой блог об OctoberCMS