0

オンラインショップを構築中です。ラジオ ボタン (Silverstripe の OptionsetField) を使用して ModelAdmin を使用して管理している DataObjects の has_one : has_many 関係を実装しようとしていますが、2 つの問題があります。

  1. CMS で [保存] をクリックしても、関係の値がデータベースに保存されません。

  2. 状態が保持されないため、次に CMS にログインしたときに、前回選択したラジオ ボタンを確認できます。

次は私のコードです

---- モデル管理者 ----

<?php

class ProductAdmin extends ModelAdmin {

    private static $menu_title = 'Store Manager';

    private static $url_segment = 'StoreManager';

    private static $managed_models = array (
        'Product'=>array('title'=>'All Store Products'),
        'ProductCategory'=>array('title'=>'Product Categories'),
        'ProductSubcategory'=>array('title' => 'Product Sub Categories')
    );

    public $showImportForm = false;

    }

- - カテゴリー - -

<?php

    class ProductCategory extends DataObject {

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

        /**
         * This relation links the Category to the Menu Items e.g. Category BoysClothing will be related to Boys * Menu Item.
         */
        private static $has_one = array(
            'Page' => 'Page'
        );

        private static $has_many = array (
            'Subcategories' => 'ProductSubcategory'
        );
        public function getCMSFields(){
            $fields = FieldList::create(TabSet::create('Root'));

            $fields->addFieldsToTab('Root.Main', array(
                TextField::create('Title', 'Name of Category'),

                OptionsetField::create(
                    'Page', //name
                    'Page this category belongs to', //title
                    SiteTree::get()->filter(array('ShowInMenus' => '1'))->map('ID', 'Title'),
                    1
                )

            )//close array of fields
            );//end adding fields to main tab 

            return $fields;
        }
}

---- 製品サブカテゴリー ----

<?php

    class ProductSubcategory extends DataObject {

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

        /**
         * This relation links the Sub Category to the Category e.g. Category Khakis will be related to Boys 
         * Category
         *
         */
        private static $has_one = array(
            'Category' => 'ProductCategory'
        );//will lead to creation of column BoysPageID on the table BoysCategory

        private static $has_many = array (
            'Products' => 'Product'
        );

         public function getCMSFields(){
            $fields = FieldList::create(TabSet::create('Root'));

            $fields->addFieldsToTab('Root.Main', array(
                TextField::create('Title', 'Name of Sub Category'),
                DropdownField::create(
                  'Category',
                  'Category this subcategory belongs to',
                  ProductCategory::get()->map('ID', 'Title')
                )


            )//close array of fields
            );//end adding fields to main tab 

            return $fields;
        }


    }//end class

    ---- Product ----
    <?php

    class Product extends DataObject{
        private static $db = array (
            'Title'     => 'Varchar(255)',
            'Price'     => 'Varchar',
            'Colors'    => 'Varchar',
            'Sizes'     => 'Varchar',
            'FeaturedOnHomepage' => 'Boolean'
        );

        private static $has_one = array (
            'PrimaryPhoto' => 'Image',
            'ProductSubcategory' => 'ProductSubcategory'
        );


        static $summary_fields = array (
            'Title' => 'Name',
            'Price' => 'Price',
            'FeaturedOnHomepage.Nice' => 'Featured?',
            'Thumbnail' => 'Picture'
        );



        public function getCMSFields(){
            $fields = FieldList::create(TabSet::create('Root'));

            $fields->addFieldsToTab('Root.Main', array(
                TextField::create('Title', 'Name of product'),
                TextField::create('Price', 'Price of product'),
                TextField::create('Colors', 'Available Colors'), //Make this a checkbox set or multiselect drop down
                TextField::create('Sizes', 'Available Sizes'), //Make this a checkbox set or multiselect drop down
                CheckboxField::create('FeaturedOnHomepage', 'Feature On HomePage'),
                CheckboxSetField::create(
                    'ProductSubcategory',
                    'Sub categories this product belongs to',
                    ProductSubcategory::get()->map('ID', 'Title')
                ),
                $primary_photo = UploadField::create('PrimaryPhoto', 'Product Primary Photo')
            )//close array of fields
            );//end adding fields to main tab 

            //Add other photos related to this image in a deifferent tab
            $other_product_photos = UploadField::create('ProductImages', 'Product Photo');
            $fields->addFieldsToTab('Root.Other Photos', $other_product_photos);

            //limit image extensions
            $primary_photo->getValidator()->setAllowedExtensions(array('jpg', 'jpeg', 'png', 'gif'));
            $other_product_photos->getValidator()->setAllowedExtensions(array('jpg', 'jpeg', 'png', 'gif'));

            //set Folders
            $primary_photo->setFolderName('ProductPhotos');
            $other_product_photos->setFolderName('ProductPhotos');


            //return
            return $fields;
        }


        public function Link(){
            $sview_link = "prods/sview/";
            return $sview_link.$this->ID;
        }

        public function getThumbnail(){
            if($this->PrimaryPhoto()->ID){
                return $this->PrimaryPhoto()->setWidth(80);
            }else{
                return 'No Image';
            }
        }


    }//close class Product
4

1 に答える 1