0

Ich bin neu bei OctoberCMS und ich liebe die Art, wie es funktioniert. Zur Zeit habe ich zwei Plugins namens Produkte und Produktkategorien erstellt. Ich habe diese Plugins mit Builder Plugin erstellt, die auch ein sehr gutes Plugin ist, um mit Leichtigkeit andere Plugins zu erstellen.OctoberCMS rufen die Daten eines anderen Plugins im Drop-down-Menü des aktuellen Plugins auf

Nun ist die Sache, in meinem Produkte Kategorien Plugin, habe ich einfach ein einzelnes Feld als Produktkategorie und Benutzer aufgerufen, so viele Kategorien werden hinzufügen, wie er/sie will und dieses Plugin funktioniert gut.

Und in meinem Produkte Plugin, habe ich ein Feld als Produktkategorie genannt, die ein Dropdown-Feld ist, und ich will alle jene Kategorien, die ich jeweils in Produktkategorien Plugins erstellt haben, aber irgendwie bin ich nicht in der Lage zu Implementieren Sie diese Funktion. Das habe ich bisher versucht.

plugin.php (Plugins \ technobrave \ Produkte)

<?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 (Plugins \ technobrave \ Produkte \ Modelle)

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

} 

Aber ich halte mich immer tödlich Fehlermeldung Meldung:

Undefin ed Variable: Produkt

Für diesen speziellen Code, den ich product.php in setzen

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

oben plugin.php Datei i Code unten haben

use technobrave\productcategory\Models\ProductCategory as ProductCategory; 

so indem ich das tue, versuche ich, alle Kategorien zu bekommen, die ich bereits erstellt habe und irgendwie versuche, es in meinem Dropdown zu zeigen.

Ich weiß, in OctoberCMS während Plugins Erstellen wir mit Beziehungen Logik (das heißt hasMany, hasOne usw.), aber jetzt wollen beschäftigen kann ich mit externen Plugins auf diese Weise erreichen. Ich möchte hinzufügen, dass diese Kategorien in der Methode getCategoryOptions() ausgefüllt werden, und ich werde diese in meinem Dropdown zurückgeben.

Kann mir jemand sagen, ob es möglich ist, was ich will?

Danke

Antwort

1

Ok. Ich habe zwei Wege gefunden, dies zu erreichen, und hier unten sind diese.

Way One

Produkt.php (Plugins \ technobrave \ Produkte \ Modelle)

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

Hier oben, habe ich use technobrave\productcategory\Models\ProductCategory as ProductCategory; nur verwendet und in meiner Methode getCategoryOptions(), ich habe gerade diesen ProductCategory::lists('category_name','id'); und gab es hinzugefügt, um die Lage sein, dynamische Kategorien zu füllen in meinem Dropdown-Liste. Das funktioniert gut.

Way Zwei

product.php (Plugins \ technobrave \ Produkte \ Modelle)

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


    } 

Hier oben, habe ich einfach eine Abfrage in meiner Methode getCategoryOptions() geschrieben und die Aufzeichnungen einsehen.

können Sie verwenden, je nachdem, welche Methode, die Sie bevorzugen. Außerdem wäre es großartig, wenn ich bessere Möglichkeiten finde, dasselbe zu implementieren.

Dank

Verwandte Themen