1

尝试使用时出现错误

get*field*Options() method 

    field: name[field]

我尝试使用:

getName[field]Options() method but it return an error.

我怎样才能使这项工作?

字段.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(){ }

希望我说得够清楚..

4

2 回答 2

1

它不是 getName[field]Options()代替使用get[FieldName]Options()

如果您有一个模型Car并且您有一个名为的字段( Column )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] 中设置正确的选择名称)

于 2018-02-07T04:10:17.610 回答
1

@Raja Khoury - 感谢您让他了解下拉菜单的工作原理......

我们可以将此方法用于普通字段,例如manufacturer,但对于复杂字段,我们需要使用不同的方法

我们需要methods各自的模型中定义它:

首先normal fields是简单的方法get[fieldname]Options

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

public function getDropdownOptions($fieldName, $value, $formData)
{
    if ($fieldName == 'temakebum[bacaan]') {
        return ['all' => 'All', ...];
    }
    else {
        return ['' => '-- none --'];
    }
}

并将字段设置为JSON并将其存储为单个列中的数组@Raja Khoury已经在不同的问题中回答了它,您可以从那里参考: Octobercms: How can I make a repeater field jsonable because I'm creating this repeater field into a不同的插件

如果它对你有用,请也给他的答案投票:)

于 2018-02-07T08:36:47.153 回答