1

我有一个产品目录。有:

Dzial.php - 分类页面

 class Dzial extends Page {
    ...
        static $has_many = array(        
        'Marka' =>  'Marka'
    );
 function getCMSFields()  {
...
$gridField = new GridField("Marka", "marki:", $this->Marka(), $gridFieldConfig);
    $fields->addFieldToTab("Root.Marki", $gridField);

PodDzial.php - 子类别页面

class PodDzial extends Page {
.....
static $has_many = array(
    'Kategoria' =>  'Kategoria',
        'Produkt'   =>  'Produkt'
);
function getCMSFields() {
....
 $gridField = new GridField("Produkt", "Produkty:", $this->Produkt(), $gridFieldConfig);
    $fields->addFieldToTab("Root.Produkty", $gridField);
  $gridField2 = new GridField("Kategoria", "Kategoria:", $this->Kategoria(), $gridFieldConfig);
    $fields->addFieldToTab("Root.Kategorie", $gridField2);

Produkt.php - 产品 - 属于 PodDzial.php 的数据对象

class Produkt extends DataObject {
.....
static $has_one = array (
    'PodDzial'  =>  'PodDzial',
    'Marka' =>  'Marka',
    'Kategoria' =>  'Kategoria'
);

Kategoria.php - 属于 PodDzial (has_one) 和 Produkt (has_many) 的产品类型

class Kategoria extends DataObject {
....
private static $has_one = array( 'PodDzial' =>  'PodDzial'  );    
private static $has_many = array ('Produkt' =>  'Produkt'  ); 

Marka.php - 产品品牌 - 属于 Dzial (has_one) 和 Produkt (has_many)

class Marka extends DataObject {
...
private static $has_one = array( 'Dzial'    =>  'Dzial'  ); 
private static $has_many = array ('Produkt' =>  'Produkt'); 

我在 PodDzial 页面上对 Produkt 进行自定义搜索。

不能正常工作的代码:

class Produkt extends DataObject {
...
public function getDefaultSearchContext() {

    $fields = new FieldList(
        DropdownField::create(
            'MarkaID',
            'Marka',
            Marka::get()->map('ID','Title')
        )->setEmptyString('--Wybierz marke--') ,
        DropdownField::create(
            'KategoriaID',
            'Kategoria',
            Kategoria::get()->filter(array('PodDzialID' => $this->PodDzialID))->map('ID','Title')
        )->setEmptyString('--Wybierz kategorie--')
    );

    $filters = array(
        'MarkaID' => new ExactMatchFilter('MarkaID'),
        'KategoriaID' => new ExactMatchFilter('KategoriaID')
    );

    return new SearchContext(
        $this->class,
        $fields,
        $filters
    );
}

两个下拉字段都工作不好。他们应该仅列出来自其 PodDzial 持有者的类别和来自父 Dzial 的 Marka。Marka 的字段现在显示所有 Marka,甚至来自其他类别。类别不显示任何内容。

我在 fieldlist 上使用相同的下拉菜单。类别的工作还可以。它仅显示来自给定 PodDzial 的数据。Markas 在父母持有人(Dzial)上,我也无法在那里访问它:

class Produkt extends DataObject {
....
 $xxx = 'LEFT JOIN `SiteTree` ON `SiteTree`.ParentID=`Marka`.DzialID';  
    function getCMSFields(){
$fields = FieldList::create(

        TabSet::create("Root",

            Tab::create("Main",
              ....
DropdownField::create(
        'MarkaID',
        'Marka',
        Marka::get()->filter($xxx, array('DzialID' =>  'ParentID'))->map('ID','Title')
    )->setEmptyString('-- None --'),
    DropdownField::create(
        'KategoriaID',
        'Kategoria',
        Kategoria::get()->filter(array('PodDzialID' => $this->PodDzialID))->map('ID','Title')
    )->setEmptyString('-- None --')

任何人都可以帮忙吗?

4

0 回答 0