0

저는 10 월 CMS를 처음 접하고 그것이 작동하는 방식을 좋아합니다. 현재 이라는 두 개의 플러그인을 만들었습니다. 제품제품 카테고리. 나는 다른 플러그인을 쉽게 만들 수있는 아주 좋은 플러그인 인 Builder Plugin을 사용하여 이러한 플러그인을 만들었습니다. OctoberCMS가 현재 플러그인의 드롭 다운에서 다른 플러그인의 데이터를 호출합니다.

는 이제 일이 내 제품 카테고리 플러그인에서, 나는 단순히 그/그녀가 원하는만큼의 카테고리를 추가합니다 제품 카테고리 및 사용자로라는 단일 필드가이 플러그인은 잘 작동합니다.

그리고 내 제품에

플러그인, 나는 드롭 다운 필드 제품 카테고리로라는 필드가 있고 난 플러그인 각각 제품 카테고리에서 만든 모든 범주를 원하지만 어떻게 든 내가 드릴 수 없습니다 이 기능을 구현하십시오. 이것은 내가 지금까지 시도한 것이다.

Plugin.php (플러그인 \ technobrave \ 제품)

<?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 \ 제품 \ 모델)

<?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(); 
    } 

} 

하지만 치명적인 점점 계속입니다 오류 메시지 :

Undefin ED 변수 : ProductCategory

제가 위에서 Plugin.php 파일 Product.php

echo '<pre>'; 
print_r($ProductCategory); 
exit; 

넣어 특정 코드 제가

use technobrave\productcategory\Models\ProductCategory as ProductCategory; 

이렇게 코드가 아래 이렇게함으로써, 나는 이미 만든 모든 범주를 얻으 려하고 어떻게 든 내 드롭 다운에 표시하려고합니다.

나는 플러그인을 작성하는 동안, 우리는 관계 로직 (즉, hasMany의 등 hasOne의) 처리 할 수 ​​OctoberCMS 알고 있지만, 지금은 내가 외부 플러그인이 방법으로 달성하고자합니다. 해당 범주를 메서드 getCategoryOptions()에 채우려면 추가하고 내 드롭 다운에 해당 범주를 반환합니다.

내가 원하는 방식으로 가능하면 누군가 가이드 할 수 있습니까?

감사합니다.

답변

1

Ok. 나는 이것을 달성 할 수있는 두 가지 방법을 발견했으며 아래는 그것들입니다.

방법 중 하나 개

제품.PHP (플러그인 \ technobrave \ 제품 \ 모델) 위의 여기

<?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 \ 제품 \ 모델) 여기

<?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()에서 쿼리를 작성하고 기록을 얻었다.

원하는 방법을 사용할 수 있습니다. 또한, 같은 것을 구현하는 더 좋은 방법을 찾으면 좋을 것입니다.

감사합니다.