如何在 octobercms 中定义 getName[field]Options() 方法
how to define getName[field]Options() method in octobercms
我在尝试使用时遇到错误
get*field*Options() method
到
field: name[field]
我尝试使用:
getName[field]Options() method but it return an error.
我怎样才能使这个工作?
fields.yaml
temakebum[tema]:
tab: 'Kebaktian Umum & Komisi'
label: Tema
oc.commentPosition: ''
span: full
type: text
temakebum[bacaan]:
label: 'Bahan Bacaan'
oc.commentPosition: ''
span: full
type: dropdown
tab: 'Kebaktian Umum & Komisi'
temakebum[pujian]:
label: Pujian
oc.commentPosition: ''
span: full
type: text
tab: 'Kebaktian Umum & Komisi'
在模型中
public function getTemakebum[bacaan]Options() {
$bacaan = Db::table('mismaiti_mywarta_jadwlibdh')->where('group','umumraya')->pluck('bacaan','bacaan');
return $bacaan;
}
我需要将这几个字段作为数组放入数据库table..它更像是转发器小部件..但是转发器需要用户点击添加新项目按钮..我不希望用户点击添加新按钮,但我希望它默认存在
如果我使用中继器 getnamefieldOptions 方法效果很好..所以如果我使用中继器,该方法是
getBacaanOptions(){ }
希望我说的够清楚了..
不是 getName[field]Options()
而是使用get[FieldName]Options()
如果您有一个模型 Car
并且您有一个名为 Manufacturer
的字段( Column ),那么方法名称是 getManufacturerOptions()
汽车模型的 fields.yaml
文件应如下所示;
color:
label: 'Color'
type: dropdown
manufacturer:
label: 'Manufacturer'
type: dropdown
然后在汽车模式下添加方法;
public function getManufacturerOptions() {
return [
'volkswagen' => 'Volkswagen',
'ford' => 'Ford',
'toyota' => 'Toyota'
];
// Or return ManufacturerModel::all()->pluck('name','id');
}
public function getColorOptions() {
return [
'black' => 'Black',
'white' => 'White'
];
}
因为字段类型是下拉列表,所以该方法应该总是 return 结果为格式为数组的结果:Value => Label
如果没有选项 return 一个空数组。
当您在 fields.yaml
中定义选项时,则无需在模型中添加该方法
color:
label: 'Color'
type: dropdown
options:
black: Black
white: White
更新
1.Add json 列到您的数据库 table $table->json('temakebum')->nullable();
2.Add protected $jsonable = [ 'temakebum ']
在您的模型定义中
3.Using 我上面提到的命名约定将 getBacaanOptions()
方法添加到您的模型
4.Keep 您的 fields.yaml 文件字段,现在的解决方法是将 temakebum[bacaan]
字段的字段类型从下拉更改为部分,并在其中填充选项
5.Create 部分在您的控制器目录中并检查路径是否与 fields.yaml
文件中的路径匹配
到目前为止 fields.yaml
看起来像这样
temakebum[tema]:
label: Tema
type: text
temakebum[bacaan]:
label: 'Bahan Bacaan'
type: partial
path: $/authorName/pluginName/controllers/pluginControllerName/bacaan.htm
temakebum[pujian]:
label: Pujian
type: text
你的 bacaan.htm
部分是这样的:
<?php
$fieldOptions = $model->getBacaanOptions(); // See here we are fetching values
$Temakebum = json_decode($model->attributes['temakebum'], true) ?: [];
?>
<select class="form-control custom-select" name="YourModelHere[temakebum][bacaan]">
<?php foreach( $fieldOptions as $key=>$label) { ?>
<option value="<?= $key ?>" <?php echo ( $Temakebum['bacaan'] == $key) ? "selected" : ''; ?> ><?= $label ?></option>
<?php } ?>
</select>
(确保在部分 YourModelHere[temakebum][bacaan] 中设置正确的 select 名称)
@Raja Khoury - 感谢您让他了解下拉菜单的工作原理...
对于像manufacturer
这样的普通字段,我们可以使用这种方法,但是对于复杂的字段,我们需要使用不同的方法
我们需要在各自的模型中定义这个methods
:
First for normal fields
there is simple approach get[fieldname]Options
public function get[fieldname]Options($value, $formData)
{
return ['all' => 'All', ...];
}
Second specific method name
approach
fields.yaml
status:
label: Blog Post Status
type: dropdown
options: listBacaan
inside your model
public function listBacaan($fieldName, $value, $formData)
{
return ['key1' => 'data1', ...];
}
Third General Approach
inside your model
public function getDropdownOptions($fieldName, $value, $formData)
{
if ($fieldName == 'temakebum[bacaan]') {
return ['all' => 'All', ...];
}
else {
return ['' => '-- none --'];
}
}
并将字段设为JSON并将其存储为单列数组中的@ Raja Khoury 已经在不同的问题中回答了它,您可以从那里获取 reference:
如果它对你有用,请也为他的答案投上一票:)
我在尝试使用时遇到错误
get*field*Options() method
到
field: name[field]
我尝试使用:
getName[field]Options() method but it return an error.
我怎样才能使这个工作?
fields.yaml
temakebum[tema]:
tab: 'Kebaktian Umum & Komisi'
label: Tema
oc.commentPosition: ''
span: full
type: text
temakebum[bacaan]:
label: 'Bahan Bacaan'
oc.commentPosition: ''
span: full
type: dropdown
tab: 'Kebaktian Umum & Komisi'
temakebum[pujian]:
label: Pujian
oc.commentPosition: ''
span: full
type: text
tab: 'Kebaktian Umum & Komisi'
在模型中
public function getTemakebum[bacaan]Options() {
$bacaan = Db::table('mismaiti_mywarta_jadwlibdh')->where('group','umumraya')->pluck('bacaan','bacaan');
return $bacaan;
}
我需要将这几个字段作为数组放入数据库table..它更像是转发器小部件..但是转发器需要用户点击添加新项目按钮..我不希望用户点击添加新按钮,但我希望它默认存在
如果我使用中继器 getnamefieldOptions 方法效果很好..所以如果我使用中继器,该方法是
getBacaanOptions(){ }
希望我说的够清楚了..
不是 getName[field]Options()
而是使用get[FieldName]Options()
如果您有一个模型 Car
并且您有一个名为 Manufacturer
的字段( Column ),那么方法名称是 getManufacturerOptions()
汽车模型的 fields.yaml
文件应如下所示;
color:
label: 'Color'
type: dropdown
manufacturer:
label: 'Manufacturer'
type: dropdown
然后在汽车模式下添加方法;
public function getManufacturerOptions() {
return [
'volkswagen' => 'Volkswagen',
'ford' => 'Ford',
'toyota' => 'Toyota'
];
// Or return ManufacturerModel::all()->pluck('name','id');
}
public function getColorOptions() {
return [
'black' => 'Black',
'white' => 'White'
];
}
因为字段类型是下拉列表,所以该方法应该总是 return 结果为格式为数组的结果:Value => Label
如果没有选项 return 一个空数组。
当您在 fields.yaml
中定义选项时,则无需在模型中添加该方法
color:
label: 'Color'
type: dropdown
options:
black: Black
white: White
更新
1.Add json 列到您的数据库 table $table->json('temakebum')->nullable();
2.Add protected $jsonable = [ 'temakebum ']
在您的模型定义中
3.Using 我上面提到的命名约定将 getBacaanOptions()
方法添加到您的模型
4.Keep 您的 fields.yaml 文件字段,现在的解决方法是将 temakebum[bacaan]
字段的字段类型从下拉更改为部分,并在其中填充选项
5.Create 部分在您的控制器目录中并检查路径是否与 fields.yaml
文件中的路径匹配
到目前为止 fields.yaml
看起来像这样
temakebum[tema]:
label: Tema
type: text
temakebum[bacaan]:
label: 'Bahan Bacaan'
type: partial
path: $/authorName/pluginName/controllers/pluginControllerName/bacaan.htm
temakebum[pujian]:
label: Pujian
type: text
你的 bacaan.htm
部分是这样的:
<?php
$fieldOptions = $model->getBacaanOptions(); // See here we are fetching values
$Temakebum = json_decode($model->attributes['temakebum'], true) ?: [];
?>
<select class="form-control custom-select" name="YourModelHere[temakebum][bacaan]">
<?php foreach( $fieldOptions as $key=>$label) { ?>
<option value="<?= $key ?>" <?php echo ( $Temakebum['bacaan'] == $key) ? "selected" : ''; ?> ><?= $label ?></option>
<?php } ?>
</select>
(确保在部分 YourModelHere[temakebum][bacaan] 中设置正确的 select 名称)
@Raja Khoury - 感谢您让他了解下拉菜单的工作原理...
对于像manufacturer
这样的普通字段,我们可以使用这种方法,但是对于复杂的字段,我们需要使用不同的方法
我们需要在各自的模型中定义这个methods
:
First for
normal fields
there is simple approach get[fieldname]Options
public function get[fieldname]Options($value, $formData)
{
return ['all' => 'All', ...];
}
Second
specific method name
approach
fields.yaml
status:
label: Blog Post Status
type: dropdown
options: listBacaan
inside your model
public function listBacaan($fieldName, $value, $formData)
{
return ['key1' => 'data1', ...];
}
Third General Approach
inside your model
public function getDropdownOptions($fieldName, $value, $formData)
{
if ($fieldName == 'temakebum[bacaan]') {
return ['all' => 'All', ...];
}
else {
return ['' => '-- none --'];
}
}
并将字段设为JSON并将其存储为单列数组中的@ Raja Khoury 已经在不同的问题中回答了它,您可以从那里获取 reference:
如果它对你有用,请也为他的答案投上一票:)