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() и получил записи.

Вы можете использовать любой метод, который вы предпочитаете. Кроме того, было бы здорово, если бы я нашел лучшие способы реализовать то же самое.

Спасибо

Другие вопросы по тегам