Silverstripe自定义搜索

时间:2016-08-19 19:55:34

标签: php silverstripe data-objects

我有产品目录。有:

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 - product - 属于PodDzial.php

的DataObjects
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持有人和Marka的父母Dzial中列出Kategoria。马卡的领域现在甚至从其他类别显示所有马卡。 Kategoria什么都没有。

我在fieldlist上使用相同的下拉列表。 Kategoria的工作还可以。它仅显示来自给定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 --')

有人可以帮忙吗?

0 个答案:

没有答案