Jump to:

17488 Posts in 4473 Topics by 1978 members

Archive

SilverStripe Forums » Archive » Dropdown fields state not saved

Our old forums are still available as a read-only archive.

Moderators: martimiz, Howard, Sean, Ryan M., biapar, Willr, Ingo

Page: 1
Go to End
Author Topic: 130 Views
  • shrike
    Avatar
    Community Member
    13 Posts

    Dropdown fields state not saved Link to this post

    Anyone had a problem with FilteredDropdownSet? I’ve got it listing the categories and items correctly and the selection is saved correctly, but when editing, the dropdowns don’t select the saved item. I suppose it has to do with that AvailableProduct.php thing, but how exactly is the class and the has_ones in it supposed to be named?

  • Willr
    Avatar
    Forum Moderator
    4579 Posts

    Re: Dropdown fields state not saved Link to this post

    static $has_one = array(
    'Foo' => 'FooClass' // creates a column 'FooID'
    );
    ..

    $fields->push(new DropdownField('FooID', 'Foo'..)

    Make sure you use FooID as the field name not Foo as you're referring to the relationship column value (which is stored as Name + ID)

  • shrike
    Avatar
    Community Member
    13 Posts

    Re: Dropdown fields state not saved Link to this post

    Thanx! Problem actually appears, when you use two drop downs inside FilteredDropdownSet. One dropdown works nicely - but... Idea is to create main categories to dropdown 1 and products based on selected item from dropdown 1 to appear in dropdown 2. Selection works nicely: items are printed nicely on the dropdowns but when hitting the save, products (in drop down 2) is back to default value.

    Hope you got the idea and figured out the problem?

  • UncleCheese
    Avatar
    4050 Posts

    Re: Dropdown fields state not saved Link to this post

    That form field does have one minor drawback, and that's that you have to redundantly store the value of the parent ID, as well. Let's look at an example with Towns and Regions. Towns have a parent Region. A Place is in a Town, and we'll use a FilteredDropdownSet to choose a region first, then the town.

    class Town extends DataObject
    {

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

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

    }

    class Region extends DataObject
    {

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

    }

    Place.php

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

    new FilteredDropdownSet(
    array(
    $region = new DropdownField('RegionID','Region',$map_of_regions),
    $town = new DropdownField('TownID','Town',$map_of_towns)
    ),
    "RegionID",
    "Town"
    )

    As you can see, the field RegionID is redundant on the Place object because we know it by transference through the TownID. It's a little annoying, but unfortunately it just works best that way in order to support the native functions of SilverStripe forms.

    ---------------
    Silverstripe tips, tutorials, screencasts, and more. http://www.leftandmain.com

  • shrike
    Avatar
    Community Member
    13 Posts

    Re: Dropdown fields state not saved Link to this post

    Many thanks! Works like a charm!

  • Sticks
    Avatar
    Community Member
    27 Posts

    Re: Dropdown fields state not saved Link to this post

    Make sure you use FooID as the field name not Foo as you're referring to the relationship column value (which is stored as Name + ID)

    Thanks Willr. This was my exact issue this morning.

    130 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.