带有州和郊区的 OctoberCMS Builder 插件

OctoberCMS Builder plugin with state and suburb

我使用 Builder 插件创建了两个插件(StatesSuburbs),到目前为止效果很好。

事情是,在 States 插件中,我只是允许添加州名称的能力,而在 Suburbs 插件中,我允许用户 select State 然后输入suburb name。这两个插件目前一切正常。

现在问题是,我有第三个插件,称为 Properties,其中我有这两个下拉菜单 State郊区 但截至目前所有州和所有郊区都在显示。但我希望用户先 select State 然后根据州 selection 它应该将所有郊区都转到我的另一个 Suburb 下拉。

我尝试使用 dependsOn Builder 插件提供的,但我无法理解根据我当前的场景逐步实现它的流程。以下是我到目前为止所做和尝试的代码。

plugins\technobrave\properties\models\Property.php

<?php namespace Technobrave\Properties\Models;

    use Model;
    use technobrave\states\Models\State as State;
    use technobrave\suburbs\Models\Suburb as Suburb;

    public function getStateIdOptions()
        {
            // getting all states 

           $get_all_states = State::all();


           $fields[''] = 'Select any State';
           foreach ($get_all_states as $current_state) {
                $fields[$current_state->attributes['id']] = $current_state->attributes['state_name'];

           }
          ksort($fields);  
          return $fields;
        }    



        public function getSuburbIdOptions($stateId)
        {
            // getting all suburbs 

            $get_all_suburbs = Suburb::all();

            $fields[''] = 'Select any Suburb';
            foreach ($get_all_suburbs as $current_suburb) {
                $fields[$current_suburb->attributes['id']] = $current_suburb->attributes['suburb'];

            }       


          ksort($fields);  
          return $fields;
        }
    }

从现在开始我该怎么做?任何帮助或指导将不胜感激和有用。

谢谢

好的,

最后我想出了一个解决办法。这是我所做的。

fields.yaml 文件:technobrave\properties\models\property\fields.yaml

        state_id:
            label: 'State:'
            span: auto
            required: 1
            type: dropdown
            tab: 'Address Information'
        suburb_id:
            label: 'Suburb:'
            span: auto
            required: 1
            type: dropdown
            tab: 'Address Information'
            placeholder: 'Select any Suburb'
            dependsOn: state_id

如你所见,

suburb_id我添加了下面两行代码。

placeholder: 'Select any Suburb'
dependsOn: state_id

属性 模型 文件:technobrave\properties\models\Property.php

use Model;
use technobrave\states\Models\State as State;
use technobrave\suburbs\Models\Suburb as Suburb;

public function getStateIdOptions()
    {
        // getting all states 

       $get_all_states = State::all();


       $fields[''] = 'Select any State';
       foreach ($get_all_states as $current_state) {
            $fields[$current_state->attributes['id']] = $current_state->attributes['state_name'];

       }
      ksort($fields);  
      return $fields;
    }    



public function getSuburbIdOptions()
{
    return Suburb::getNameList($this->state_id);
}

在上面,我刚刚用下面的代码更新了 getSuburbIdOptions 方法并删除了我的旧代码。

return Suburb::getNameList($this->state_id);

然后我去了我的 Suburbs 插件。

郊区模型 文件:technobrave\suburbs\models\Suburb.php

并且在这个模型文件中,我确保使用 belongsTo 并添加了 getNameList 方法,如下所示。

 <?php namespace Technobrave\Suburbs\Models;

    use Model;
    use technobrave\states\Models\State as State;
    /**
     * Model
     */
    class Suburb extends Model
    {

        /**
         * @var string The database table used by the model.
         */
        public $table = 'youtable_here_';


        public $belongsTo = ['State' => [
                                                      'technobrave\states\Models\State',
                                                      'key' => 'state'
                                                  ],

                            ];


        /**
         * @var array Cache for nameList() method
         */
        protected static $nameList = [];

        public static function getNameList($stateId)
        {
            if (isset(self::$nameList[$stateId])) {
                return self::$nameList[$stateId];
            }

            return self::$nameList[$stateId] = self::wherestate($stateId)->lists('suburb', 'id');
        }

    }

并且有效。

希望对那些卡在同一个问题上的人有所帮助issue/implementation。

谢谢