尝试使用
时出错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;
}
我需要将这几个字段作为数组放入数据库表中..它更像是转发器小部件..但转发器要求用户点击添加新项目按钮..我不希望用户点击添加新按钮,但默认情况下我想要它
如果我使用转发器getnamefieldOptions方法运行良好..所以如果我使用转发器方法是
getBacaanOptions(){ }
希望我说得够清楚......
答案 0 :(得分:1)
不是 getName[field]Options()
而是使用get[FieldName]Options()
如果您的模型Car
并且您有一个名为Manufacturer
的字段(列),则方法名称为getManufacturerOptions()
汽车模型的fields.yaml
文件应如下所示;
color:
label: 'Color'
type: dropdown
manufacturer:
label: 'Manufacturer'
type: dropdown
然后在Car模式中添加方法;
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'
];
}
因为字段类型是下拉列表,所以方法应始终以格式返回结果:Value => Label
如果没有选项则返回一个空数组。
在fields.yaml
中定义选项时,无需在模型中添加方法
color:
label: 'Color'
type: dropdown
options:
black: Black
white: White
更新
1.将json列添加到数据库表$table->json('temakebum')->nullable();
2.在模型定义中添加protected $jsonable = [ 'temakebum ']
3.使用上面提到的命名约定将getBacaanOptions()
方法添加到模型中
4.保持您的fields.yaml文件字段不变,现在解决方法是将字段类型从下拉列表更改为部分temakebum[bacaan]
字段并填充选项
5.在您的控制器目录中创建一个部分并检查路径是否与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]中设置正确的选择名称)
答案 1 :(得分:1)
@Raja Khoury - 感谢让他了解下拉工作的方式......
我们可以将此方法用于<messageHidden inputs="$scope.inputs"/>
等常规字段,但对于复杂字段,我们需要使用不同的方法
我们需要在相应的模型中定义此manufacturer
:
methods
首先是简单方法获取[fieldname]选项
normal fields
第二次
public function get[fieldname]Options($value, $formData) { return ['all' => 'All', ...]; }
方法
specific method name
fields.yaml
status:
label: Blog Post Status
type: dropdown
options: listBacaan
inside your model
第三一般方法
public function listBacaan($fieldName, $value, $formData)
{
return ['key1' => 'data1', ...];
}
inside your model
将字段设为 JSON 并将其存储为数组在单列 @Raja Khoury 中已经回答了不同的问题,你可以从那里获取参考:Octobercms: How can I make a repeater field jsonable because I am creating this repeater field into a different plugin
如果它对你有用,请向他的答案进行投票:)