Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

DataObjectManager Module /

Discuss the DataObjectManager module, and the related ImageGallery module.

Moderators: martimiz, UncleCheese, Sean, biapar, Willr, Ingo, swaiba, simon_w

[SOLVED] FilteredDropdownSet - not filtered


Reply


3 Posts   1724 Views

Avatar
Craftnet

Community Member, 58 Posts

19 February 2012 at 1:32pm

Edited: 19/02/2012 1:42pm

Hi,
I have a problem with FilteredDropdownSet

I have three DataObject
Two is Province and Twon
Third is Simple Object

I have that code

Province.php

class Province extends DataObject
{

static $db = array (
'Title' => 'Varchar(255)',
);

static $field_labels = array(
      'Title' => 'Województwo'
   );

}

and

Town.php

class Town extends DataObject
{

static $db = array (
'Title' => 'Varchar(255)',
);

static $has_one = array (
'Province' => 'Province',
);

static $has_many = array (
'Anonse' => 'Anons',
);

static $field_labels = array(
      'Title' => 'Miasto'
   );
}

and DataObject Anons.php (he display in frontpage)

class Anons extends DataObject
{   

.................
   
   static $has_one = array(
      'Province' => 'Province',
      'Town' => 'Town'
   );

   //Fields to search in ModelAdmin
   static $searchable_fields = array (
      'Province.ID' => array('title' => 'Województwo'),
      'Town.ID' => array('title' => 'Miasto'),
   );

   function getCMSFields()
   {
      $fields = parent::getCMSFields();

....................      
      
      
      //Main Tab
      $fields->removeByName('Province');
      $fields->removeByName('Town');
      

      $province_map = array();
      $town_map = array();
      
      if($result = DataObject::get("Province")) {
   $province_map = $result->toDropdownMap();
}
      
      if($result = DataObject::get("Town")) {
   $town_map = $result->toDropdownMap();
}
      
      $fields->addFieldToTab("Root.Main", new FilteredDropdownSet(array(
         new DropdownField('ProvinceID', 'Province', $province_map),
         new DropdownField('TownID', 'Town', $town_map)
      ),
      "ProvinceID",
      "Town"
      ));
      
      return $fields;
   }

   .........................
   
   public function getCustomSearchContext() {
      $province_map = array();
      $town_map = array();
      
      if($result = DataObject::get("Province")) {
   $province_map = $result->toDropdownMap();
}
      
      if($result = DataObject::get("Town")) {
   $town_map = $result->toDropdownMap();
}    
      $fields = new FieldSet(
         new FilteredDropdownSet(array(
         new DropdownField('ProvinceID', 'Province', $province_map),
         new DropdownField('TownID', 'Town', $town_map)
      ),
      "ProvinceID",
      "Town"
      )
);
$filters = array(
'Province' => new ExactMatchMultiFilter('Province.ID'),
'Town' => new ExactMatchMultiFilter('Town.ID'),
);
return new SearchContext(
$this->class,
$fields,
$filters
);   

}

Neither in the frontend or backend filtering does not work.
I mean when for example I point on province "lodzkie" in second field (Town) not filtered - allways display all Twon

Sorry for my bad English

Avatar
pedro2555

Community Member, 2 Posts

3 May 2012 at 11:30pm

Edited: 03/05/2012 11:30pm

The problem is in the FieldSet. FilteredDropdownSet does not work inside a FieldSet nor a FieldGroup. I had that same problem, f*ck*ng nightmare. Try it out like this :

$filter = new FilteredDropdownSet(array(
new DropdownField('ProvinceID', 'Province', $province_map),
new DropdownField('TownID', 'Town', $town_map)
),
"ProvinceID",
"Town"
);

$fields->addFieldToTab("Root.Main", $filter);

Be sure to fully populate the $province_map and $town_map.

Cheers, hope it works.

Avatar
Craftnet

Community Member, 58 Posts

17 October 2012 at 1:47pm

Hi,
I did not have when check this

Looks like it works :)
Many thank's

You are right - this is f*ck*ng nightmare

Sorry for bad English