Пользовательский поиск Silverstripe

У меня есть каталог продукции. Есть:

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.

Код, который не работает должным образом:

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

Оба выпадающих поля работают плохо. Они должны перечислить Kategoria только от его владельца PodDzial и Marka от родительского Dzial. Поле Марки теперь показывает все Марки даже из других категорий. Kategoria ничего не показывает.

Я использую те же выпадающие списки. Работа Kategoria в порядке. Он показывает только данные из данного PodDzial. Марки находятся на родительском держателе (Дзиал), и я тоже не могу получить к нему доступ:

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 --')

Кто-нибудь может помочь?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]