带有州和郊区的 OctoberCMS Builder 插件
OctoberCMS Builder plugin with state and suburb
我使用 Builder 插件创建了两个插件(States 和 Suburbs),到目前为止效果很好。
事情是,在 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。
谢谢
我使用 Builder 插件创建了两个插件(States 和 Suburbs),到目前为止效果很好。
事情是,在 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。
谢谢