У меня есть каталог продукции. Есть:
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 --')
Кто-нибудь может помочь?
Задача ещё не решена.
Других решений пока нет …