OctoberCMS вызывает данные другого плагина в выпадающем списке текущего плагина
Я новичок в OctoberCMS и мне нравится, как он работает. В настоящее время я создал два плагина под названием " Продукты" и " Категории продуктов". Я создал эти плагины, используя плагин Builder, который также является очень хорошим плагином для легкого создания других плагинов.
Теперь дело в том, что в моем плагине " Категории продуктов" у меня просто есть одно поле под названием " Категория продукта", и пользователь добавит столько категорий, сколько он / она хочет, и этот плагин работает отлично.
И в моем плагине " Продукты" у меня есть поле под названием " Категория продукта", которое представляет собой раскрывающееся поле, и мне нужны все те категории, которые я создал в плагинах " Категории продуктов" соответственно, но я почему-то не могу реализовать эту функцию. Это то, что я пробовал до сих пор.
Plugin.php (плагины \ technobrave \ products)
<?php namespace Technobrave\Products;
use System\Classes\PluginBase;
use technobrave\productcategory\Models\ProductCategory as ProductCategory;
use technobrave\products\Models\Product as ProductModel;
class Plugin extends PluginBase
{
public function registerComponents()
{
}
public function registerSettings()
{
}
public function boot()
{
ProductModel::extend(function($model){
$model->hasOne['ProductCategory'] = ['technobrave\productcategory\Models\ProductCategory'];
});
}
}
Product.php (плагины \technobrave\products\models)
<?php namespace Technobrave\Products\Models;
use Model;
/**
* Model
*/
class Product extends Model
{
use \October\Rain\Database\Traits\Validation;
/*
* Validation
*/
public $rules = [
'category' => 'required',
'product_brand' => 'required',
'product_channel' => 'required',
'product_type' => 'required',
'client_name' => 'required',
'project_name' => 'required',
'product_description' => 'required',
'banner_image' => 'required',
'product_images' => 'required',
];
public $customMessages = [
'category.required' => 'Please Select Product Category',
'product_brand.required' => 'Please Select Product Brand',
'product_channel.required' => 'Please Select Product Channel',
'product_type.required' => 'Please Select Product Type',
'client_name.required' => 'Please Enter Client Name',
'project_name.required' => 'Please Enter Project Name',
'product_short_description.required' => 'Please Enter Product Short Description',
'product_description.required' => 'Please Enter Product Description',
'banner_image.required' => 'Please select Product Banner Image',
'product_images.required' => 'Please select Product Image(s)',
];
/*
* Disable timestamps by default.
* Remove this line if timestamps are defined in the database table.
*/
//public $timestamps = false;
/**
* @var string The database table used by the model.
*/
public $table = 'technobrave_products_';
public $settingsFields = 'fields.yaml';
public $attachOne = [
'banner_image' => 'System\Models\File'
];
public $attachMany = [
'product_images' => 'System\Models\File'
];
public $belongsTo = [
'ProductCategory'=> ['technobrave\productcategory\Models\ProductCategory']
];
// Here i want my product dropdown categories to be dynamic
public function getCategoryOptions()
{
echo '<pre>';
print_r($ProductCategory);
exit;
//return array();
}
}
Но я продолжаю получать фатальную ошибку, говорящую:
Неопределенная переменная: ProductCategory
Для этого конкретного кода, который я положил в Product.php
echo '<pre>';
print_r($ProductCategory);
exit;
в файле Plugin.php выше у меня есть код ниже
use technobrave\productcategory\Models\ProductCategory as ProductCategory;
делая это, я пытаюсь получить все категории, которые я уже создал, и каким-то образом пытаюсь показать это в моем раскрывающемся списке.
Я знаю, что в OctoberCMS при создании плагинов мы можем иметь дело с логикой отношений (то есть hasMany, hasOne и т. Д.), Но сейчас я хочу добиться этого с помощью внешних плагинов. Я хочу добавить эти категории, которые будут заполнены в методе getCategoryOptions()
и я верну их в раскрывающемся списке.
Может ли кто-нибудь направить меня, если это возможно так, как я хочу?
Спасибо
1 ответ
Хорошо. Я нашел два способа добиться этого, и вот они ниже.
Первый путь
Product.php (плагины \technobrave\products\models)
<?php namespace Technobrave\Products\Models;
use Model;
use technobrave\productcategory\Models\ProductCategory as ProductCategory;
public function getCategoryOptions()
{
$fields = ProductCategory::lists('category_name','id');
print_r($fields);
}
Здесь выше, я только что использовал use technobrave\productcategory\Models\ProductCategory as ProductCategory;
и в моем методе getCategoryOptions()
Я только что добавил это ProductCategory::lists('category_name','id');
и вернул его, чтобы иметь возможность заполнять динамические категории в моем раскрывающемся списке. Это хорошо работает.
Второй способ
Product.php (плагины \technobrave\products\models)
<?php namespace Technobrave\Products\Models;
use Model;
use technobrave\productcategory\Models\ProductCategory as ProductCategory;
public function getCategoryOptions()
{
// getting only active categories
$get_categories = ProductCategory::all()->where('status',1);
$fields[''] = 'Select Product Category';
foreach ($get_categories as $current_category) {
$fields[$current_category->attributes['id']] = $current_category->attributes['category_name'];
}
print_r($fields);
}
Здесь выше, я просто написал запрос в моем методе getCategoryOptions()
и получил записи.
Вы можете использовать любой метод, который вы предпочитаете. Кроме того, было бы здорово, если бы я нашел лучшие способы реализовать то же самое.
Спасибо